4

Metro を使用して SOAP Web サービスを呼び出しています。制御できないサーバーから、本文に無効な文字参照を含む SOAP 応答を受信して​​います。Metro が XML をアンマーシャリングしてクライアントに例外をスローする前に、XML を修正したいと考えています。これは可能ですか?

LogicalHandleraと aを追加しようとSOAPHandlerしましたが、ペイロードを取得しようとすると、両方とも同じ非整列化例外をスローします (それぞれLogicalMessage.getPayload()とで失敗しSOAPMessageContext.getMessage()ます)。ハンドラーは正常に動作し、応答に無効な XML が含まれていない場合、メッセージにアクセスできます。

例外は次のようになります。

com.sun.xml.internal.ws.encoding.soap.DeserializationException: Failed to read a response: javax.xml.bind.UnmarshalException
 - with linked exception:
[javax.xml.stream.XMLStreamException: ParseError at [row,col]:[7,2653]
Message: Character reference "&#]
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.handleStreamException(UnmarshallerImpl.java:421)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:357)
at com.sun.xml.internal.bind.v2.runtime.BridgeImpl.unmarshal(BridgeImpl.java:109)
at com.sun.xml.internal.bind.api.Bridge.unmarshal(Bridge.java:222)
at com.sun.xml.internal.ws.client.sei.ResponseBuilder$DocLit.readResponse(ResponseBuilder.java:539)
at com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:110)
... 41 more
Caused by: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[7,2653]
Message: Character reference "&#
at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.next(XMLStreamReaderImpl.java:598)
at com.sun.xml.internal.ws.util.xml.XMLStreamReaderFilter.next(XMLStreamReaderFilter.java:81)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.StAXStreamConnector.bridge(StAXStreamConnector.java:182)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:355)

生のペイロードを取得して修正し、元に戻して続行する方法はありますか?

4

2 に答える 2

0

いいえ、あなたの答えは役に立ちません。どちらも、逆シリアル化を試みた後に生の XML を取得することを指しており、そこに問題があります。だから行かない。

于 2016-07-27T19:17:20.840 に答える