How about an interceptor for inbound traffic? Like:
class ResponseHandleInterceptor extends AbstractPhaseInterceptor<Message> {
public ResponseHandleInterceptor() {
super(Phase.RECEIVE);
}
public void handleMessage(Message message) {
InputStream is = message.getContent(InputStream.class);
if (is == null) {
return;
}
CachedOutputStream bos = new CachedOutputStream();
try {
IOUtils.copy(is, bos);
is.close();
bos.flush();
String response = new String(bos.getBytes());
bos.close();
No fix the XML.
InputStream backup = new
ByteArrayInputStream((response).getBytes());
message.setContent(InputStream.class, backup);
} catch(Exception e) {
throw new Exception(e);
}
}
}
And then use that like:
Client client = ClientProxy.getClient(service);
client.getInInterceptors().add(new ResponseHandleInterceptor());
I've used that approach before to fix invalid XML from legacy systems.
Hope this helps.
Thanks.
Henk
On Feb 25, 2010, at 8:36 AM, Juan José Vázquez Delgado wrote:
> Hi,
>
> My team and I are suffering an XML validation problem when our service
> receives a request from a legacy web service client. The trace is:
>
> org.apache.cxf.binding.soap.SoapFault: Error reading XMLStreamReader.
> INFO | jvm 1 | 2010/02/23 12:56:26 | at
> org.apache.cxf.binding.soap.interceptor.ReadHeadersInterceptor.handleMessage(ReadHeadersInterceptor.java:230)
> ...................................................................................................................................................................
> INFO | jvm 1 | 2010/02/23 12:56:26 | Caused by:
> com.ctc.wstx.exc.WstxUnexpectedCharException: Illegal character
> ((CTRL-CHAR, code 12))
> INFO | jvm 1 | 2010/02/23 12:56:26 | at [row,col {unknown-source}]:
> [1,1]
> INFO | jvm 1 | 2010/02/23 12:56:26 | at
> com.ctc.wstx.sr.StreamScanner.throwInvalidSpace(StreamScanner.java:675)
>
> Unfortunately we can't modify the legacy code so we are looking for a
> workaround such as one is described in [1]. Our problem now is that we
> don't know how to set properties to the Woodstox XMLOutputFactory. We
> are configuring the CXF Runtime in the Spring way.
>
> Any ideas?.
>
> Thanks in advance.
>
> Regards,
>
> Juanjo.
>
> [1] http://www.cowtowncoder.com/blog/archives/2008/12/entry_106.html