2017-08-14 98 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(); 
相关问题