java - with - La excepción jersey solo se lanza cuando las dependencias se agrupan en un solo contenedor
maven-jar-plugin (2)
¿Podrías publicar tu pom?
¿Marcas algunas dependencias según lo provisto? Es algo bastante diferente crear una aplicación independiente y una aplicación web, ya que se supone que el contenedor web (tomcat u otro) debe proporcionar algunos recipientes.
Como su contenedor está "incrustado" en su aplicación (y no en su aplicación en el contenedor), entonces quizás no administre correctamente estas dependencias.
Estoy escribiendo un servidor que incrusta Jetty w / Jersey. Cuando ejecuto desde Eclipse, todo es genial. Sin embargo, si ensamblo mi servidor y todas las dependencias en un único contenedor utilizando el ensamblaje de Maven: objetivo único, obtengo una excepción:
Sep 26, 2012 5:35:59 PM com.sun.jersey.spi.container.ContainerResponse write
SEVERE: A message body writer for Java class com.acme.server.webservice.
exception.WebServiceFailure, and Java type class com.acme.server.webserv
ice.exception.WebServiceFailure, and MIME media type application/json was not fo
und
Sep 26, 2012 5:35:59 PM com.sun.jersey.spi.container.ContainerResponse write
SEVERE: The registered message body writers compatible with the MIME media type
are:
*/* ->
com.sun.jersey.server.impl.template.ViewableMessageBodyWriter
17:35:59.372 [qtp184245201-22 - /] ERROR o.a.h.ReflectorServletProcessor - onReq
uest()
javax.ws.rs.WebApplicationException: com.sun.jersey.api.MessageException: A mess
age body writer for Java class com.acme.server.webservice.exception.WebS
erviceFailure, and Java type class com.acme.server.webservice.exception.
WebServiceFailure, and MIME media type application/json was not found
at com.sun.jersey.spi.container.ContainerResponse.write(ContainerRespons
e.java:285) ~[vma-server-0.0.1-SNAPSHOT-jar-with-dependencies.jar:na]
at com.sun.jersey.server.impl.application.WebApplicationImpl._handleRequ
est(WebApplicationImpl.java:1457) ~[server-0.0.1-SNAPSHOT-jar-with-dependenc
ies.jar:na]
...
El seguimiento completo está aquí, si es útil: https://gist.github.com/3790817
Maven no arroja errores mientras crea el jar-with-dependence.
Soy un principiante con Maven y el despliegue de Java, y realmente no estoy seguro de cómo proceder con la depuración.
Además, aunque necesito resolver este problema, también agradecería cualquier solución alternativa sugerida, ya que necesito producir una demostración ejecutable de mi servidor lo antes posible que un Pointy-Haired Boss (tm) pueda ejecutar sin Eclipse.
Solución:
Basándome en la respuesta de Pavel, dejé el plugin maven-assemly-plugin a favor del plugin maven-shade-plugin. Aquí está la configuración de sombras que funcionó para mí:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>2.0</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<transformers>
<!-- use transformer to handle merge of META-INF/services - see http://java.net/jira/browse/JERSEY-440?focusedCommentId=14822&page=com.atlassian.jira.plugin.system.issuetabpanels%3Acomment-tabpanel#action_14822 -->
<transformer
implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer" />
</transformers>
<filters>
<!-- filter to address "Invalid signature file" issue - see http://stackoverflow.com/a/6743609/589215-->
<filter>
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
</excludes>
</filter>
</filters>
</configuration>
</execution>
</executions>
</plugin>
No estás fusionando los frascos de Jersey correctamente.
Jersey 1.x utiliza el mecanismo META-INF / services para descubrir sus componentes y ensamble: single probablemente solo copia todo en un solo contenedor, anulando archivos ya presentes PERO META-INF / services file (s) necesita ser CONCATENADO.
Pruebe usar jersey-bundle ( com.sun.jersey:jersey-bundle:1.14 ) o arregle sus configuraciones de ensamblaje (o busque otro plugin para hacerlo mejor).