【发布时间】:2011-12-12 17:26:31
【问题描述】:
我已经设置了一个 JAXWS 客户端并将一个 SoapHandler 实现添加到它的 Binding handlerChain。所有这些都是为了在它没有正常运行时查看原始服务响应。
当一切正常时,我的 handler.handleMessage() 会被调用两次,一次用于请求,一次用于响应。
但是当服务的响应是一些乱码或更糟糕的 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 的交换的 RAW 数据,因为我的处理程序已经期望在其 context.getMessage().getSOAPPart() 中有一个不错的 XML,我不认为这是要走的路。
我很想绕过 SOAP 堆栈并直接通过 HTTP 运行我的请求以获取数据,但发现这有点难看
我真的应该走那条路吗?
【问题讨论】: