SOAP 消息处理程序
SOAP Message Handler
我有一个 WSDL URL,用于使用 wsimpot 命令创建 Web 服务客户端
现在我想记录所有传入和传出 XML
所以我想用户 SOAP 处理程序,但它不适用于此服务
但它适用于另一个服务客户端。所以我的问题是这是记录调用的正确方法,因为我需要记录所有参数并记录响应,或者还有另一种方法。
以及为什么处理程序不与该客户一起工作,而是与其他客户一起工作?
这取决于您如何实现处理程序 - 实现此类功能的正常方法只是添加一个处理程序链,类似于:
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 等其他工具,但我怀疑这对你来说是否足够 - 除非你只想跟踪发送的任何内容 back/forth。
我有一个 WSDL URL,用于使用 wsimpot 命令创建 Web 服务客户端
现在我想记录所有传入和传出 XML
所以我想用户 SOAP 处理程序,但它不适用于此服务
但它适用于另一个服务客户端。所以我的问题是这是记录调用的正确方法,因为我需要记录所有参数并记录响应,或者还有另一种方法。
以及为什么处理程序不与该客户一起工作,而是与其他客户一起工作?
这取决于您如何实现处理程序 - 实现此类功能的正常方法只是添加一个处理程序链,类似于:
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 等其他工具,但我怀疑这对你来说是否足够 - 除非你只想跟踪发送的任何内容 back/forth。