我可以在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注释?如果我不使用这个注释会发生什么?
答案 0 :(得分:0)
您是否看到Reference Implementation邮政分发中包含的示例stateful
?
该示例使用Web服务实现中的注释com.sun.xml.ws.developer.Stateful
和存储对象的类com.sun.xml.ws.developer.StatefulWebServiceManager
。由于Java Web服务需要无状态,我们需要
在客户端调用中保存持久存储中对象的内容。
另一方面,您应该更喜欢staless服务。失败处理,与事务语义的交互很简单。并且可重用性得到了增强。