我正在使用java2wsd生成wsdl。我的班级是
public class REWS {...}。
我只是像这样添加了implements HttpSessionListener:
public class REWS implements HttpSessionListener {...}
我开始得到HttpSessionListener的NoClassDefFoundError错误。
我可以构建REWS类,但是一旦我想用java2wsdl生成存根,我就会得到NoClassDefFoundError。
如何告诉java2wsdl从/Tomcat/lib/servlet-api.jar中获取HttpSessionListener?如何包含servlet-api.jar
发布于 2013-01-22 20:19:19
这确实是一个糟糕的设计。
首先,让我们回顾一下接口的用途。接口在你的类中建立了一个强大的设计契约,比声明继承的方法“普通的旧方式”更强大。WSDL也定义了接口,即使java2wsdl在类上工作。
使用接口是因为它们是框架方法的参数,允许您为它们提供自己的契约实现。对于WSDL,这一点略有不同。WSDL是契约的,并且是自增强的。除了显式导入的XSD模式之外,WSDL中不再需要任何内容。
那么:为什么要实现HttpSessionListener呢?正如文档所述,当会话发生变化时,框架会激活一个正确注册的会话侦听器。这是您的可公开访问web服务的设计合同的一部分吗?绝对而不是!!
通过实现,您隐式地向公共导出了两个供内部使用的方法,因此您正在尝试(但永远不会成功)向您的公共服务声明另外两个处理会话更改的方法。这不仅是错误的,而且是不可能的,因为HttpSessionEvent根本不能导出到XSD!
建议书
不要在WS类上实现此接口。使用您的自定义实现作为类成员,并根据您的web服务的功能让它与您的WS类交互。我不是Tomcat方面的专家,但是web服务不使用会话和cookie,所以我怀疑您是否会在web服务中处理会话。
https://stackoverflow.com/questions/14458106
复制相似问题