cxf-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Daniel Kulp (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (CXF-5414) XMLStreamException when using Continuations in versions > 2.7.0
Date Thu, 21 Nov 2013 21:56:35 GMT

    [ https://issues.apache.org/jira/browse/CXF-5414?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13829386#comment-13829386
] 

Daniel Kulp commented on CXF-5414:
----------------------------------

Just a note for my records:

I can reproduce the stack trace with Tomcat 7.0.47
I cannot reproduce this with Jetty 8.1.14
I can reproduce the stack trace with Jetty 9.1.0

It's likely using the Jetty continuations with Jetty 8, but the Servlet 3 based continuations
on Jetty 9 and Tomcat so it's likely in the Servlet3 based stuff.  Gut feeling is we're getting
an extra call into the servlet.

Wasn't able to reproduce the 8 second calls, but that could be another symptom. 

> XMLStreamException when using Continuations in versions > 2.7.0
> ---------------------------------------------------------------
>
>                 Key: CXF-5414
>                 URL: https://issues.apache.org/jira/browse/CXF-5414
>             Project: CXF
>          Issue Type: Bug
>          Components: JAX-WS Runtime
>    Affects Versions: 2.7.1, 2.7.2, 2.7.3, 2.7.4, 2.7.5, 2.7.6, 2.7.7
>         Environment: Ubuntu 12.04, Ubuntu 13.04, Java 7, Apache Tomcat 7.0.42
>            Reporter: Mark van den Bergh
>              Labels: continuation, future, threading
>             Fix For: 2.7.0
>
>         Attachments: ContinuationTest.zip
>
>
> When using Continuation in a Jax web service a stacktrace is printed after every call,
the web service does work as expected. If a new web service call is executed while waiting
for the stacktrace (in Apache Tomcat the stacktrace appears after about 10 seconds) the web
service is very slow. Some calls take up to 8 seconds to complete.
> This only occurs with CXF versions above 2.7.0. Tested versions: 2.7.1, 2.7.2, 2.7.3
and 2.7.7.
> Example project attached.
> {code:title=Continuation web service code|borderStyle=solid}
>     public String test() {
>         final Continuation continuation = getContinuation();
>         if (continuation == null) {
>             throw new RuntimeException("Failed to get continuation");
>         }
>         synchronized (continuation) {
>             if(continuation.isNew()) {
>                 FutureTask futureResponse = new FutureTask<>(new Callable<String>()
{
>                     @Override
>                     public String call() throws Exception {
>                         Thread.sleep(1000);
>                         String response = "Test response";
>                         // the blocking call has finished, we resume the transport thread
>                         continuation.resume();
>                         return response;
>                     }
>                 });
>                 taskExecutor.execute(futureResponse);
>                 continuation.setObject(futureResponse);
>                 // suspend the transport thread so it can handle other requests
>                 continuation.suspend(CONTINUATION_TIMEOUT);
>                 return null;
>             } else {
>                 FutureTask futureTask = (FutureTask) continuation.getObject();
>                 if(futureTask.isDone()) {
>                     try {
>                         return (String) futureTask.get();
>                     } catch (InterruptedException | ExecutionException e) {
>                         e.printStackTrace();
>                     }
>                 } else {
>                     continuation.suspend(CONTINUATION_TIMEOUT);
>                 }
>             }
>         }
>         // unreachable
>         return null;
>     }
>     private Continuation getContinuation() {
>         ContinuationProvider provider = (ContinuationProvider) context.getMessageContext().get(ContinuationProvider.class.getName());
>         return provider.getContinuation();
>     }
> {code}
> {code:title=Stacktraces|borderStyle=solid}
> Nov 21, 2013 10:15:53 PM org.apache.cxf.phase.PhaseInterceptorChain doDefaultLogging
> WARNING: Interceptor for {http://continuation.example.com/}ContinuationWebServiceService#{http://continuation.example.com/}test
has thrown exception, unwinding now
> java.lang.RuntimeException: Can't find input stream in message
> 	at org.apache.cxf.binding.soap.interceptor.ReadHeadersInterceptor.handleMessage(ReadHeadersInterceptor.java:145)
> 	at org.apache.cxf.binding.soap.interceptor.ReadHeadersInterceptor.handleMessage(ReadHeadersInterceptor.java:62)
> 	at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:272)
> 	at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)
> 	at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:239)
> 	at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:248)
> 	at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:222)
> 	at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:153)
> 	at org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:167)
> 	at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:286)
> 	at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:206)
> 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
> 	at org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:262)
> 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
> 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
> 	at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:749)
> 	at org.apache.catalina.core.ApplicationDispatcher.doDispatch(ApplicationDispatcher.java:660)
> 	at org.apache.catalina.core.ApplicationDispatcher.dispatch(ApplicationDispatcher.java:626)
> 	at org.apache.catalina.core.AsyncContextImpl$1.run(AsyncContextImpl.java:225)
> 	at org.apache.catalina.core.AsyncContextImpl.doInternalDispatch(AsyncContextImpl.java:367)
> 	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:217)
> 	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
> 	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
> 	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
> 	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
> 	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
> 	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
> 	at org.apache.catalina.connector.CoyoteAdapter.asyncDispatch(CoyoteAdapter.java:299)
> 	at org.apache.coyote.http11.AbstractHttp11Processor.asyncDispatch(AbstractHttp11Processor.java:1587)
> 	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:583)
> 	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
> 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
> 	at java.lang.Thread.run(Thread.java:722)
> Nov 21, 2013 10:15:53 PM org.apache.cxf.phase.PhaseInterceptorChain doDefaultLogging
> WARNING: Interceptor for {http://continuation.example.com/}ContinuationWebServiceService#{http://continuation.example.com/}test
has thrown exception, unwinding now
> org.apache.cxf.binding.soap.SoapFault: Error writing to XMLStreamWriter.
> 	at org.apache.cxf.binding.soap.interceptor.SoapOutInterceptor$SoapOutEndingInterceptor.handleMessage(SoapOutInterceptor.java:300)
> 	at org.apache.cxf.binding.soap.interceptor.SoapOutInterceptor$SoapOutEndingInterceptor.handleMessage(SoapOutInterceptor.java:282)
> 	at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:272)
> 	at org.apache.cxf.interceptor.AbstractFaultChainInitiatorObserver.onMessage(AbstractFaultChainInitiatorObserver.java:113)
> 	at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:333)
> 	at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)
> 	at org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:239)
> 	at org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:248)
> 	at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:222)
> 	at org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:153)
> 	at org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:167)
> 	at org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:286)
> 	at org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:206)
> 	at javax.servlet.http.HttpServlet.service(HttpServlet.java:647)
> 	at org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:262)
> 	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
> 	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
> 	at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:749)
> 	at org.apache.catalina.core.ApplicationDispatcher.doDispatch(ApplicationDispatcher.java:660)
> 	at org.apache.catalina.core.ApplicationDispatcher.dispatch(ApplicationDispatcher.java:626)
> 	at org.apache.catalina.core.AsyncContextImpl$1.run(AsyncContextImpl.java:225)
> 	at org.apache.catalina.core.AsyncContextImpl.doInternalDispatch(AsyncContextImpl.java:367)
> 	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:217)
> 	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
> 	at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
> 	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
> 	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
> 	at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
> 	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
> 	at org.apache.catalina.connector.CoyoteAdapter.asyncDispatch(CoyoteAdapter.java:299)
> 	at org.apache.coyote.http11.AbstractHttp11Processor.asyncDispatch(AbstractHttp11Processor.java:1587)
> 	at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:583)
> 	at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:312)
> 	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
> 	at java.lang.Thread.run(Thread.java:722)
> Caused by: javax.xml.stream.XMLStreamException: No open start element, when trying to
write end element
> 	at com.ctc.wstx.sw.BaseStreamWriter.throwOutputError(BaseStreamWriter.java:1522)
> 	at com.ctc.wstx.sw.BaseStreamWriter.reportNwfStructure(BaseStreamWriter.java:1551)
> 	at com.ctc.wstx.sw.BaseNsStreamWriter.doWriteEndTag(BaseNsStreamWriter.java:648)
> 	at com.ctc.wstx.sw.BaseNsStreamWriter.writeEndElement(BaseNsStreamWriter.java:280)
> 	at org.apache.cxf.binding.soap.interceptor.SoapOutInterceptor$SoapOutEndingInterceptor.handleMessage(SoapOutInterceptor.java:291)
> 	... 35 more
> {code}



--
This message was sent by Atlassian JIRA
(v6.1#6144)

Mime
View raw message