2017-03-05 120 views
0

我在netbeans中创建了一个JAVA Web服务和一个客户端应用程序。客户端应用程序通过普通的WebMethods连接到Web服务。我想知道如何使用会话连接到Web服务。也请告诉您是否有更好的方法从客户端应用程序访问Web服务,而不是仅仅为每个请求调用Web方法?如何在JAVA中使用会话进行JAX-WS Web服务

回答

0
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); 
} 
}