Apache Wink Accept()因NullPointerException而失败

时间:2013-10-17 16:14:59

标签: apache-wink

我正在使用Wink 1.2在jBoss EAP 6.1(7.2.1Final)上部署我的RESTful Web应用程序,并在所有请求中获得以下异常;

     <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)

相同的应用程序在早期版本的jBoss(如EAP 5.1和旧版本)上运行正常。

我还使用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来请求我的服务,它可以正常运行。

4 个答案:

答案 0 :(得分:4)

问题是jboss 7提供的JAX-RS实现与Apache Wink冲突,我们必须通过在JBOSS_HOME \ modules \ system \ layers \ base \ javax \ ws下注释module.xml的内容来完全禁用jboss impl \ rs \ api \ main停止加载Jboss JAX-RS API并且工作正常

答案 1 :(得分:3)

问题是Accept类的初始化实际上没有发生,并且委托字段为空。

RuntimeDelegate是一个接口,其实现应在META-INF / service / javax.ws.rs.ext.RuntimeDelegate文件中指定,该文件在类路径上搜索。

wink-common.jar包含这样一个服务文件,其中包含正确的实现类名,但是如果在类路径(在jar上)找到一些其他同名服务文件,那么我们将会有这种奇怪的行为。

答案 2 :(得分:2)

此错误是由jar文件冲突引起的。我删除了jetty.jar,jetty-util.jar并删除了jsr305.jar,REST API工作正常。

答案 3 :(得分:1)

在WAS8.5自由配置文件中,即使我删除了导致错误的wink依赖关系,错误也不会消失。它最终证明我需要停止&amp;启动我的服务器。该解决方案发布在此链接的最底部https://www.ibm.com/developerworks/community/forums/html/topic?id=77777777-0000-0000-0000-000014940544