2010-12-01 24 views
5

Estoy intentando Atmosphere junto con Jersey para poder transmitir mensajes a los usuarios. Sin embargo, a petición del punto final de Jersey, aparece lo siguiente en el registro y los resultados en ServletException.Dependencias faltantes con Atmosphere y Jersey

SEVERE: The following errors and warnings have been detected with resource and/or provider classes: 
    SEVERE: Missing dependency for method public void org.apache.cxf.jaxrs.provider.JSONProvider.setMessageContext(org.apache.cxf.jaxrs.ext.MessageContext) at parameter at index 7 
    SEVERE: Missing dependency for field: private org.apache.cxf.jaxrs.ext.MessageContext org.apache.cxf.jaxrs.provider.RequestDispatcherProvider.mc 
    SEVERE: Missing dependency for method public void org.apache.cxf.jaxrs.provider.JAXBElementProvider.setMessageContext(org.apache.cxf.jaxrs.ext.MessageContext) at parameter at index 1 
    SEVERE: Missing dependency for field: private org.apache.cxf.jaxrs.ext.MessageContext org.apache.cxf.jaxrs.provider.MultipartProvider.mc 
    SEVERE: Missing dependency for method public void org.apache.cxf.jaxrs.provider.JAXBElementProvider.setMessageContext(org.apache.cxf.jaxrs.ext.MessageContext) at parameter at index 13 
    SEVERE: Missing dependency for field: private org.apache.cxf.jaxrs.ext.MessageContext org.apache.cxf.jaxrs.provider.FormEncodingProvider.mc 

Parte de StackTrace:

SEVERE: Allocate exception for servlet AtmosphereServlet 
javax.servlet.ServletException 
    at org.atmosphere.cpr.AtmosphereServlet.init(AtmosphereServlet.java:540) 
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1173) 
    at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:809) 

estoy usando Maven y he añadido la siguiente dependencia:

<dependency> 
    <groupId>org.atmosphere</groupId> 
    <artifactId>atmosphere-jersey</artifactId> 
    <version>0.6.3</version> 
</dependency> 

¿Qué me falta? ¡Gracias!

Respuesta

6

El problema aparentemente era que dos implementaciones de JAX-RS de alguna manera existían en la aplicación. Esto se puede resolver haciendo que Jersey escanee solo el paquete que contiene las clases Rest y, por lo tanto, no tenga conocimiento de otras implementaciones JAX-RS.

<servlet> 
    <description>AtmosphereServlet</description> 
    <servlet-name>AtmosphereServlet</servlet-name> 
    <servlet-class>org.atmosphere.cpr.AtmosphereServlet</servlet-class> 
    ... 
    <init-param> 
    <param-name>com.sun.jersey.config.property.packages</ param-name> 
    <param-value>mypackage.with.the.rest.classes</param-value> 
    </init-param> 
</servlet> 

Gracias a Paul Sandoz en la lista de correo Jersey y Jeanfrancois en la lista de correo Ambiente.

+0

Gracias, funcionó perfectamente en mi caso, mientras que Apache Tomcat me estaba diciendo "SEVERE: falta la dependencia del método public void org.apache.cxf.jaxrs.provider.RequestDispatcherProvider.setMessageContext (org.apache.cxf.jaxrs.ext.MessageContext) en el parámetro en el índice 14" acaba de cambiar mi paquete.con.el.rest .classes para el paquete donde se definió mi REST, y todo funcionó. Muchas gracias. – tremendows

0

Se informó que degradar una versión descriptor de aplicación Web en web.xml puede ayudar a desactivar el nativo (Jersey) de exploración: http://cxf.apache.org/docs/jax-rs-deployment.html#JAX-RSDeployment-WebLogic

<!-- From: --> 
<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/j2ee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
    http://java.sun.com/xml/ns/j2ee/web-app_3_0.xsd"> 
</web-app> 
<!-- To: --> 
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
    http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"> 
</web-app>