Jakarta ee 将参数从EJB传递到SOAP处理程序解析器
我无法将参数从应用程序传递给处理程序。 在EJB中,我将我的Web服务称为:Jakarta ee 将参数从EJB传递到SOAP处理程序解析器,jakarta-ee,jax-ws,Jakarta Ee,Jax Ws,我无法将参数从应用程序传递给处理程序。 在EJB中,我将我的Web服务称为: MyNameWSService service = new MyNameWSService(URL); //MyNameWSService = class with annotation @WebServiceClient ((BindingProvider)service.getMyNameWSPort()).getRequestContext().put("login", login); HeaderHandler
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中,我尝试读取参数“login”,但它为空:
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?
}
...
import javax.xml.ws.handler.soap.SOAPHandler;
导入javax.xml.ws.handler.soap.SOAPMessageContext;
公共类HeaderHandler实现SOAPHandler{
公共布尔handleMessage(SOAPMessageContext smc){
...
System.out.println(smc.get(“login”);//它是空的,为什么?
}
...
}
我创建HeaderHandlerResolver是为了将WS-Security头添加到soap请求中,登录名/密码可能不同
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;
}
}
import javax.xml.ws.handler.handler;
导入javax.xml.ws.handler.HandlerResolver;
导入javax.xml.ws.handler.PortInfo;
公共类HeaderHandlerResolver实现HandlerResolver{
公共列表getHandlerChain(PortInfo PortInfo){
List handlerChain=new ArrayList();
HeaderHandler hh=新HeaderHandler();
扶手链。添加(hh);
返回手柄链;
}
}
这对您不起作用,因为每次调用service.getMyNameWSPort()
都会得到一个新的代理
你叫它两次:
您用于调用web服务的第二个代理尚未使用您的
登录
对象更新其请求上下文。好的,谢谢,我重写了代码,它开始工作了:
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();
您的
HeaderHandlerResolver
是否同时实现和?也许您可以展示更多的实现…HeaderHandlerResolver的代码被添加到Post中您如何知道调用…getRequestContext().put(“login”,login)
?login参数的值不为空。这并不能回答问题。。。