2013-10-17 90 views
3

我正在使用Wink 1.2在jBoss EAP 6.1(7.2.1Final)上部署RESTful Web應用程序,並在所有請求中獲得以下異常;Apache Wink Accept()失敗,返回NullPointerException

 <b>JBWEB000070: exception</b> 
      <pre>java.lang.NullPointerException 
org.apache.wink.common.internal.http.Accept.valueOf(Accept.java:139) 
org.apache.wink.server.internal.contexts.HttpHeadersImpl.getAcceptHeader(HttpHeadersImpl.java:152) 
org.apache.wink.server.internal.contexts.HttpHeadersImpl.getAcceptableMediaTypes(HttpHeadersImpl.java:106) 
org.apache.wink.server.internal.registry.ResourceRegistry.filterByProduces(ResourceRegistry.java:558) 
org.apache.wink.server.internal.registry.ResourceRegistry.filterDispatchMethods(ResourceRegistry.java:482) 
org.apache.wink.server.internal.registry.ResourceRegistry.findMethod(ResourceRegistry.java:359) 
org.apache.wink.server.internal.handlers.FindResourceMethodHandler.handleResourceMethod(FindResourceMethodHandler.java:138) 
org.apache.wink.server.internal.handlers.FindResourceMethodHandler.handleRequest(FindResourceMethodHandler.java:65) 
org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:26) 
org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:22) 
org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:63) 
org.apache.wink.server.internal.handlers.FindRootResourceHandler.handleRequest(FindRootResourceHandler.java:95) 
org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:26) 
org.apache.wink.server.handlers.RequestHandlersChain.handle(RequestHandlersChain.java:22) 
org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:63) 

同一應用程序的工作原理像EAP 5.1和舊的JBoss以前的版本確定。

我也使用tcpmon捕獲發佈的請求,並獲取標題中的以下信息;

GET /hothouse-iris/Hothouse.svc/ HTTP/1.1 
    Host: 127.0.0.1:9090 
    Connection: keep-alive 
    Authorization: Basic U1NPVVNFUjE6MTIzNDU2 
    Cache-Control: no-cache 
    User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/30.0.1599.69 Safari/537.36 
    Content-Type: application/atom+xml 
    Accept: */* 
    Accept-Encoding: gzip,deflate,sdch 
    Accept-Language: en-GB,en-US;q=0.8,en;q=0.6 
    Cookie: JSESSIONID=8D9FE5379FE7576610BB4B78A431AD10; __utma=96992031.2145502422.1381922298.1382004674.1382006170.4; __utmc=96992031; __utmz=96992031.1381922298.1.1.utmcsr=(direct)|utmccn=(direct)|utmcmd=(none) 

我使用Chrome擴展POSTMan來請求我的服務,它的工作原理。

+0

只需添加一件事,即默認情況下,我的RESTful部署在jBoss 7上失敗,說明我的.war中不能有多個JAX-RS實現。所以我在我的web.xml中添加了一些來禁用jBoss RestEasy掃描器,並且部署工作正常,但出現錯誤。 – SJunejo

回答

3

問題是由jboss 7提供的JAX-RS實現與Apache Wink衝突,我們必須通過評論JBOSS_HOME \ modules \ system \ layers \ base \ javax \下module.xml的內容來完全禁用jboss impl。 ws \ rs \ api \ main停止加載Jboss JAX-RS API並且它工作正常

+0

我不能與我的服務器,如果我做到了,我的服務器停止工作。 –

+0

沒有問題,這只是一種方法...你可以離開上面的條目是和使用jboss-deployment-structure.xml從你的部署中排除同一個模塊,一切都應該沒問題。 – SJunejo

2

此錯誤是由jar文件衝突引起的。我刪除了jetty.jar,jetty-util.jar並刪除了jsr305.jar,REST API正常工作。

+0

感謝您的迴應。我沒有任何碼頭罐,但有jsr311-api-1.1.1.jar。我刪除了,但仍然一樣:( – SJunejo

3

問題是Accept類的初始化實際上並未發生,並且委託字段爲空。

RuntimeDelegate是一個接口,它的實現應該在類路徑中搜索的META-INF/service/javax.ws.rs.ext.RuntimeDelegate文件中指定。

wink-common.jar包含這樣的服務文件,其中包含實現的正確類名稱,但如果在正確的類路徑之前在類路徑上找到了一些具有相同名稱的其他服務文件,有這樣一個怪異的行爲。