[ http://issues.apache.org/jira/browse/CXF-245?page=all ]

Bozhong Lin updated CXF-245:
----------------------------

        Fix Version/s: 2.0-RC
    Affects Version/s: 2.0-RC
             Assignee: Jervis Liu

> SOAPHandlerInterceptor handleMessage should be a no-op if no protocol 
> handlers are registered.
> ----------------------------------------------------------------------------------------------
>
>                 Key: CXF-245
>                 URL: http://issues.apache.org/jira/browse/CXF-245
>             Project: CXF
>          Issue Type: Improvement
>          Components: JAX-WS Runtime
>    Affects Versions: 2.0-RC
>            Reporter: Andrea Smyth
>         Assigned To: Jervis Liu
>             Fix For: 2.0-RC
>
>
> Use this in SOAPHandlerInterceptor.handleMessage():
>      HandlerChainInvoker invoker = getInvoker(message);
>         if (invoker.getProtocolHandlers().isEmpty()) {
>             return;
>         }
> thus only manipulating the streams if absolutely necessary. 
> More importantly, we should ensure that the execution path is the same (aside 
> from the invocation of the JAXWS procotol handlers) regardless how many JAXWS 
> protocol  handlers are installed. 
> At the moment this is NOT the case:
> To verify, apply the above  change to a working copy. and run the addressing 
> system test (MAPTest), with logging in the Server enabled (level >= INFO). 
> The test passes, but 
> you'll notice that  - with the above change - an exception is thrown by the 
> server when processing the partial response to  greetMeOneWay :
> 16-Nov-2006 13:59:47 org.apache.cxf.transport.http.JettyHTTPDestination 
> flushHeaders
> WARNING: Response object is null
> 16-Nov-2006 13:59:47 org.apache.cxf.common.logging.LogUtils log
> INFO: Interceptor has thrown exception, unwinding now
> org.apache.cxf.interceptor.Fault: Could not write to XMLStreamWriter.
>       at 
> org.apache.cxf.interceptor.StaxOutInterceptor.handleMessage(StaxOutInterceptor.java:94)
>       at 
> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:147)
>       at 
> org.apache.cxf.interceptor.MessageSenderInterceptor.handleMessage(MessageSenderInterceptor.java:57)
>       at 
> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:147)
>       at 
> org.apache.cxf.ws.addressing.ContextUtils.rebaseResponse(ContextUtils.java:349)
>       at 
> org.apache.cxf.ws.addressing.MAPAggregator.mediate(MAPAggregator.java:183)
>       at 
> org.apache.cxf.ws.addressing.MAPAggregator.handleMessage(MAPAggregator.java:89)
>       at 
> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:147)
>       at 
> org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:64)
>       at 
> org.apache.cxf.transport.http.JettyHTTPDestination.serviceRequest(JettyHTTPDestination.java:286)
>       at 
> org.apache.cxf.transport.http.JettyHTTPDestination.doService(JettyHTTPDestination.java:259)
>       at 
> org.apache.cxf.transport.http.JettyHTTPDestination$2.handle(JettyHTTPDestination.java:119)
>       at org.mortbay.http.HttpContext.handle(HttpContext.java:1530)
>       at org.mortbay.http.HttpContext.handle(HttpContext.java:1482)
>       at org.mortbay.http.HttpServer.service(HttpServer.java:909)
>       at org.mortbay.http.HttpConnection.service(HttpConnection.java:820)
>       at org.mortbay.http.HttpConnection.handleNext(HttpConnection.java:986)
>       at org.mortbay.http.HttpConnection.handle(HttpConnection.java:837)
>       at 
> org.mortbay.http.SocketListener.handleConnection(SocketListener.java:245)
>       at org.mortbay.util.ThreadedServer.handle(ThreadedServer.java:357)
>       at org.mortbay.util.ThreadPool$PoolThread.run(ThreadPool.java:534)
> Caused by: com.ctc.wstx.exc.WstxIOException: Response object is null
>       at 
> com.ctc.wstx.sw.BaseStreamWriter.finishDocument(BaseStreamWriter.java:1605)
>       at com.ctc.wstx.sw.BaseStreamWriter.close(BaseStreamWriter.java:246)
>       at 
> org.apache.cxf.interceptor.StaxOutInterceptor.handleMessage(StaxOutInterceptor.java:83)
>       ... 20 more
> Caused by: java.io.IOException: Response object is null
>       at 
> org.apache.cxf.transport.http.JettyHTTPDestination.flushHeaders(JettyHTTPDestination.java:332)
>       at 
> org.apache.cxf.transport.http.JettyHTTPDestination$WrappedOutputStream.doFlush(JettyHTTPDestination.java:421)
>       at 
> org.apache.cxf.io.AbstractCachedOutputStream.flush(AbstractCachedOutputStream.java:87)
>       at com.ctc.wstx.io.UTF8Writer.flush(UTF8Writer.java:92)
>       at com.ctc.wstx.sw.BufferingXmlWriter.flush(BufferingXmlWriter.java:184)
>       at com.ctc.wstx.sw.BufferingXmlWriter.close(BufferingXmlWriter.java:165)
>       at 
> com.ctc.wstx.sw.BaseStreamWriter.finishDocument(BaseStreamWriter.java:1603)
>       ... 22 more
> 16-Nov-2006 13:59:47 org.apache.cxf.ws.addressing.ContextUtils rebaseResponse
> WARNING: SERVER_TRANSPORT_REBASE_FAILURE_MSG
> org.apache.cxf.interceptor.Fault: Could not write to XMLStreamWriter.
>       at 
> org.apache.cxf.interceptor.StaxOutInterceptor.handleMessage(StaxOutInterceptor.java:94)
>       at 
> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:147)
>       at 
> org.apache.cxf.interceptor.MessageSenderInterceptor.handleMessage(MessageSenderInterceptor.java:57)
>       at 
> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:147)
>       at 
> org.apache.cxf.ws.addressing.ContextUtils.rebaseResponse(ContextUtils.java:349)
>       at 
> org.apache.cxf.ws.addressing.MAPAggregator.mediate(MAPAggregator.java:183)
>       at 
> org.apache.cxf.ws.addressing.MAPAggregator.handleMessage(MAPAggregator.java:89)
>       at 
> org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:147)
>       at 
> org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:64)
>       at 
> org.apache.cxf.transport.http.JettyHTTPDestination.serviceRequest(JettyHTTPDestination.java:286)
>       at 
> org.apache.cxf.transport.http.JettyHTTPDestination.doService(JettyHTTPDestination.java:259)
>       at 
> org.apache.cxf.transport.http.JettyHTTPDestination$2.handle(JettyHTTPDestination.java:119)
>       at org.mortbay.http.HttpContext.handle(HttpContext.java:1530)
>       at org.mortbay.http.HttpContext.handle(HttpContext.java:1482)
>       at org.mortbay.http.HttpServer.service(HttpServer.java:909)
>       at org.mortbay.http.HttpConnection.service(HttpConnection.java:820)
>       at org.mortbay.http.HttpConnection.handleNext(HttpConnection.java:986)
>       at org.mortbay.http.HttpConnection.handle(HttpConnection.java:837)
>       at 
> org.mortbay.http.SocketListener.handleConnection(SocketListener.java:245)
>       at org.mortbay.util.ThreadedServer.handle(ThreadedServer.java:357)
>       at org.mortbay.util.ThreadPool$PoolThread.run(ThreadPool.java:534)
> Caused by: com.ctc.wstx.exc.WstxIOException: Response object is null
>       at 
> com.ctc.wstx.sw.BaseStreamWriter.finishDocument(BaseStreamWriter.java:1605)
>       at com.ctc.wstx.sw.BaseStreamWriter.close(BaseStreamWriter.java:246)
>       at 
> org.apache.cxf.interceptor.StaxOutInterceptor.handleMessage(StaxOutInterceptor.java:83)
>       ... 20 more
> Caused by: java.io.IOException: Response object is null
>       at 
> org.apache.cxf.transport.http.JettyHTTPDestination.flushHeaders(JettyHTTPDestination.java:332)
>       at 
> org.apache.cxf.transport.http.JettyHTTPDestination$WrappedOutputStream.doFlush(JettyHTTPDestination.java:421)
>       at 
> org.apache.cxf.io.AbstractCachedOutputStream.flush(AbstractCachedOutputStream.java:87)
>       at com.ctc.wstx.io.UTF8Writer.flush(UTF8Writer.java:92)
>       at com.ctc.wstx.sw.BufferingXmlWriter.flush(BufferingXmlWriter.java:184)
>       at com.ctc.wstx.sw.BufferingXmlWriter.close(BufferingXmlWriter.java:165)
>       at 
> com.ctc.wstx.sw.BaseStreamWriter.finishDocument(BaseStreamWriter.java:1603)
>       ... 22 more
> Without the change, the server flushes the partial response only once.
>   

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to