1

我是 Java EE 和 SOAP 的新手。我尝试创建一个简单的 Web 服务应用程序及其客户端(环境:NetBeans 7.2.1 IDE、GlassFish Server 3.1、Java 1.6)。

网络服务代码:

package simplews;

import javax.jws.*;

@WebService(serviceName = "SimpleWebService")
public class SimpleWebService {

    String something = null;

    @WebMethod(operationName = "setSomething")
    @Oneway
    public void setSomething(@WebParam(name = "smth") String smth) {
        something = smth;
    }

    @WebMethod(operationName = "getSomething")
    public String getSomething() {
        return something;
    }

}

客户端应用代码:

package simpleclientapp;

import simplews.*;

public class SimpleClientApp {

    public static void main(String[] args) {

        SimpleWebService_Service service = new SimpleWebService_Service();
        SimpleWebService port = service.getSimpleWebServicePort();

        port.setSomething("trololo");
        String smth = port.getSomething();

        System.out.println(smth);
    }
}

不幸的是,客户端应用程序打印出了null. 经过短暂的调查,我意识到,在服务器端SimpleWebService为每个客户端调用创建一个新对象(听起来像无状态方法)。

这里有什么问题?为什么每次调用的客户端端口不引用同一个 WS 对象?

4

2 回答 2

1

Web 服务本质上是无状态的。为了保持请求之间的状态,您必须保留数据(在文件、数据库等中)。

于 2012-12-03T14:06:51.893 回答
1

你是对的,JAX-WS Web 服务默认是无状态的,你不能依赖违反这个前提的东西。在存储这些值时采用不同的方法。如果您真的想按照帖子中的说明进行操作,可以阅读此文档Java TM API for XML Web Services (JAX-WS) Stateful Web Service with JAX-WS RI 。

于 2012-12-03T14:08:31.723 回答