gpt4 book ai didi

java - 错误响应时的 jaxws 处理程序行为

转载 作者:行者123 更新时间:2023-11-30 09:44:33 26 4
gpt4 key购买 nike

我已经设置了一个 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)

我想获取交换的 RAW 数据,它可能不是 XML,因为我的处理程序已经期望在其 context.getMessage().getSOAPPart() 中有一个很好的 XML,我认为这不是可行的方法。

我很想绕过 SOAP 堆栈并直接通过 HTTP 运行我的请求以获取数据,但发现这有点丑陋

我真的应该走那条路吗?

最佳答案

据我所知,无法以编程方式获取 JAX-WS 服务的原始数据流。

为了获得数据流,您需要将某种处理程序插入到 HTTP(或其他)协议(protocol)管道中。我敢肯定,根据您的 JAX-WS 实现和版本,有多种方法可以实现这一点,但没有一种方法是 JAX-WS 标准的一部分。 (再次,AFAIK..)

如果您只是需要解决问题并且真的只想记录来自 HTTP 管道的请求和响应,您可以使用此系统属性使 HTTP 传输管道记录流经它的所有内容:

-Dcom.sun.xml.ws.transport.http.client.HttpTransportPipe.dump=true

关于java - 错误响应时的 jaxws 处理程序行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7852232/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com