WS Addressing asynchronous transport and NullPointerException with Apache
tomcat (threading problem ?)
-------------------------------------------------------------------------------------------------------
Key: CXF-2545
URL: https://issues.apache.org/jira/browse/CXF-2545
Project: CXF
Issue Type: Bug
Components: WS-* Components
Environment: System:
2.6.28-15-generic #52-Ubuntu SMP Wed Sep 9 10:48:52 UTC 2009 x86_64 GNU/Linux
Java:
java version "1.6.0_16"
Java(TM) SE Runtime Environment (build 1.6.0_16-b01)
Java HotSpot(TM) 64-Bit Server VM (build 14.2-b01, mixed mode)
Apache CXF 2.2.3 (not in version list)
ServiceMix 3.3.1 with pachted CXF-BC component
Apache Tomcat 6.0.20 and 6.0.14
Reporter: Christian Connert
Hi,
I've the problem, that for one of my services the following
java.lang.NullPointerException occurs:
WARNUNG: Interceptor has thrown exception, unwinding now
java.lang.NullPointerException
at
org.apache.coyote.http11.InternalInputBuffer.fill(InternalInputBuffer.java:735)
at
org.apache.coyote.http11.InternalInputBuffer$InputStreamInputBuffer.doRead(InternalInputBuffer.java:781)
at
org.apache.coyote.http11.InternalInputBuffer.doRead(InternalInputBuffer.java:708)
at org.apache.coyote.Request.doRead(Request.java:428)
at
org.apache.catalina.connector.InputBuffer.realReadBytes(InputBuffer.java:304)
at org.apache.tomcat.util.buf.ByteChunk.substract(ByteChunk.java:405)
at org.apache.catalina.connector.InputBuffer.read(InputBuffer.java:327)
at
org.apache.catalina.connector.CoyoteInputStream.read(CoyoteInputStream.java:162)
at com.ctc.wstx.io.UTF8Reader.loadMore(UTF8Reader.java:365)
at com.ctc.wstx.io.UTF8Reader.read(UTF8Reader.java:110)
at com.ctc.wstx.io.MergedReader.read(MergedReader.java:101)
at com.ctc.wstx.io.ReaderSource.readInto(ReaderSource.java:84)
at
com.ctc.wstx.io.BranchingReaderSource.readInto(BranchingReaderSource.java:57)
at com.ctc.wstx.sr.StreamScanner.loadMore(StreamScanner.java:992)
at
com.ctc.wstx.sr.BasicStreamReader.readTextSecondary(BasicStreamReader.java:4626)
at
com.ctc.wstx.sr.BasicStreamReader.readCoalescedText(BasicStreamReader.java:4124)
at
com.ctc.wstx.sr.BasicStreamReader.finishToken(BasicStreamReader.java:3699)
at
com.ctc.wstx.sr.BasicStreamReader.safeFinishToken(BasicStreamReader.java:3647)
at com.ctc.wstx.sr.BasicStreamReader.getText(BasicStreamReader.java:809)
at
org.apache.cxf.staxutils.DepthXMLStreamReader.getText(DepthXMLStreamReader.java:160)
at
org.apache.cxf.staxutils.StaxUtils.readDocElements(StaxUtils.java:818)
at org.apache.cxf.staxutils.StaxUtils.startElement(StaxUtils.java:767)
at
org.apache.cxf.staxutils.StaxUtils.readDocElements(StaxUtils.java:804)
at org.apache.cxf.staxutils.StaxUtils.startElement(StaxUtils.java:767)
at
org.apache.cxf.staxutils.StaxUtils.readDocElements(StaxUtils.java:804)
at org.apache.cxf.staxutils.StaxUtils.startElement(StaxUtils.java:767)
at
org.apache.cxf.staxutils.StaxUtils.readDocElements(StaxUtils.java:804)
at org.apache.cxf.staxutils.StaxUtils.startElement(StaxUtils.java:767)
at
org.apache.cxf.staxutils.StaxUtils.readDocElements(StaxUtils.java:804)
at
org.apache.servicemix.cxfbc.interceptors.JbiInWsdl1Interceptor.getBodyElement(JbiInWsdl1Interceptor.java:351)
at
org.apache.servicemix.cxfbc.interceptors.JbiInWsdl1Interceptor.handleMessage(JbiInWsdl1Interceptor.java:96)
at
org.apache.servicemix.cxfbc.interceptors.JbiInWsdl1Interceptor.handleMessage(JbiInWsdl1Interceptor.java:59)
at
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:236)
at
org.apache.cxf.phase.PhaseInterceptorChain.resume(PhaseInterceptorChain.java:210)
at
org.apache.cxf.ws.addressing.ContextUtils$1.run(ContextUtils.java:414)
at
org.apache.cxf.workqueue.AutomaticWorkQueueImpl$2.run(AutomaticWorkQueueImpl.java:243)
at
java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
at java.lang.Thread.run(Thread.java:619)
It seems that Apache Tomcat recycles the InputStream of the request and thus
closes the underlying InputStream.
I tested it with Tomcat 6.0.20 and 6.0.14 and have the same problem.
The strange thing is that it only occurs with one of my services and even there
not constantly. Thus I'm not sure if it's a problem with CXF or with Tomcat 6.
Adding an extra interceptor (before the StaxInInterceptor), which copies the
data of the InputStream to a ByteArrayInputStream solves the problem.
Could it be, that if WS Addressing with async. transport is used that the
servlet container closes the resources before the InterceptorChain is resumed
(line 414 ContextUtils)?
Greetings
Christian
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.