Hi all, I'd really appreciate some help with this one... it's hurting my
brain!

We have a legacy service that I would like to include in some of our ESB
operations.
The legacy service uses XML for both request and response payloads making
it a very easy integration.

I've created a very simple proxy service (see below).

The problem I am having is that the legacy service can return some invalid
characters and is causing the stax parser to blow up in such a way that I
can't even handle it gracefully with a fault sequence.  I'd really like to
pre-process the responses (before they are parsed/built) as 99% of the time
it is simply a case of replacing characters with numeric character
references or character entity references..

We are unable to modify the legacy service to remove these erroneous
responses.

Heres the proxy config (I said it was simple!!) followed by the Exception
thrown...  The exception causes the service to hang and the fault sequence
is only entered after a 60 second timeout.

<proxy xmlns="http://ws.apache.org/ns/synapse"; name="legacyservice"
transports="http" startOnLoad="true">

   <target endpoint="legacyXMLReceiver">

      <inSequence>

         <log level="full">

            <property name="MESSAGE" value="InSequence" />

         </log>

      </inSequence>

      <outSequence>

         <log level="full">

            <property name="MESSAGE" value="OutSequence" />

         </log>

            <send />

         </outSequence>

         <faultSequence>

            <makefault version="soap11">

               <code xmlns:soap11Env="
http://schemas.xmlsoap.org/soap/envelope/"; value="soap11Env:Server" />

               <reason expression="get-property('ERROR_MESSAGE')" />

               <role />

            </makefault>

            <log level="full">

               <property name="MESSAGE" value="FaultSequence" />

            </log>

            <property name="HTTP_SC" value="500" scope="axis2" />

            <send />

         </faultSequence>

      </target>

   </proxy>


<endpoint xmlns="http://ws.apache.org/ns/synapse"; name="legacyXMLReceiver">

   <address uri="http://a.b.c.d:8080/legacyService/LegacyServlet";
format="pox" >

   </address>

</endpoint>


