我使用java2wsd
生成wsdl。我的班级是
public class REWS {...}
。
我刚才添加了implements HttpSessionListener
:
public class REWS implements HttpSessionListener {...}
我开始收到NoClassDefFoundError
的{{1}}错误。
我可以构建REWS类,但是一旦我想用HttpSessionListener
生成存根,我就会得到java2wsdl
。
如何告诉NoClassDefFoundError
从java2wsdl
获取HttpSessionListener
?如何加入/Tomcat/lib/servlet-api.jar
?
答案 0 :(得分:2)
确实这是一个糟糕的设计。
首先,让我们回顾一下接口的用途。接口在你的班级中建立了一个强大的设计合同,比宣称继承的方法“简单的旧方法”更强大。 WSDL也定义了接口,即使java2wsdl
适用于类。
您使用接口是因为它们是框架方法的参数,允许您为它们提供自己的合同实现。使用WSDL,它略有不同。 WSDL是 合同,并且是自供电的。除了显式导入的XSD架构外,您在WSDL中不需要任何其他内容。
那么:为什么要实现HttpSessionListener
?如文档所述,当会话发生更改时,框架会激活正确注册的会话侦听器。这是您可公开访问的Web服务的设计合同的一部分吗?绝对不 !!
通过实现,您隐式向公众导出两个供内部使用的方法,因此您尝试(但不会成功)向公共服务声明两个处理会话更改的方法。这不仅是错误的,而且是不可能的,因为HttpSessionEvent
根本无法导出到XSD!
不要在WS类上实现此接口。将您的自定义实现用作类成员,并根据您的Web服务的作用让它与您的WS类进行交互。我不是Tomcat的专家,但是Web服务不使用会话和cookie,所以我怀疑你是否会在Web服务中处理会话。