2012-04-25 13 views
3

は、私はこのような例外の階層があるとします。Webサービス・インターフェースでメソッド宣言の例外。 JAXB

public class A extends RuntimeException { 
... 
} 

public class B extends A { 
... 
} 

方法がある。この方法の

public void aa() throws A; 

実装は、いずれかの例外Aまたは例外Bを投げるが、デプロイ時にすることができますtomcat cxfはA例外宣言のみでwsdlを公開します。

私は親クラスに@XmlSeeAlsoで親クラスの両方のクラスの両方のクラスに@XmlRootElement@XmlType@XmlRootElement@XmlRootElementを使用しようとしましたが、B例外宣言を持たないWSDLを公開しています。また、私はそのwsdlを使用してテストを書いて、テストは例外を取得しますが、私は両方のタイプの例外をエミュレートしました。 wsdl宣言で子例外を取得するにはどうすればよいですか?

答えて

2

Bの両方をaaからスローされた例外としてリストする必要があると思います。そうしないと、派生クラスの例外をスローする可能性があります。試してください:

public void aa() throws A, B; 
+0

「スロー」で例外の階層を宣言するのは非常に快適な方法ではありません。たぶん、いくつかのインターセプターを書くことによって行うことができますか?つまり、メソッドに例外Aの宣言がある場合(例えば)、インターセプタは例外Aを継承するすべての例外を追加する必要があります。 – maks

+0

あなたは確かにインセプタを書くことができますが、JAXBContextはそれを知っている限り派生クラスについても(@ XmlSeeはあなたのためにしておくべきです)。あなたは他の技術も見てみたいです:[1](http://stackoverflow.com/questions/6469599/using-derived-classes-when-marshelling-with-jaxb)、[2](http ://stackoverflow.com/questions/8318231/xmlseealso-ternative)、[3](http://blog.bdoughan.com/2010/11/jaxb-and-inheritance-using-substitution.html)、[4] (http://blog.bdoughan.com/2010/11/jaxb-and-inheritance-moxy-extension.html) – Attila

関連する問題