2016-08-15 192 views
0

我有用于创建Web服务客户端使用wsimpot命令
现在我想记录一个WSDL URL中的所有正在进行和即将离任的XML
所以我觉得用户SOAP处理程序,但它没有作品与此服务
,但它与其他服务客户端的工作。所以我的问题是这是记录呼叫的正确方式,因为我需要记录所有参数并记录响应,或者有另一种方法。SOAP消息处理程序

,为什么处理不与该客户的工作,但与其他客户一起?

+0

问题尚不清楚。你的意思是在客户端还是在服务器端? –

+0

客户端@Zeus – user1025523

+0

使用 –

回答

1

这取决于你如何实现你的处理器 - 一个正常的方式来实现这样的功能仅仅是增加一个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,但是我怀疑这对你来说是否足够 - 除非你只想跟踪前后发送的任何东西。

+0

所以我想请问我怎样才能得到PortInfo这样我就可以把它传递给getHandlerChain(PortInfo为arg0)方法,我已经实现了HandlerResolver,并添加我的自定义SOAP处理程序呢? – user1025523

+0

谢谢,我工作正常与我这个客户端的问题只是我需要使用bindingProvider.getBinding()。setHandlerChain – user1025523