Axis2 - 设置变量服务器端,稍后使用它

时间:2014-12-01 00:22:38

标签: java web-services tomcat7 axis2

我正在尝试使用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”。有人可以向我解释一下吗?

1 个答案:

答案 0 :(得分:0)

因为在每次调用时都会使用该类的不同实例。

在客户端中,您只有ServiceStub个实例。但服务器正在为您提出的每个请求创建Service的新实例(检查CAPITALIZATION !!)。

这并不像你想象的那么糟糕,认为服务器并不真正知道请求的来源。

要获得2,您可以创建变量static,仅用于测试。 “真正的”解决方案是调用服务器业务逻辑方法(EJB,POJO)并让它们存储和检索值。