Posts Tagged JaxWs

How to Implement Session in JAXWS

Server

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


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

the output for the client is 1 and 2 as expected

Comments (1)