Java Axis2-设置一个变量服务器端,并在以后使用它
我正在尝试使用Axis2和Tomcat7创建一个Web服务。除了我不了解以下行为外,一切正常: 我创建了一个包含2个操作的Web服务,一个设置一个int局部变量,另一个返回它,代码如下所示:Java Axis2-设置一个变量服务器端,并在以后使用它,java,web-services,tomcat7,axis2,Java,Web Services,Tomcat7,Axis2,我正在尝试使用Axis2和Tomcat7创建一个Web服务。除了我不了解以下行为外,一切正常: 我创建了一个包含2个操作的Web服务,一个设置一个int局部变量,另一个返回它,代码如下所示: package testServer; public class service { public int number; public void setNumber(int i){ this.number = i; } public int getNumber(){ retu
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());
}
}
客户端如下所示:
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。有人能给我解释一下吗?因为每次调用时,都会使用不同的类实例 在客户端中,您只有一个ServiceStub实例。但是服务器正在创建一个新的服务检查实例!!对于您提出的每个请求 这并不像您想象的那么糟糕,因为服务器并不真正知道请求来自哪里
为了得到2,您可以将变量设为静态,只是为了测试。真正的解决方案是调用您的服务器业务逻辑方法ejb、pojo,并让它们存储和检索值。如果您不是web交互的无状态特性的受害者,您需要从第一次调用传输回一些状态密钥,以便在第二次调用中使用。服务器代码需要该值并将其与状态值关联,Axis2中可能有一种方法可以自动完成此操作。谢谢!既然你提到了,这很有道理。