Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Axis2-设置一个变量服务器端,并在以后使用它_Java_Web Services_Tomcat7_Axis2 - Fatal编程技术网

Java Axis2-设置一个变量服务器端,并在以后使用它

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

我正在尝试使用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(){ 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中可能有一种方法可以自动完成此操作。谢谢!既然你提到了,这很有道理。