JAXWSクライアントをセットアップし、SoapHandler実装をBinding handlerChainに追加しました。これはすべて、これが実行されていないときに生のサービス応答を表示することを希望します。jaxwsハンドラが誤ったレスポンスで動作する
すべてがうまくいけば、handler.handleMessage()は2回呼び出されます.1回はリクエストで、もう一度1回は応答です。
しかし、サービスの応答が何らかの文字化けしたXMLまたはそれより悪い場合、私はhandler.handleFaultが呼び出されることを期待していましたが、何も起こりません。ここで
は、この場合、関連するスタックトレースの一部です:
com.sun.xml.internal.ws.streaming.XMLStreamReaderException: XML reader error: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,1]
Message: Premature end of file.
com.sun.xml.internal.ws.streaming.XMLStreamReaderUtil.wrapException(XMLStreamReaderUtil.java:256)
com.sun.xml.internal.ws.streaming.XMLStreamReaderUtil.next(XMLStreamReaderUtil.java:84)
com.sun.xml.internal.ws.streaming.XMLStreamReaderUtil.nextContent(XMLStreamReaderUtil.java:99)
com.sun.xml.internal.ws.streaming.XMLStreamReaderUtil.nextElementContent(XMLStreamReaderUtil.java:89)
com.sun.xml.internal.ws.encoding.StreamSOAPCodec.decode(StreamSOAPCodec.java:164)
com.sun.xml.internal.ws.encoding.StreamSOAPCodec.decode(StreamSOAPCodec.java:292)
com.sun.xml.internal.ws.encoding.StreamSOAPCodec.decode(StreamSOAPCodec.java:118)
com.sun.xml.internal.ws.encoding.SOAPBindingCodec.decode(SOAPBindingCodec.java:278)
com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.process(HttpTransportPipe.java:180)
com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.processRequest(HttpTransportPipe.java:83)
com.sun.xml.internal.ws.transport.DeferredTransportPipe.processRequest(DeferredTransportPipe.java:105)
com.sun.xml.internal.ws.api.pipe.Fiber.__doRun(Fiber.java:587)
com.sun.xml.internal.ws.api.pipe.Fiber._doRun(Fiber.java:546)
com.sun.xml.internal.ws.api.pipe.Fiber.doRun(Fiber.java:531)
com.sun.xml.internal.ws.api.pipe.Fiber.runSync(Fiber.java:428)
com.sun.xml.internal.ws.client.Stub.process(Stub.java:211)
com.sun.xml.internal.ws.client.sei.SEIStub.doProcess(SEIStub.java:124)
com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:98)
com.sun.xml.internal.ws.client.sei.SyncMethodHandler.invoke(SyncMethodHandler.java:78)
com.sun.xml.internal.ws.client.sei.SEIStub.invoke(SEIStub.java:107)
私はXMLなると私のハンドラがすでにそのコンテキストでの素敵なXMLを期待して以来いない可能性があります交換だRAWデータを取得したいと思います。 getMessage()。getSOAPPart()これは方法だとは思わない。
IよSOAPスタックをバイパスしてデータを取得するが、これは醜い小さなビット
私は本当にその道を行くべき見つけるためにHTTPを介して直接私の要求を実行しているの誘惑?
- それはあなたが持っていない場合、あなたは正確に...あなたのコードが送信された要求を再作成できることを前提としていないにもかかわらずあなたのコードが実際にどこかで生成しているもののログを取得すると、アプリからの不正な入力に起因する問題を再現するのが難しくなります。 –
リモートエンドが正しく動作しているかどうかを簡単に確認できる、いくつかの 'デフォルトクエリ'が存在するため、私の場合はうまくいきます。 – user691154
内部JAX-WS、つまりrt.jarのJREで提供されているJAX-WSを使用する場合は、com.sun.xml.internal.ws.transport.http.client.HttpTransportPipe.dump = trueを使用する必要があります'internal')。[この質問に対する回答](http://stackoverflow.com/questions/5350476/tracing-xml-request-responses-with-jax-ws-when-error-occurs)。 – Hok