aze*_*rIO 3 soap web-services jax-ws
我有一个独立的Web服务客户端.在调用任何Web方法时,必须将附加的"cookie"字符串隐式(不是作为Web方法参数)传递给WS.另一端的WS必须能够获取字符串并使用它.怎么能实现这一目标?
我以下列方式调用服务:
Service srv = Service.create(new URL(WSDL), QNAME);
myClassPort = srv.getPort(MyClass.class);
Run Code Online (Sandbox Code Playgroud)
我需要的是在第一行之前放置一些代码,这会使客户端每次通过myClassPort调用一些远程方法时都会发送这个"cookie"字符串.谢谢.
默认情况下,JAX-WSWeb服务和客户端是无状态的.当客户端发出请求时,如果服务器参与会话,则服务器会响应并在连接上设置cookie.但是,JAX-WS客户端忽略该cookie,服务器将后续请求视为新的交互.启用会话后,JAX-WS客户端会为每个后续请求发送相同的cookie,以便服务器可以跟踪客户端会话.
因此,您不应该使用cookie或HTTP会话与Web服务.返回令牌ID作为响应的一部分; 然后客户端可以将其与下一个请求一起发送.
无论如何:
必须使用该javax.xml.ws.session.maintain属性将JAX-WS Web服务客户端配置为维护会话信息(例如cookie).其他Web服务堆栈可能具有类似的机制.
在服务器端
JAX-WS使用Java平台的Common Annotations定义的一些方便的注释(JSR 250)来注入Web服务上下文并声明生命周期方法.
WebServiceContext保存与正在服务的请求有关的上下文信息.
您不需要实施javax.xml.rpc.server.ServiceLifecycle.使用JAX-WSWeb Service,您需要做的就是使用标记字段或方法@Resource.类型元素必须是java.lang.Object或javax.xml.ws.WebServiceContext.
@WebService
public class HelloWorld {
@Resource
private WebServiceContext wsContext;
public void sayHello(){
MessageContext mc = wsContext.getMessageContext();
HttpSession session = ((javax.servlet.http.HttpServletRequest)mc.get(MessageContext.SERVLET_REQUEST)).getSession();
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6944 次 |
| 最近记录: |