See https://issues.apache.org/jira/browse/CAMEL-7147
On Wed, Jan 22, 2014 at 10:58 AM, Sergey Beryozkin <sberyoz...@gmail.com>wrote: > Hi, > > On 22/01/14 14:20, David wrote: > >> I can create a test project. How would I get it to you, email to the list >> as attachment? Or would it be better to open a JIRA, maybe? >> >> Can you please open a JIRA and attach a test project there > Many thanks > Sergey > >> >> >> On Wed, Jan 22, 2014 at 5:19 AM, Sergey Beryozkin <sberyoz...@gmail.com >> >wrote: >> >> The stack trace suggests that JacksonJsonProvider did have a thread local >>> context representing JAX-RS Providers injected into it at the >>> registration >>> time but at the invocation time no thread-local entry has been added to >>> it >>> and hence NPE. >>> I have a lot of tests in CXF where client-side providers have the >>> contexts >>> injected, so I think it is somehow related to the way the client >>> invocation >>> is managed by cxfrs. >>> I'm just curious how to reproduce it. Is there any chance that you can >>> create a basic test project ? I will try to reproduce it on my own too >>> >>> Sergey >>> >>> >>> >>> On 22/01/14 03:51, David wrote: >>> >>> On Tue, Jan 21, 2014 at 8:16 PM, Willem Jiang <willem.ji...@gmail.com >>>> >>>>> wrote: >>>>> >>>> >>>> >>>> On January 22, 2014 at 5:14:40 AM, David (wakarima...@gmail.com) >>>>> wrote: >>>>> >>>>> When my route attempts to invoke Service2, the URI is set to: >>>>>> >>>>>>> >>>>>>> http://localhost:8080/service2/service2path/service1/service1path, >>>>>> where >>>>>> service1/service1path is configured in my.Service1. I'm also >>>>>> not sure why >>>>>> I'm providing a serviceClass for rsClient. I thought maybe it >>>>>> was going to >>>>>> instantiate my service, but that doesn't seem to be the case. >>>>>> >>>>>> >>>>>> If you routing the response of first service to second service, you >>>>> may >>>>> need to clean up the CamelHttpPath message header. >>>>> >>>>> >>>>> Thanks, that was very helpful, but I'm not quite there yet. Shouldn't >>>>> >>>> this >>>> header be cleared when I set inheritHeaders to false? >>>> >>>> I had made both the first and second service have the same http path in >>>> order to trick the camel route into working, and initially removing the >>>> header had the desired effect -- I.e.I got a 404 response because the >>>> path >>>> for the second service had been truncated. However, when I changed the >>>> entry-point service back to its original path, I got an NPE (at >>>> org.apache.cxf.jaxrs.impl.tl.ThreadLocalProviders.getContextResolver( >>>> ThreadLocalProviders.java:50)). >>>> I fixed that by instead setting the CamelHttpPath to the path for the >>>> next >>>> service, which worked. >>>> >>>> Next, I added in the third service, by wiring a second rsClient for it >>>> and >>>> duplicating the setHeader and cxfrs producer endpoint in the camel >>>> route. >>>> This mostly works, but not quite. When the response comes back from >>>> service2, my object is populated as expected. However, by the time the >>>> call >>>> to service3 happens, all variables in the object have been set to 0 for >>>> the >>>> int and null for the strings. Service3 is then called with this empty >>>> object and returns. Finally, I again get the same NPE from Service1. I >>>> tried resetting the CamelHttpPath to the initial value, but that didn't >>>> fix >>>> the NPE. Removing Service3 also doesn't fix the NPE during the Service1 >>>> response, and the variables in the object are also still reset to >>>> 0/null. >>>> >>>> Here's my route, as it stands now: >>>> >>>> <from uri="cxfrs:bean:Service1"/> >>>> <setHeader headerName="CamelHttpPath"> >>>> <simple>/service2/service2path</simple> </setHeader> <to >>>> uri="cxfrs:bean:Service2"/> >>>> <setHeader headerName="CamelHttpPath"> >>>> <simple>/service3/service3path</simple> </setHeader> >>>> <to uri="cxfrs:bean:Service3"/> >>>> <to uri="log:response"/> >>>> >>>> The same NPE I'm seeing was also seen here, apparently: >>>> >>>> http://mail-archives.apache.org/mod_mbox/cxf-users/201311. >>>> mbox/%3c52987699.6040...@gmail.com%3E >>>> >>>> Here's a more complete stacktrace from my logs: >>>> >>>> -------------------------------------- >>>> 22:38:54,309 | INFO | tp2013341004-662 | response >>>> | 134 - org.apache.camel.camel-core | Exchange[ExchangePattern: InOut, >>>> BodyType: mycompany.MyObject, Body: >>>> {"myobject":{"id":0,"value1":null,"value2":null,"value3":0}}] >>>> 22:38:54,311 | WARN | tp2013341004-662 | PhaseInterceptorChain >>>> | 150 - org.apache.cxf.cxf-api - 2.7.0 | Interceptor for { >>>> http://myservice.mycompany.com/}Service1 has thrown exception, >>>> unwinding >>>> now >>>> javax.ws.rs.InternalServerErrorException: >>>> java.lang.NullPointerException >>>> at >>>> org.apache.cxf.jaxrs.interceptor.JAXRSOutInterceptor. >>>> handleWriteException(JAXRSOutInterceptor.java:396)[ >>>> 166:org.apache.cxf.cxf-rt-frontend-jaxrs:2.7.0] >>>> at >>>> org.apache.cxf.jaxrs.interceptor.JAXRSOutInterceptor.serializeMessage( >>>> JAXRSOutInterceptor.java:305)[166:org.apache.cxf.cxf-rt- >>>> frontend-jaxrs:2.7.0] >>>> at >>>> org.apache.cxf.jaxrs.interceptor.JAXRSOutInterceptor.processResponse( >>>> JAXRSOutInterceptor.java:155)[166:org.apache.cxf.cxf-rt- >>>> frontend-jaxrs:2.7.0] >>>> at >>>> org.apache.cxf.jaxrs.interceptor.JAXRSOutInterceptor.handleMessage( >>>> JAXRSOutInterceptor.java:86)[166:org.apache.cxf.cxf-rt- >>>> frontend-jaxrs:2.7.0] >>>> at >>>> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept( >>>> PhaseInterceptorChain.java:272)[150:org.apache.cxf.cxf-api:2.7.0] >>>> at >>>> org.apache.cxf.interceptor.OutgoingChainInterceptor.handleMessage( >>>> OutgoingChainInterceptor.java:77)[150:org.apache.cxf.cxf-api:2.7.0] >>>> at >>>> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept( >>>> PhaseInterceptorChain.java:272)[150:org.apache.cxf.cxf-api:2.7.0] >>>> at >>>> org.apache.cxf.phase.PhaseInterceptorChain.resume( >>>> >>>> PhaseInterceptorChain.java:242)[150:org.apache.cxf.cxf-api:2.7.0] >>>> at >>>> org.apache.cxf.transport.ChainInitiationObserver.onMessage( >>>> ChainInitiationObserver.java:78)[150:org.apache.cxf.cxf-api:2.7.0] >>>> at >>>> org.apache.cxf.transport.http_jetty.JettyHTTPDestination. >>>> serviceRequest( >>>> JettyHTTPDestination.java:355)[176:org.apache.cxf.cxf-rt- >>>> transports-http-jetty:2.7.0] >>>> at >>>> org.apache.cxf.transport.http_jetty.JettyHTTPDestination.doService( >>>> JettyHTTPDestination.java:319)[176:org.apache.cxf.cxf-rt- >>>> transports-http-jetty:2.7.0] >>>> at >>>> org.apache.cxf.transport.http_jetty.JettyHTTPHandler.handle( >>>> JettyHTTPHandler.java:72)[176:org.apache.cxf.cxf-rt- >>>> transports-http-jetty:2.7.0] >>>> at >>>> org.eclipse.jetty.server.handler.ContextHandler. >>>> doHandle(ContextHandler.java:1077)[93:org.eclipse.jetty. >>>> aggregate.jetty-all-server:8.1.9.v20130131] >>>> at >>>> org.eclipse.jetty.server.handler.ContextHandler. >>>> doScope(ContextHandler.java:1013)[93:org.eclipse.jetty. >>>> aggregate.jetty-all-server:8.1.9.v20130131] >>>> at >>>> org.eclipse.jetty.server.handler.ScopedHandler.handle( >>>> ScopedHandler.java:135)[93:org.eclipse.jetty.aggregate. >>>> jetty-all-server:8.1.9.v20130131] >>>> at >>>> org.eclipse.jetty.server.handler.ContextHandlerCollection.handle( >>>> ContextHandlerCollection.java:193)[93:org.eclipse.jetty. >>>> aggregate.jetty-all-server:8.1.9.v20130131] >>>> at >>>> org.eclipse.jetty.server.handler.HandlerWrapper.handle( >>>> HandlerWrapper.java:116)[93:org.eclipse.jetty.aggregate. >>>> jetty-all-server:8.1.9.v20130131] >>>> at >>>> org.eclipse.jetty.server.Server.handleAsync(Server. >>>> java:408)[93:org.eclipse.jetty.aggregate.jetty-all- >>>> server:8.1.9.v20130131] >>>> at >>>> org.eclipse.jetty.server.AbstractHttpConnection.handleRequest( >>>> AbstractHttpConnection.java:493)[93:org.eclipse.jetty. >>>> aggregate.jetty-all-server:8.1.9.v20130131] >>>> at >>>> org.eclipse.jetty.server.AbstractHttpConnection.content( >>>> AbstractHttpConnection.java:943)[93:org.eclipse.jetty. >>>> aggregate.jetty-all-server:8.1.9.v20130131] >>>> at >>>> org.eclipse.jetty.server.AbstractHttpConnection$RequestHandler.content( >>>> AbstractHttpConnection.java:1004)[93:org.eclipse.jetty. >>>> aggregate.jetty-all-server:8.1.9.v20130131] >>>> at >>>> org.eclipse.jetty.http.HttpParser.parseNext( >>>> HttpParser.java:861)[93:org. >>>> eclipse.jetty.aggregate.jetty-all-server:8.1.9.v20130131] >>>> at >>>> org.eclipse.jetty.http.HttpParser.parseAvailable( >>>> HttpParser.java:240)[93:org.eclipse.jetty.aggregate.jetty- >>>> all-server:8.1.9.v20130131] >>>> at >>>> org.eclipse.jetty.server.AsyncHttpConnection.handle( >>>> AsyncHttpConnection.java:82)[93:org.eclipse.jetty. >>>> aggregate.jetty-all-server:8.1.9.v20130131] >>>> at >>>> org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle( >>>> SelectChannelEndPoint.java:628)[93:org.eclipse.jetty. >>>> aggregate.jetty-all-server:8.1.9.v20130131] >>>> at >>>> org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run( >>>> SelectChannelEndPoint.java:52)[93:org.eclipse.jetty. >>>> aggregate.jetty-all-server:8.1.9.v20130131] >>>> at >>>> org.eclipse.jetty.util.thread.QueuedThreadPool.runJob( >>>> QueuedThreadPool.java:608)[93:org.eclipse.jetty.aggregate. >>>> jetty-all-server:8.1.9.v20130131] >>>> at >>>> org.eclipse.jetty.util.thread.QueuedThreadPool$3.run( >>>> QueuedThreadPool.java:543)[93:org.eclipse.jetty.aggregate. >>>> jetty-all-server:8.1.9.v20130131] >>>> at java.lang.Thread.run(Thread.java:744)[:1.7.0_45] >>>> Caused by: java.lang.NullPointerException >>>> at >>>> org.apache.cxf.jaxrs.impl.tl.ThreadLocalProviders.getContextResolver( >>>> ThreadLocalProviders.java:50)[166:org.apache.cxf.cxf-rt- >>>> frontend-jaxrs:2.7.0] >>>> at >>>> org.codehaus.jackson.jaxrs.JacksonJsonProvider.locateMapper( >>>> JacksonJsonProvider.java:633)[245:jackson-jaxrs:1.9.10] >>>> at >>>> org.codehaus.jackson.jaxrs.JacksonJsonProvider.writeTo( >>>> JacksonJsonProvider.java:500)[245:jackson-jaxrs:1.9.10] >>>> at >>>> org.apache.cxf.jaxrs.utils.JAXRSUtils.writeMessageBody( >>>> JAXRSUtils.java:1317)[166:org.apache.cxf.cxf-rt-frontend-jaxrs:2.7.0] >>>> at >>>> org.apache.cxf.jaxrs.interceptor.JAXRSOutInterceptor.serializeMessage( >>>> JAXRSOutInterceptor.java:282)[166:org.apache.cxf.cxf-rt- >>>> frontend-jaxrs:2.7.0] >>>> ... 27 more >>>> 22:38:54,312 | INFO | tp2013341004-662 | LoggingOutInterceptor >>>> | 150 - org.apache.cxf.cxf-api - 2.7.0.redhat-610139 | Outbound >>>> Message >>>> >>>> >>>> >> > >