繁体   English   中英

使用 JAX-WS 在 java 中返回原始 soap 响应

[英]Returning raw soap response in java using JAX-WS

我有一个程序,我从 jax-ws wsimport function 调用生成的代码。 这是它的样子:

HolidayService2 service = new HolidayService2();
HolidayService2Soap proxy = service.getHolidayService2Soap();
ArrayOfCountryCode countries = proxy.GetCountriesAvailable("USA");

proxy.GetCountriesAvailable 方法调用 web 服务并返回一个国家代码数组。 有什么方法可以在我的应用程序中显示原始 soap 响应?

谢谢你的帮助

您可以使用数据包嗅探程序或基于代理的程序。

Fiddler是一个很棒的基于代理的程序,或者有JAX-WS WSMonitor工具。

对于数据包嗅探: Wireshark


要访问SOAPMessage ,您实际上需要创建一个 class 来实现javax.xml.ws.handler.soap.SOAPHandler接口:

public class MySoapHandler implements SOAPHandler<SOAPMessageContext>
{
    @Override
    public Set<QName> getHeaders ()
    {
        ...
    }

    @Override
    public boolean handleMessage (final SOAPMessageContext context)
    {
        ...
    }

    @Override
    public boolean handleFault (final SOAPMessageContext context)
    {
        ...
    }

    @Override
    public void close (final MessageContext context)
    {
        ...
    }
}

并将其添加到您的服务绑定的处理程序链中:

final BindingProvider bindingProvider = (BindingProvider) proxy;
final Binding binding = bindingProvider.getBinding ();
final List<Handler> handlerChain = binding.getHandlerChain ();
handlerChain.add (new MySoapHandler ());
binding.setHandlerChain (handlerChain);

魔术发生在自定义处理程序的handleMessage / handleFault方法中。 一旦你有一个SOAPMessageContext你调用getMessage方法,它会返回一个javax.xml.soap.SOAPMessage的实例。 SOAPMessage是原始 soap 数据包的 object 表示。 从这里您应该能够为您的目的重建 XML 结构。

SOAPMessage API 文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM