2016-08-15 194 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