Search code examples
webspherewebsphere-libertywebsphere-8apache-wink

unable to call REST 1.1 Service with Jaxrs-2.0 feature enabled


I am using Liberty profile 16 on Java 1.8 with following features enabled:

<featureManager>
        <feature>jsp-2.3</feature>
        <feature>wasJmsServer-1.0</feature>
        <feature>wasJmsClient-2.0</feature>
        <feature>jndi-1.0</feature>
        <feature>ejbLite-3.2</feature>
        <feature>servlet-3.1</feature>
        <feature>jdbc-4.0</feature>
        <feature>localConnector-1.0</feature>
        <feature>jaxrs-2.0</feature>
    </featureManager>

I am using Apache Wink as my rest provider in this and added it as a third party library.

<library id="winkLib" >
        <fileset dir="E:\Software\Jars\wink1.4\apache-wink-1.4\lib" includes="*.jar" scanInterval="5s"></fileset>
    </library>

    <enterpriseApplication location="E:\wlp9\usr\servers\servername\apps\myear.ear">
        <classloader commonLibraryRef="winkLib" />
    </enterpriseApplication>

The REST services are getting registered successfully, but when I am trying to access the service I am getting below error:

10:43:04,241 INFO  [User=] [RequestInterceptor] Initializing Request Hanlder
10:43:04,256 INFO  [User=] [ResponseInterceptor] Initializing response interceptor
[INFO    ] The following error occurred during the invocation of the handlers chain: NullPointerException with message 'null' while processing POST request sent to http://localhost:8081/myapp/rest/login
10:43:04,287 WARN  [User=] [RestExceptionHandler] Exception Hanlder Invoked
10:43:04,287 ERROR [User=] [RestExceptionHandler] 
****************************************************************************************************
Message Info:java.lang.NullPointerException

****************************************************************************************************
[ERROR   ] The system cannot determine the class of type null.
[ERROR   ] An unhandled exception occurred which will be propagated to the container.
java.lang.NullPointerException
[ERROR   ] SRVE0777E: Exception thrown by application class 'java.lang.Class.isAssignableFrom:-2'
java.lang.NullPointerException
    at java.lang.Class.isAssignableFrom(Native Method)
    at org.apache.wink.common.internal.registry.ProvidersRegistry$MediaTypeMap$OFHolder.compareTo(ProvidersRegistry.java:1008)
    at org.apache.wink.common.internal.registry.ProvidersRegistry$MediaTypeMap$OFHolder.compareTo(ProvidersRegistry.java:906)
    at java.util.Collections$ReverseComparator.compare(Collections.java:5117)
    at java.util.Collections$ReverseComparator.compare(Collections.java:5108)
    at java.util.TreeMap.put(TreeMap.java:552)
    at java.util.TreeSet.add(TreeSet.java:255)
    at org.apache.wink.common.internal.registry.ProvidersRegistry$MediaTypeMap.internalGetProvidersByMediaType(ProvidersRegistry.java:752)
    at org.apache.wink.common.internal.registry.ProvidersRegistry$MediaTypeMap.getProvidersByMediaType(ProvidersRegistry.java:711)
    at org.apache.wink.common.internal.registry.ProvidersRegistry.getMessageBodyWriter(ProvidersRegistry.java:445)
    at org.apache.wink.common.internal.contexts.ProvidersImpl.getMessageBodyWriter(ProvidersImpl.java:72)
    at org.apache.wink.server.internal.handlers.FlushResultHandler.handleResponse(FlushResultHandler.java:144)
    at org.apache.wink.server.handlers.AbstractHandler.handleResponse(AbstractHandler.java:38)
    at org.apache.wink.server.handlers.ResponseHandlersChain.handle(ResponseHandlersChain.java:26)
    at org.apache.wink.server.handlers.ResponseHandlersChain.handle(ResponseHandlersChain.java:22)
    at org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:75)
    at org.apache.wink.server.handlers.AbstractHandler.handleResponse(AbstractHandler.java:39)
    at org.apache.wink.server.handlers.ResponseHandlersChain.handle(ResponseHandlersChain.java:26)
    at org.apache.wink.server.handlers.ResponseHandlersChain.handle(ResponseHandlersChain.java:22)
    at org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:75)
    at org.apache.wink.server.handlers.AbstractHandler.handleResponse(AbstractHandler.java:39)
    at org.apache.wink.server.handlers.ResponseHandlersChain.handle(ResponseHandlersChain.java:26)
    at org.apache.wink.server.handlers.ResponseHandlersChain.handle(ResponseHandlersChain.java:22)
    at org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:75)
    at org.apache.wink.server.handlers.AbstractHandler.handleResponse(AbstractHandler.java:39)
    at org.apache.wink.server.handlers.ResponseHandlersChain.handle(ResponseHandlersChain.java:26)
    at org.apache.wink.server.handlers.ResponseHandlersChain.handle(ResponseHandlersChain.java:22)
    at org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:75)
    at org.apache.wink.server.internal.log.Responses.handleResponse(Responses.java:90)
    at org.apache.wink.server.handlers.ResponseHandlersChain.handle(ResponseHandlersChain.java:26)
    at org.apache.wink.server.handlers.ResponseHandlersChain.handle(ResponseHandlersChain.java:22)
    at org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:75)
    at org.apache.wink.server.handlers.AbstractHandlersChain.run(AbstractHandlersChain.java:60)
    at org.apache.wink.server.internal.RequestProcessor.handleRequestWithoutFaultBarrier(RequestProcessor.java:232)
    at org.apache.wink.server.internal.RequestProcessor.handleRequest(RequestProcessor.java:154)
    at org.apache.wink.server.internal.servlet.RestServlet.service(RestServlet.java:124)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
    at [internal classes]

