Our current project includes some jersey jar package and Jackson jar packages, but seems these jar binary cannot works well in
tomcat container.
If we remove "jackson-jaxrs.jar" from the /WEB-INF/lib directory and add "jsr311-api-1.1.1.jar" to that directory, we notice
"javax.ws.rs.ext.MessageBodyReader" is loaded from "catalina.out".
[Loaded javax.ws.rs.ext.MessageBodyReader from file:/var/lib/tomcat7/webapps/***/WEB-INF/lib/jsr311-api-1.1.1.jar]
this seems a correct behavior but we saw follow issue after invoking API from the console.
SEVERE: A message body reader for Java class ***, and Java type class ***, and MIME media type application/json was not found.
The registered message body readers compatible with the MIME media type are:
application/json ->
com.sun.jersey.json.impl.provider.entity.JSONJAXBElementProvider$App
com.sun.jersey.json.impl.provider.entity.JSONArrayProvider$App
com.sun.jersey.json.impl.provider.entity.JSONObjectProvider$App
com.sun.jersey.json.impl.provider.entity.JSONRootElementProvider$App
com.sun.jersey.json.impl.provider.entity.JSONListElementProvider$App
*/* ->
com.sun.jersey.core.impl.provider.entity.FormProvider
com.sun.jersey.core.impl.provider.entity.StringProvider
com.sun.jersey.core.impl.provider.entity.ByteArrayProvider
com.sun.jersey.core.impl.provider.entity.FileProvider
com.sun.jersey.core.impl.provider.entity.InputStreamProvider
com.sun.jersey.core.impl.provider.entity.DataSourceProvider
com.sun.jersey.core.impl.provider.entity.XMLJAXBElementProv
seems we need also add "jackson-jaxrs.jar" to /WEB-INF/lib directory, but we hit follow issue this time if we add
"jackson-jaxrs.jar".
...
javax.servlet.ServletException: Servlet.init() for servlet ServletAdaptor threw exception
org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1002)
org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:585)
org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
java.lang.Thread.run(Thread.java:722)
</pre></p><p><b>root cause</b> <pre>java.lang.NoClassDefFoundError: javax/ws/rs/ext/MessageBodyReader
java.lang.ClassLoader.findBootstrapClass(Native Method)
java.lang.ClassLoader.findBootstrapClassOrNull(ClassLoader.java:1057)
java.lang.ClassLoader.loadClass(ClassLoader.java:412)
java.lang.ClassLoader.loadClass(ClassLoader.java:410)
...
actually this class "javax/ws/rs/ext/MessageBodyReader" is in this jar "jsr311-api-1.1.1.jar" or "jersey-core.jar", but this class
do haven't been loaded as we cannot find any class loading information from "catalina.out" this time.
web.xml:
<web-app version="3.0" xmlns="
http://java.sun.com/xml/ns/javaee" xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="
http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<servlet>
<servlet-name>ServletAdaptor</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>com.sun.jersey.spi.container.ResourceFilters</param-name>
<param-value>com.***FilterFactory</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>ServletAdaptor</servlet-name>
<url-pattern>/resources/*</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>
30
</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<listener>
<listener-class>com.***Manager</listener-class>
</listener>
</web-app>
This is a big trouble for us, it's really make me headache and we nearly despair as no workaround approach seems work so far, any
helps?
Great appreciation for any of inputs!
Best Regards,
Dave Chen
- application/pkcs7-signature attachment: smime.p7s