我正在尝试使用Axis2和Tomcat 7创建Web服务。除非我不理解以下行为,否则一切都很好:
我创建了一个包含2个操作的Web服务,一个设置了一个int局部变量,另一个返回它,代码如下所示:
package testServer;
public class service {
public int number;
public void setNumber(int i){ this.number = i; }
public int getNumber(){ return this.number; }
}
客户端看起来像这样:
package testserver;
import java.rmi.RemoteException;
import testserver.ServiceStub;
import testserver.ServiceStub.*;
public class CallService {
public CallService(){};
public void call() throws RemoteException{
ServiceStub s = new ServiceStub();
ServiceStub.SetNumber params = new ServiceStub.SetNumber();
params.setI(2);
s.setNumber(params);
ServiceStub.GetNumber n = new ServiceStub.GetNumber();
ServiceStub.GetNumberResponse r = s.getNumber(n);
System.out.println("number is: " + r.get_return());
}
}
现在,我希望得到一个“数字是:2”,但我得到一个“数字是:0”。有人可以向我解释一下吗?
答案 0 :(得分:0)
因为在每次调用时都会使用该类的不同实例。
在客户端中,您只有ServiceStub
个实例。但服务器正在为您提出的每个请求创建Service
的新实例(检查CAPITALIZATION !!)。
这并不像你想象的那么糟糕,认为服务器并不真正知道请求的来源。
要获得2
,您可以创建变量static
,仅用于测试。 “真正的”解决方案是调用服务器业务逻辑方法(EJB,POJO)并让它们存储和检索值。