Hi,

we've been using CXF (currently 2.1.3, soon 2.5.4) on the server side for some 
time now (in Tomcat 6.0 with Spring 3.0 if that is of any interest).

We have one client that - for whatever reason - performs HTTP HEAD-Requests to 
the WSDL-Urls (http://.../services/Endpoint?wsdl) before performing it's calls.

We only recently noticed that those calls fail under certain circumstances with 
cxf 2.1.3 due to an exception "org.apache.cxf.binding.soap.SoapFault: Error 
reading XMLStreamReader." in the class ReadHeadersInterceptor (See below for 
full stacktrace). From what we've been able to discern so far, the problem 
seems to be reproducable only when the server has been just started and no HTTP 
GET requests have been made to the WSDL URL yet. Once the first HTTP GET to 
that URL has been sent, subsequent HTTP HEAD Requests succeed.

With CXF 2.5.4 those Exceptions are easier to reproduce - they are thrown every 
time an HTTP HEAD request is sent to one of the WSDLs, regardless whether a 
HTTP GET has previously been sent.

After stepping through the CXF 2.5.4 code I would guess that the problem is in 
WSDLGetInterceptor - for GET requests the interceptor performs it's work and 
finishes with a call to "message.getInterceptorChain().abort();", for HEAD 
requests it returns immediatedly without that call to abort() which causes the 
ReadHeadersInterceptor to be called, which then promptly fails.

Is this a bug in CXF or a configuration issue? If it is a bug is there a way to 
work around this? (Other than changing the clients so they don't send HTTP Head 
requests)

Best Regards

Daniel


This is the stacktrace logged by CXF:

org.apache.cxf.binding.soap.SoapFault: Error reading XMLStreamReader.
        at 
org.apache.cxf.binding.soap.interceptor.ReadHeadersInterceptor.handleMessage(ReadHeadersInterceptor.java:183)
        at 
org.apache.cxf.binding.soap.interceptor.ReadHeadersInterceptor.handleMessage(ReadHeadersInterceptor.java:56)
        at 
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:220)
        at 
org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:78)
        at 
org.apache.cxf.transport.servlet.ServletDestination.invoke(ServletDestination.java:92)
        at 
org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:285)
        at 
org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:168)
        at 
org.apache.cxf.transport.servlet.AbstractCXFServlet.invoke(AbstractCXFServlet.java:175)
        at 
org.apache.cxf.transport.servlet.AbstractCXFServlet.doGet(AbstractCXFServlet.java:157)
        at javax.servlet.http.HttpServlet.doHead(HttpServlet.java:241)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:634)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
        at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at 
org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:646)
        at 
org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:436)
        at 
org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374)
        at 
org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302)
        at 
de.konsens.gda.server.ServiceUrlRewriteFilter.forwardToBasePath(ServiceUrlRewriteFilter.java:51)
        at 
de.konsens.gda.server.ServiceUrlRewriteFilter.doFilter(ServiceUrlRewriteFilter.java:29)
        at 
org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at 
org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at 
org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at 
org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
        at 
org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
        at 
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at 
org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at 
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
        at 
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849)
        at 
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
        at 
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454)
        at java.lang.Thread.run(Thread.java:662)
Caused by: com.ctc.wstx.exc.WstxEOFException: Unexpected EOF in prolog
 at [row,col {unknown-source}]: [1,0]
        at 
com.ctc.wstx.sr.StreamScanner.throwUnexpectedEOF(StreamScanner.java:686)
        at 
com.ctc.wstx.sr.BasicStreamReader.handleEOF(BasicStreamReader.java:2134)
        at 
com.ctc.wstx.sr.BasicStreamReader.nextFromProlog(BasicStreamReader.java:2040)
        at com.ctc.wstx.sr.BasicStreamReader.next(BasicStreamReader.java:1069)
        at 
com.ctc.wstx.sr.BasicStreamReader.nextTag(BasicStreamReader.java:1095)
        at 
org.apache.cxf.binding.soap.interceptor.ReadHeadersInterceptor.handleMessage(ReadHeadersInterceptor.java:85)
        ... 31 more
-- 
Daniel Hagen
E-Mail: [email protected]
Tel: 0179/6953843

Reply via email to