Using a transform for this won’t work as the XML parser (woodstox in our case) 
would still not be able to parse the XML.

The only way to handle this would be to write an interceptor that would run 
prior to the StaxInInterceptor that would take the InputSteam and wrapper it 
with a new InputStream that would convert the bytes to valid values during the 
read(..) methods.  Basically, fix it at the stream level.

Dan


On Mar 17, 2014, at 4:39 AM, Mike Watson <michael.f.wat...@gmail.com> wrote:

> Hi,
> 
> I'm using CXF in a client that is consuming the MS Exchange Web Service
> (EWS).
> 
> I'm finding that one of the elements returned by this service (UniqueHash)
> contains characters that are invalid in XML v1.0. As I have no control over
> this I'm trying to use an inbound interceptor to drop the UniqueHash
> elements (I don't need them) like this:
> 
> Map<String, String> inTransformMap = Collections.singletonMap(
> "{http://schemas.microsoft.com/exchange/services/2006/types}UniqueHash";,
> "");
> TransformInInterceptor transformInInterceptor = new
> TransformInInterceptor();
> transformInInterceptor.setInTransformElements(inTransformMap);
> client.getInInterceptors().add(transformInInterceptor);
> 
> 
> I can see that the transform is running nice and early (post-stream):
> 
> FINE: Chain org.apache.cxf.phase.PhaseInterceptorChain@be78549 was created.
> Current flow:
>  receive [PolicyInInterceptor, LoggingInInterceptor,
> AttachmentInInterceptor]
>  post-stream [TransformInInterceptor, StaxInInterceptor]
>  read [WSDLGetInterceptor, ReadHeadersInterceptor,
> SoapActionInInterceptor, StartBodyInterceptor]
>  pre-protocol [MustUnderstandInterceptor]
>  post-protocol [CheckFaultInterceptor, JAXBAttachmentSchemaValidationHack]
>  unmarshal [DocLiteralInInterceptor, SoapHeaderInterceptor]
>  post-logical [WrapperClassInInterceptor]
>  pre-invoke [SwAInInterceptor, HolderInInterceptor]
> 
> 
> But even though it *appears* to be working as intended stepping through the
> code, when DocLiteralInInterceptor fires later on it throws this
> unmarshalling error (0x5 in this case is within the UniqueHash element I
> thought I'd dropped):
> 
> org.apache.cxf.interceptor.Fault: Unmarshalling Error: Illegal character
> entity: expansion character (code 0x5
> at [row,col {unknown-source}]: [1,2574]
> at
> org.apache.cxf.jaxb.JAXBEncoderDecoder.unmarshall(JAXBEncoderDecoder.java:881)
> at
> org.apache.cxf.jaxb.JAXBEncoderDecoder.unmarshall(JAXBEncoderDecoder.java:702)
> at org.apache.cxf.jaxb.io.DataReaderImpl.read(DataReaderImpl.java:160)
> at
> org.apache.cxf.interceptor.DocLiteralInInterceptor.handleMessage(DocLiteralInInterceptor.java:192)
> 
> Does anyone know what I'm doing wrong here? Any pointers on how I get rid
> of this element and it's troublesome content?
> 
> BTW I'm using CXF v2.7.10 with Java 7.
> 
> Kind regards,
> Mike

-- 
Daniel Kulp
dk...@apache.org - http://dankulp.com/blog
Talend Community Coder - http://coders.talend.com

Reply via email to