[INFO    ] FFDC1015I: An FFDC Incident has been created: "java.lang.NullPointerException com.ibm.ws.webcontainer.filter.WebAppFilterManager.invokeFilters 1105" at ffdc_17.03.09_10.43.04.0.log
[ERROR   ] SRVE0315E: An exception occurred: java.lang.Throwable: java.lang.NullPointerException
    at com.ibm.ws.webcontainer.webapp.WebApp.handleRequest(WebApp.java:4983)
    at [internal classes]
Caused by: java.lang.NullPointerException
    at java.lang.Class.isAssignableFrom(Native Method)
    at org.apache.wink.common.internal.registry.ProvidersRegistry$MediaTypeMap$OFHolder.compareTo(ProvidersRegistry.java:1008)
    at org.apache.wink.common.internal.registry.ProvidersRegistry$MediaTypeMap$OFHolder.compareTo(ProvidersRegistry.java:906)
    at java.util.Collections$ReverseComparator.compare(Collections.java:5117)
    at java.util.Collections$ReverseComparator.compare(Collections.java:5108)
    at java.util.TreeMap.put(TreeMap.java:552)
    at java.util.TreeSet.add(TreeSet.java:255)
    at org.apache.wink.common.internal.registry.ProvidersRegistry$MediaTypeMap.internalGetProvidersByMediaType(ProvidersRegistry.java:752)
    at org.apache.wink.common.internal.registry.ProvidersRegistry$MediaTypeMap.getProvidersByMediaType(ProvidersRegistry.java:711)
    at org.apache.wink.common.internal.registry.ProvidersRegistry.getMessageBodyWriter(ProvidersRegistry.java:445)
    at org.apache.wink.common.internal.contexts.ProvidersImpl.getMessageBodyWriter(ProvidersImpl.java:72)
    at org.apache.wink.server.internal.handlers.FlushResultHandler.handleResponse(FlushResultHandler.java:144)
    at org.apache.wink.server.handlers.AbstractHandler.handleResponse(AbstractHandler.java:38)
    at org.apache.wink.server.handlers.ResponseHandlersChain.handle(ResponseHandlersChain.java:26)
    at org.apache.wink.server.handlers.ResponseHandlersChain.handle(ResponseHandlersChain.java:22)
    at org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:75)
    at org.apache.wink.server.handlers.AbstractHandler.handleResponse(AbstractHandler.java:39)
    at org.apache.wink.server.handlers.ResponseHandlersChain.handle(ResponseHandlersChain.java:26)
    at org.apache.wink.server.handlers.ResponseHandlersChain.handle(ResponseHandlersChain.java:22)
    at org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:75)
    at org.apache.wink.server.handlers.AbstractHandler.handleResponse(AbstractHandler.java:39)
    at org.apache.wink.server.handlers.ResponseHandlersChain.handle(ResponseHandlersChain.java:26)
    at org.apache.wink.server.handlers.ResponseHandlersChain.handle(ResponseHandlersChain.java:22)
    at org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:75)
    at org.apache.wink.server.handlers.AbstractHandler.handleResponse(AbstractHandler.java:39)
    at org.apache.wink.server.handlers.ResponseHandlersChain.handle(ResponseHandlersChain.java:26)
    at org.apache.wink.server.handlers.ResponseHandlersChain.handle(ResponseHandlersChain.java:22)
    at org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:75)
    at org.apache.wink.server.internal.log.Responses.handleResponse(Responses.java:90)
    at org.apache.wink.server.handlers.ResponseHandlersChain.handle(ResponseHandlersChain.java:26)
    at org.apache.wink.server.handlers.ResponseHandlersChain.handle(ResponseHandlersChain.java:22)
    at org.apache.wink.server.handlers.AbstractHandlersChain.doChain(AbstractHandlersChain.java:75)
    at org.apache.wink.server.handlers.AbstractHandlersChain.run(AbstractHandlersChain.java:60)
    at org.apache.wink.server.internal.RequestProcessor.handleRequestWithoutFaultBarrier(RequestProcessor.java:232)
    at org.apache.wink.server.internal.RequestProcessor.handleRequest(RequestProcessor.java:154)
    at org.apache.wink.server.internal.servlet.RestServlet.service(RestServlet.java:124)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:790)
    ... 1 more

