我是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对象?
答案 0 :(得分:1)
Web services are stateless by nature。为了在请求之间保持状态,您必须保留数据(在文件,数据库等中)。
答案 1 :(得分:1)
你是对的,JAX-WS Web服务默认是无状态的,你不能依赖于违反这个前提的东西。在存储这些值时遵循不同的方法。如果您真的想按照帖子中的说明进行操作,可以阅读此文档Java TM API for XML Web Services (JAX-WS) Stateful Web Service with JAX-WS RI。