2017-08-14 37 views
0

我無法將參數從應用程序傳遞到處理程序。 在EJB我打電話給我的web服務:將參數從EJB傳遞到SOAP處理程序解析器

MyNameWSService service = new MyNameWSService(URL); //MyNameWSService = class with annotation @WebServiceClient 
((BindingProvider)service.getMyNameWSPort()).getRequestContext().put("login", login); 
HeaderHandlerResolver handlerResolver = new HeaderHandlerResolver(); 
service.setHandlerResolver(handlerResolver); 
service.getMyNameWSPort().callMyMethod(); 

在HeaderHandlerResolver我嘗試閱讀我的參數 「登錄」,但它是空:

import javax.xml.ws.handler.soap.SOAPHandler; 
import javax.xml.ws.handler.soap.SOAPMessageContext; 

public class HeaderHandler implements SOAPHandler<SOAPMessageContext> { 
    public boolean handleMessage(SOAPMessageContext smc) { 
    ... 
    System.out.println(smc.get("login")); //it's null, why? 
    } 
... 

}

我爲了增加WS創建HeaderHandlerResolver - 肥皂請求和登錄/密碼的安全標題可能會有所不同。

import javax.xml.ws.handler.Handler; 
import javax.xml.ws.handler.HandlerResolver; 
import javax.xml.ws.handler.PortInfo; 

public class HeaderHandlerResolver implements HandlerResolver { 

public List<Handler> getHandlerChain(PortInfo portInfo) { 
     List<Handler> handlerChain = new ArrayList<Handler>(); 
     HeaderHandler hh = new HeaderHandler(); 
     handlerChain.add(hh); 
     return handlerChain; 
    } 
} 
+0

貴'HeaderHandlerResolver'同時實現[javax.xml.ws.handler.HandlerResolver](http://docs.oracle .com/javase/8/docs/api/javax/xml/ws/handler/HandlerResolver.html)和[javax.xml.ws.handler.Handler ](http://docs.oracle.com/javase /8/docs/api/javax/xml/ws/handler/Handler.html)?或許你可以展示更多你的實現...... –

+0

HeaderHandlerResolver的代碼被添加到文章 – OGSL

+0

當你調用'... getRequestContext()。put(「login」,login)時,你怎麼知道'login'不是null? '? –

回答

0

這不是爲你工作,因爲在每次通話時間service.getMyNameWSPort()你得到一個新的代理。

你兩次調用它:

  1. 一旦到
  2. ,並重新設置請求上下文值調用Web服務

您使用調用第二個代理Web服務沒有使用您的login對象更新請求上下文。

1

好的,謝謝的,我重寫我的代碼,它的開始工作:

MyNameWSService service = new MyNameWSService(URL); //MyNameWSService = class with annotation @WebServiceClient 
MyNameWSPort servicePort = service.getMyNameWSPort() 
((BindingProvider)servicePort).getRequestContext().put("login", login); 

HeaderHandlerResolver handlerResolver = new HeaderHandlerResolver(); 
service.setHandlerResolver(handlerResolver); 
servicePort.callMyMethod(); 
相關問題