SOAP消息处理器



我有一个WSDL URL,用于使用wsimpot命令创建web服务客户端
现在我想记录所有传入和传出的XML
所以我想使用SOAP处理程序,但它不适用于此服务
但它与另一个服务客户端一起工作。所以我的问题是,这是记录呼叫的正确方法,因为我需要记录所有参数并记录响应,或者还有另一种方法。

和为什么处理程序不与这个客户端一起工作,而是与其他客户端一起工作?

这取决于您如何实现您的处理程序-实现此类功能的正常方法只是添加一个handlerChain,类似于:

bindingProvider.getBinding().setHandlerChain(CollectionUtils.toList(new Handler[]{new SimpleHandler()}));

在SimpleHandler(显然必须实现:SOAPHandler<SOAPMessageContext>)中,您基本上会做这样的事情:

@Override
public boolean handleMessage(final SOAPMessageContext messageContext) {
    if (messageContext == null) {
        LOG.warning("The messageContext was nilled. Unable to handle the soapMessage.");
        return false;
    }
    if (Boolean.FALSE.equals(messageContext.get(MessageContext.MESSAGE_OUTBOUND_PROPERTY))) {
        LOG.finest("Some cool incoming message");
    } else {
        LOG.finest("Some cool outgoing message");
    }
    return true;
}

前面提到的bindingProvider,您将从WebService本身的初始化中截取。很可能是这样的:

final SomeCoolService someService = new SomeCoolService("my/path/to/service.wsdl", new QName(.., ..));
    coolServicePort = remedyService.getCoolServicePort();
    if (coolServicePort != null) {
        final BindingProvider bindingProvider = (BindingProvider) coolServicePort;

在你的例子中,你添加的处理程序没有工作——它甚至在处理程序链的初始化过程中被初始化了吗?

记录这些事情的不太明显的方法是使用其他工具,如Wireshark,但我怀疑这对你来说是足够的-除非你只是想跟踪任何来回发送。

相关内容

  • 没有找到相关文章

最新更新