JAX-WS,WebServiceContext和Session

时间:2013-11-04 13:52:41

标签: java web-services

我可以在Web服务中使用WebServiceContext和方法getMessageContext()来获取用于保存的HttpSession对象并获取会话值吗?我试图在这样的Web服务中使用HttpSession:

@WebService
@SOAPBinding(style = SOAPBinding.Style.RPC, use = SOAPBinding.Use.LITERAL, parameterStyle = SOAPBinding.ParameterStyle.WRAPPED)
public class DummyWs {

    @Resource
    private WebServiceContext wsContext;

    @WebMethod(operationName = "sayHello")
    public String sayHello(@WebParam(name = "name") String name) {
        return "hello " + name;
    }

    @WebMethod(operationName="setValue")
    public void setValue(@WebParam(name = "value") String newValue) {
        MessageContext mc = wsContext.getMessageContext();
        HttpSession session = ((javax.servlet.http.HttpServletRequest)mc.get(MessageContext.SERVLET_REQUEST)).getSession();
        session.setAttribute("value", newValue);
    }

    @WebMethod(operationName="getValue")
    public String getValue() {
        MessageContext mc = wsContext.getMessageContext();
        HttpSession session = ((javax.servlet.http.HttpServletRequest)mc.get(MessageContext.SERVLET_REQUEST)).getSession();
        return (String)session.getValue("value");
    }

}

我看到其他使用@Stateful注释的示例,但我不使用它。是否有必要使用@Stateful注释?如果我不使用这个注释会发生什么?

1 个答案:

答案 0 :(得分:0)

您是否看到Reference Implementation邮政分发中包含的示例stateful

该示例使用Web服务实现中的注释com.sun.xml.ws.developer.Stateful存储对象的类com.sun.xml.ws.developer.StatefulWebServiceManager。由于Java Web服务需要无状态,我们需要 在客户端调用中保存持久存储中对象的内容。

另一方面,您应该更喜欢staless服务。失败处理,与事务语义的交互很简单。并且可重用性得到了增强。