我有用於創建Web服務客戶端使用wsimpot命令
現在我想記錄一個WSDL URL中的所有正在進行和即將離任的XML
所以我覺得用戶SOAP處理程序,但它沒有作品與此服務
,但它與其他服務客戶端的工作。所以我的問題是這是記錄呼叫的正確方式,因爲我需要記錄所有參數並記錄響應,或者有另一種方法。SOAP消息處理程序
,爲什麼處理不與該客戶的工作,但與其他客戶一起?
我有用於創建Web服務客戶端使用wsimpot命令
現在我想記錄一個WSDL URL中的所有正在進行和即將離任的XML
所以我覺得用戶SOAP處理程序,但它沒有作品與此服務
,但它與其他服務客戶端的工作。所以我的問題是這是記錄呼叫的正確方式,因爲我需要記錄所有參數並記錄響應,或者有另一種方法。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,但是我懷疑這對你來說是否足夠 - 除非你只想跟蹤前後發送的任何東西。
所以我想請問我怎樣才能得到PortInfo這樣我就可以把它傳遞給getHandlerChain(PortInfo爲arg0)方法,我已經實現了HandlerResolver,並添加我的自定義SOAP處理程序呢? – user1025523
謝謝,我工作正常與我這個客戶端的問題只是我需要使用bindingProvider.getBinding()。setHandlerChain – user1025523
問題尚不清楚。你的意思是在客戶端還是在服務器端? –
客戶端@Zeus – user1025523
使用 –