2010-12-01 49 views
5

我想與澤西島的氣氛,能夠廣播消息給用戶。但是,在向Jersey端點發出請求時,以下內容將出現在日誌中,並導致ServletException。與大氣和澤西島缺少依賴關係

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 

堆棧跟蹤的部分:

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) 

我使用Maven和添加以下依賴:

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

我缺少什麼?謝謝!

回答

6

問題很明顯,JAX-RS的兩個實現存在於應用程序中。這可以通過讓Jersey只掃描包含Rest類的包來解決,因此不會意識到其他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> 

感謝澤西島郵件列表上的Paul Sandoz和Atmosphere郵件列表上的Jeanfrancois。

+0

謝謝你,在我的情況下完美地工作,而Apache Tomcat上告訴我「嚴重:在索引14的參數缺少方法的依賴項公共無效org.apache.cxf.jaxrs.provider.RequestDispatcherProvider.setMessageContext(org.apache.cxf.jaxrs.ext.MessageContext)」只是改變mypackage.with.the.rest用於定義我的REST的軟件包的類,並且一切正常。非常感謝。 – tremendows 2013-03-19 14:48:19

0

據報道,在web.xml降級一個web應用程序描述符的版本可以幫助禁用本地(澤西)掃描: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>