ANd this is my web.xml looks like:

<servlet>
        <servlet-name>JAX-RS Servlet</servlet-name>
        <servlet-class>org.apache.wink.server.internal.servlet.RestServlet</servlet-class>
        <init-param>
            <param-name>javax.ws.rs.Application</param-name>
            <param-value>package.name.RestfulResourceLoader</param-value>
        </init-param>
        <init-param>
        <param-name>propertiesLocation</param-name>
        <param-value>handler.properties</param-value>
     </init-param>
     <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>JAX-RS Servlet</servlet-name>
        <url-pattern>/rest/*</url-pattern>
    </servlet-mapping>

Solution

  • This looks like a bug in Wink. While your shared library suggests you are using Wink 1.4,the source code line numbers in the stack trace more closely align to Wink 1.2.1. Perhaps this issue is resolved in a more current version of Wink.

    Your config is definitely error-prone since you are using the jaxrs-2.0 feature (which, among other things tells the Liberty server to make the JAX-RS 2.0 API packages available to applications) but trying to use a different JAX-RS provider. There is also a version conflict here - Wink implements JAX-RS 1.1. If I'm understanding this config correctly, you are using Wink as the JAX-RS provider, but using the JAX-RS 2.0 APIs that ship with Liberty. Even if this is not the cause of the problem you are seeing, it is likely to cause problems later.

    If you want to use Wink, I would suggest removing it from your application, and then using the jaxrs-1.1 feature (instead of the jaxrs-2.0 feature). Liberty's jaxrs-1.1. implementation is Wink and it makes many of the Wink-specific APIs available.

    If you just need a JAX-RS provider (nothing Wink-specific), then I would suggest removing the Wink libraries from your app, and use the CXF implementation that is built-in to the jaxrs-2.0 feature. This would require making some changes to the web.xml.

    Hope this helps, Andy