请原谅我,如果这是一个愚蠢的问题,我很遗憾有一个作业到期!我在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;
}
}
答案 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之外,不再积极开发/维护。