如何在`implements`的类上使用`java2wsdl`?

时间:2013-01-22 12:01:57

标签: java java2wsdl

我使用java2wsd生成wsdl。我的班级是

public class REWS {...}

我刚才添加了implements HttpSessionListener

public class REWS implements HttpSessionListener {...}

我开始收到NoClassDefFoundError的{​​{1}}错误。

我可以构建REWS类,但是一旦我想用HttpSessionListener生成存根,我就会得到java2wsdl

如何告诉NoClassDefFoundErrorjava2wsdl获取HttpSessionListener?如何加入/Tomcat/lib/servlet-api.jar

1 个答案:

答案 0 :(得分:2)

确实这是一个糟糕的设计。

首先,让我们回顾一下接口的用途。接口在你的班级中建立了一个强大的设计合同,比宣称继承的方法“简单的旧方法”更强大。 WSDL也定义了接口,即使java2wsdl适用于类。

您使用接口是因为它们是框架方法的参数,允许您为它们提供自己的合同实现。使用WSDL,它略有不同。 WSDL是 合同,并且是自供电的。除了显式导入的XSD架构外,您在WSDL中不需要任何其他内容。

那么:为什么要实现HttpSessionListener?如文档所述,当会话发生更改时,框架会激活正确注册的会话侦听器。这是您可公开访问的Web服务的设计合同的一部分吗?绝对 !!

通过实现,您隐式向公众导出两个供内部使用的方法,因此您尝试(但不会成功)向公共服务声明两个处理会话更改的方法。这不仅是错误的,而且是不可能的,因为HttpSessionEvent根本无法导出到XSD!

提案

不要在WS类上实现此接口。将您的自定义实现用作类成员,并根据您的Web服务的作用让它与您的WS类进行交互。我不是Tomcat的专家,但是Web服务不使用会话和cookie,所以我怀疑你是否会在Web服务中处理会话。