0

我可以在 Web 服务中使用 WebServiceContext 和方法 getMessageContext() 来获取 HttpSession 对象以进行保存并获取会话值吗?我试图在这样的网络服务中使用 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 注解吗?如果我不使用此注释会发生什么?

4

1 回答 1

0

您是否看到参考实施zip 分发stateful中包含的示例?

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

换句话说,您应该更喜欢过时的服务。故障处理,与事务语义的交互很简单。并且增强了可重用性。

于 2013-11-04T14:27:36.127 回答