我有一个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,但我怀疑这对你来说是足够的-除非你只是想跟踪任何来回发送。