0

を使用して wsdl を生成してjava2wsdいます。私のクラスは

public class REWS {...}.

私は次のように追加しましimplements HttpSessionListenerた:

public class REWS implements HttpSessionListener {...}

NoClassDefFoundErrorのエラーが発生し始めましたHttpSessionListener

REWS クラスをビルドすることはできますが、一度スタブを生成したい場合java2wsdlは get を使用しますNoClassDefFoundError

からjava2wsdl取るように言う方法は? を含めるにはどうすればよいですか?HttpSessionListener/Tomcat/lib/servlet-api.jarservlet-api.jar

4

1 に答える 1

2

それは確かに悪いデザインです。

まず、インターフェースの目的を思い出してみましょう。インターフェースは、継承されたメソッドを「昔ながらの方法」で宣言するよりも強力な、クラス内の強力な設計コントラクトを確立します。java2wsdlクラスで機能する場合でも、WSDLはインターフェースも定義します。

インターフェイスはフレームワークメソッドのパラメータであり、独自のコントラクトの実装を提供できるため、インターフェイスを使用します。WSDLの場合、それはわずかに異なります。WSDLはコントラクトであり、セルフパワーです。明示的にインポートされたXSDスキーマを除いて、WSDLにはこれ以上何も必要ありません。

だから:なぜ1つは実装するのHttpSessionListenerですか?ドキュメントに記載されているように、適切に登録されたセッションリスナーは、セッションが変更されたときにフレームワークによってアクティブ化されます。これは、公的にアクセス可能なWebサービスの設計契約の一部ですか?絶対にありません!!

実装することにより、内部で使用する2つのメソッドを暗黙的にパブリックにエクスポートするため、セッションの変更を処理する2つの追加メソッドをパブリックサービスに宣言しようとしています(ただし、成功することはありません)。これは間違っているHttpSessionEventだけでなく、XSDにエクスポートできないため不可能です。

提案

このインターフェースをWSクラスに実装しないでください。カスタム実装をクラスメンバーとして使用し、Webサービスの動作に応じてWSクラスと相互作用させます。私はTomcatの専門家ではありませんが、WebサービスはセッションとCookieを使用しないため、Webサービスでセッションを処理することはないと思います。

于 2013-01-22T12:19:18.953 に答える