0

我正在使用java2wsd. 我的课是

public class REWS {...}.

我只是implements HttpSessionListener这样添加:

public class REWS implements HttpSessionListener {...}

我开始收到NoClassDefFoundError错误HttpSessionListener

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

我如何java2wsdl告诉HttpSessionListener取自/Tomcat/lib/servlet-api.jar?我如何包含servlet-api.jar

4

1 回答 1

2

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

首先,让我们回顾一下接口的用途。接口在您的类中建立了强大的设计契约,比将继承的方法声明为“普通的旧方式”更强大。WSDL 也定义了接口,即使java2wsdl适用于类。

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

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

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

提案

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

于 2013-01-22T12:19:18.953 回答