ERROR {org.apache.axis2.transport.base.threads.NativeWorkerPool} -
 Uncaught exception
{org.apache.axis2.transport.base.threads.NativeWorkerPool}
*org.apache.axiom.om.OMException: com.ctc.wstx.exc.WstxIOException: Invalid
UTF-8 middle byte 0x3c (at char #714, byte #127)*
at
org.apache.axiom.om.impl.builder.StAXOMBuilder.next(StAXOMBuilder.java:296)
at
org.apache.axiom.om.impl.llom.OMElementImpl.buildNext(OMElementImpl.java:653)
at
org.apache.axiom.om.impl.llom.OMNodeImpl.getNextOMSibling(OMNodeImpl.java:122)
at
org.apache.axiom.om.impl.llom.OMElementImpl.getNextOMSibling(OMElementImpl.java:343)
at
org.apache.axiom.om.impl.traverse.OMChildrenIterator.getNextNode(OMChildrenIterator.java:36)
at
org.apache.axiom.om.impl.traverse.OMAbstractIterator.hasNext(OMAbstractIterator.java:58)
at
org.apache.axiom.om.impl.util.OMSerializerUtil.serializeChildren(OMSerializerUtil.java:555)
at
org.apache.axiom.om.impl.llom.OMElementImpl.internalSerialize(OMElementImpl.java:875)
at
org.apache.axiom.om.impl.util.OMSerializerUtil.serializeChildren(OMSerializerUtil.java:556)
at
org.apache.axiom.om.impl.llom.OMElementImpl.internalSerialize(OMElementImpl.java:875)
at
org.apache.axiom.om.impl.util.OMSerializerUtil.serializeChildren(OMSerializerUtil.java:556)
at
org.apache.axiom.om.impl.llom.OMElementImpl.internalSerialize(OMElementImpl.java:875)
at
org.apache.axiom.soap.impl.llom.SOAPEnvelopeImpl.internalSerialize(SOAPEnvelopeImpl.java:230)
at
org.apache.axiom.om.impl.llom.OMSerializableImpl.serialize(OMSerializableImpl.java:125)
at
org.apache.axiom.om.impl.llom.OMSerializableImpl.serialize(OMSerializableImpl.java:113)
at
org.apache.axiom.om.impl.llom.OMElementImpl.toString(OMElementImpl.java:988)
at java.lang.String.valueOf(String.java:2826)
at java.lang.StringBuffer.append(StringBuffer.java:219)
at
org.apache.synapse.mediators.builtin.LogMediator.getFullLogMessage(LogMediator.java:184)
at
org.apache.synapse.mediators.builtin.LogMediator.getLogMessage(LogMediator.java:123)
at
org.apache.synapse.mediators.builtin.LogMediator.mediate(LogMediator.java:91)
at
org.apache.synapse.mediators.AbstractListMediator.mediate(AbstractListMediator.java:60)
at
org.apache.synapse.mediators.base.SequenceMediator.mediate(SequenceMediator.java:114)
at
org.apache.synapse.core.axis2.Axis2SynapseEnvironment.injectMessage(Axis2SynapseEnvironment.java:229)
at
org.apache.synapse.core.axis2.SynapseCallbackReceiver.handleMessage(SynapseCallbackReceiver.java:370)
at
org.apache.synapse.core.axis2.SynapseCallbackReceiver.receive(SynapseCallbackReceiver.java:160)
at org.apache.axis2.engine.AxisEngine.receive(AxisEngine.java:181)
at
org.apache.synapse.transport.nhttp.ClientWorker.run(ClientWorker.java:275)
at
org.apache.axis2.transport.base.threads.NativeWorkerPool$1.run(NativeWorkerPool.java:173)
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:680)
*Caused by: com.ctc.wstx.exc.WstxIOException: Invalid UTF-8 middle byte
0x3c (at char #714, byte #127)*
at com.ctc.wstx.sr.StreamScanner.throwFromIOE(StreamScanner.java:708)
at com.ctc.wstx.sr.BasicStreamReader.next(BasicStreamReader.java:1086)
at
org.apache.axiom.util.stax.wrapper.XMLStreamReaderWrapper.next(XMLStreamReaderWrapper.java:225)
at
org.apache.axiom.util.stax.dialect.DisallowDoctypeDeclStreamReaderWrapper.next(DisallowDoctypeDeclStreamReaderWrapper.java:34)
at
org.apache.axiom.util.stax.wrapper.XMLStreamReaderWrapper.next(XMLStreamReaderWrapper.java:225)
at
org.apache.axiom.om.impl.builder.StAXOMBuilder.parserNext(StAXOMBuilder.java:681)
at
org.apache.axiom.om.impl.builder.StAXOMBuilder.next(StAXOMBuilder.java:214)
... 31 more
*Caused by: java.io.CharConversionException: Invalid UTF-8 middle byte 0x3c
(at char #714, byte #127)*
at com.ctc.wstx.io.UTF8Reader.reportInvalidOther(UTF8Reader.java:313)
at com.ctc.wstx.io.UTF8Reader.read(UTF8Reader.java:204)
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.loadMoreFromCurrent(StreamScanner.java:1046)
at
com.ctc.wstx.sr.StreamScanner.loadMoreFromCurrent(StreamScanner.java:1053)
at
com.ctc.wstx.sr.StreamScanner.getNextInCurrAfterWS(StreamScanner.java:892)
at
com.ctc.wstx.sr.BasicStreamReader.handleNsAttrs(BasicStreamReader.java:2963)
at
com.ctc.wstx.sr.BasicStreamReader.handleStartElem(BasicStreamReader.java:2936)
at
com.ctc.wstx.sr.BasicStreamReader.nextFromTree(BasicStreamReader.java:2848)
at com.ctc.wstx.sr.BasicStreamReader.next(BasicStreamReader.java:1019)

Reply via email to