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