0
我在netbeans中创建了一个JAVA Web服务和一个客户端应用程序。客户端应用程序通过普通的WebMethods连接到Web服务。我想知道如何使用会话连接到Web服务。也请告诉您是否有更好的方法从客户端应用程序访问Web服务,而不是仅仅为每个请求调用Web方法?如何在JAVA中使用会话进行JAX-WS Web服务
我在netbeans中创建了一个JAVA Web服务和一个客户端应用程序。客户端应用程序通过普通的WebMethods连接到Web服务。我想知道如何使用会话连接到Web服务。也请告诉您是否有更好的方法从客户端应用程序访问Web服务,而不是仅仅为每个请求调用Web方法?如何在JAVA中使用会话进行JAX-WS Web服务
Below is code example that shows, how to implement session in JAXWS
/* server code */
package com.foo.ws.session;
import javax.annotation.Resource;
import javax.jws.WebService;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import javax.xml.ws.WebServiceContext;
import javax.xml.ws.WebServiceException;
import javax.xml.ws.handler.MessageContext;
@WebServicepublic class Hello {
//webServiceContext is injected by the JAXWS API
@Resource private WebServiceContext wsContext;
@WebMethod public int getCounter(){
MessageContext mc = wsContext.getMessageContext();
HttpSession session = (HttpServletRequest)mc.get(MessageContext.SERVLET_REQUEST)).getSession();
// Get a session property "counter" from context
if (session == null)
throw new WebServiceException("No session in WebServiceContext");
Integer counter = (Integer)session.getAttribute("counter");
if (counter == null) {
counter = new Integer(0);
System.out.println("Starting the Session");
}
counter = new Integer(counter.intValue() + 1);
session.setAttribute("counter", counter);
return counter;
}
}
/* client code*/
package com.foo.ws.session.client;
import java.util.Map;
import javax.xml.ws.BindingProvider;
public class ClientMain {
public static void main(String[] args) {
Hello proxy = new HelloService().getHelloPort();
//setting requestContext so that session could be maintained through client and server
Map requestContext = ((BindingProvider)proxy).getRequestContext();
requestContext.put(BindingProvider.SESSION_MAINTAIN_PROPERTY,true);
int result = proxy.getCounter();
System.out.println(result);
result = proxy.getCounter();
System.out.println(result);
}
}