在轴对象中保留数据

时间:2015-10-03 02:41:04

标签: web-services tomcat soap axis

请原谅我,如果这是一个愚蠢的问题,我很遗憾有一个作业到期!我在tomcat下运行apache轴,需要部署一个简单的Web服务类,见下文。

我在/ tomcat / webapps / axis /文件夹中将下面的计数器文件安装为“MyCounter.jws”。 Tomcat找到它并生成相应的MyCounter.xml。我在XML文件上使用WSDL2Java,客户端调用似乎有效,但内部状态未保存:

每次从客户端调用MyCounter.call时,返回值始终为1.看起来构造函数总是在方法调用之前调用。我怎样才能使mycounter整数在请求中持续存在?

public class MyCounter
{
    int mycounter;

    public MyCounter()
    {
        mycounter = 0;
    }

    public int call()
    {
        mycounter++;
        return mycounter;
    }
}

1 个答案:

答案 0 :(得分:0)

我认为坚持可能是错误的词,我认为你的意思是每次调用服务时都不会实例化Java类。

请参阅:https://axis.apache.org/axis/java/user-guide.html#Scoped_Services

因此,您需要更改服务定义以实现此目的。

我不认为使用JWS文件您可以配置会话范围。正如文档所说: https://axis.apache.org/axis/java/user-guide.html#JWS_Java_Web_Service_Files_-_Instant_Deployment

引用:

  

重要提示:JWS Web服务旨在用于简单的Web服务。您   不能在页面中使用包,并且代码是在运行时编译的   在部署之前,您无法找到有关错误的时间。   生产质量Web服务应该使用带有自定义的Java类   部署。

因此,如果您想使用此类功能,则应考虑使用Axis提供的其他一些设置WebService的方法。 另外我强烈建议使用Axis2而不是Axis1: http://axis.apache.org/axis2/java/core/

Axis1可能非常复杂,需要设置WSDD文件。除了Axis1之外,不再积极开发/维护。