I am making a Web Service call using CXF 2.7.8 where the response consists
of a 302 response-code with header information but no SOAP payload. When
the ReadHeadersInterceptor attempts to parse the response, the following
exception is thrown:
Caused by: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,1]
Message: Premature end of file.
at
com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.next(XMLStreamReaderImpl.java:601)
at
com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.nextTag(XMLStreamReaderImpl.java:1238)
at
org.apache.cxf.binding.soap.interceptor.ReadHeadersInterceptor.handleMessage(ReadHeadersInterceptor.java:152)
at
org.apache.cxf.binding.soap.interceptor.ReadHeadersInterceptor.handleMessage(ReadHeadersInterceptor.java:62)
I turned on debugging to see the incoming response, and the
LoggingInInterceptor outputs the following:
Inbound Message
----------------------------
ID: 2
Response-Code: 302
Encoding: ISO-8859-1
Content-Type:
Headers: {connection=[Close], Content-Length=[0],
Location=[/acme.policy], Server=[AcmeServer],
Set-Cookie=[MRHSHint=deleted; expires=Thu, 01-Jan-1970 00:00:01 GMT;
path=/, MRHSession=XXXXX;path=/;secure,
LastMRH_Session=XXXXX;path=/;secure]}
--------------------------------------
I took a look at the ReadHeadersInterceptor source, and it appears to me
that it expects a SOAP message. I may be interpreting the code incorrectly,
but unfortunately, I cannot connect a debugger to the server making the WS
call, so I can't interact with it.
I am not sure if this is an issue in ReadHeadersInterceptor or if I am not
correctly configuring the HTTPConduit to handle redirects. I am calling
HTTPClientPolicy.setAutoRedirect(true) in my code.
>From the debugging message I see, I think the PolicyInInterceptor is called
and the message is handled and then eventually passed to the
ReadHeadersInterceptor:
Invoking handleMessage on interceptor
org.apache.cxf.ws.policy.PolicyInInterceptor@590970
Adding interceptor
org.apache.cxf.ws.policy.PolicyVerificationInInterceptor@a2a111 to
phase pre-invoke
Chain org.apache.cxf.phase.PhaseInterceptorChain@1aee3c4 was modified.
Current flow:
receive [PolicyInInterceptor, LoggingInInterceptor, AttachmentInInterceptor]
post-stream [StaxInInterceptor]
read [WSDLGetInterceptor, ReadHeadersInterceptor,
SoapActionInInterceptor, StartBodyInterceptor]
pre-protocol [MustUnderstandInterceptor]
post-protocol [CheckFaultInterceptor, JAXBAttachmentSchemaValidationHack]
unmarshal [DocLiteralInInterceptor, SoapHeaderInterceptor]
post-logical [WrapperClassInInterceptor]
pre-invoke [SwAInInterceptor, HolderInInterceptor,
PolicyVerificationInInterceptor]
Invoking handleMessage on interceptor
org.apache.cxf.interceptor.LoggingInInterceptor@527a4a
Invoking handleMessage on interceptor
org.apache.cxf.interceptor.AttachmentInInterceptor@ec7037
Invoking handleMessage on interceptor
org.apache.cxf.interceptor.StaxInInterceptor@1585596
Invoking handleMessage on interceptor
org.apache.cxf.frontend.WSDLGetInterceptor@73fc8b
Invoking handleMessage on interceptor
org.apache.cxf.binding.soap.interceptor.ReadHeadersInterceptor@163985e
Invoking handleFault on interceptor
org.apache.cxf.binding.soap.interceptor.ReadHeadersInterceptor@163985e
Any thoughts on if this is a problem in how I make the WS call or if this
could be a problem in the ReadHeadersInterceptor?
Thanks,
Chris