[jboss-user] [JBoss Web Services CXF] - Continuing problem with XTS WS-T tests in AS trunk/CXF 2.2.9

Andrew Dinn do-not-reply at jboss.com
Thu Jul 22 10:37:05 EDT 2010

Andrew Dinn [http://community.jboss.org/people/adinn] replied to the discussion

"Continuing problem with XTS WS-T tests in AS trunk/CXF 2.2.9"

To view the discussion, visit: http://community.jboss.org/message/553969#553969

Hi Jim,

I am not sure what is different in my code that makes request.getScheme() fail with an NPE while your code works ok but I think it is just luck.

I traced execution through a test case and it appears that the incoming message relates to a valid request. Because this is a one way message there is a handover of control in ContextUtils at line 416

> 416                     inMessage.getInterceptorChain().pause();
>                         // ... and resume on executor thread
>                         getExecutor(inMessage).execute(new Runnable() {
>                             public void run() {
> 421                             inMessage.getInterceptorChain().resume();
>                             }

I checked the request by stopping at 416 and looking up the stack to find the request. The HttpServletRequest object is actually a facade object which indirects to an underlying catalina connector request. It had a name like "Current Servlet stack for thread http- [S] ActivationService [org.jboss.wsf.stack.cxf.CXFServletExt]". request.getScheme() worked on this object without a NPE.

I picked control up again in the debugger at 421 but, of course, there was no servlet method up the stack where I coudl locate the request. So, I proceeded to step through the code until the ServiceInvokerInterceptor was called. In AbstractInvoker.invoke() the web service context is set up

> public Object invoke(Exchange exchange, Object o)
>    {
>       // set up the webservice request context 
>       WrappedMessageContext ctx = new WrappedMessageContext(exchange.getInMessage(), Scope.APPLICATION);
>       Map<String, Object> handlerScopedStuff = removeHandlerProperties(ctx);
>       WebServiceContextImpl.setMessageContext(ctx);
> 101   Object retObj = null;

At line 101 I evaluated ctx.get("HTTP.REQUEST") and got another facade hiding a catalina connector request with name "Current Servlet stack for thread default-workqueue-2". However all the fields of this catalina connector request appear to be uninitialised and getScheme() returns null. So, this looks to me like the request is coming out of a thread local and it is pot luck whether the object behind the facade has been initialised or not. IN your tests it may be that a previous call has set values in this object.


Andrew Dinn


Reply to this message by going to Community

Start a new discussion in JBoss Web Services CXF at Community

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/jboss-user/attachments/20100722/27690c39/attachment.html 

More information about the jboss-user mailing list