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?



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

Reply via email to