既存の WSDL から Java で Web サービスを構築しています。wsimport
ツールは、サービスのスキーマ内の要素にバインドされたすべての Java クラスを生成しました。特に、フォルト宣言は次のクラスを生成します。
@javax.xml.ws.WebFault(name = "Fault", targetNamespace = "http://my.company.com/service-1")
public class ServiceFault extends java.lang.Exception {
// constructors and faulInfo getter
}
ここで、このクラスを拡張したいので、さらに動作を追加できます。
public class MyServiceFault extends ServiceFault {
// some behavior
}
アプリケーションから のインスタンスをスローするとMyServiceFault
、これらのエラーが SOAP 応答で XML に適切にシリアル化されることが期待されます。しかし、代わりに、次のようなものが得られます。
<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
<env:Header/>
<env:Body>
<env:Fault>
<faultcode>env:Server</faultcode>
<faultstring>Some fault string.</faultstring>
</env:Fault>
</env:Body>
</env:Envelope>
つまり、 faultInfo 要素が完全に欠落しています。私の SOAP スタックはMyServiceFault
、サービスの障害を表す例外としてではなく、他の例外として扱います。
@WebFault
アノテーションが に継承されていないためだと最初は思いMyServiceFault
ましたが、このアノテーションを明示的に追加した後に再試行しましたが、成功しませんでした。
私がここで間違っていることは何か分かりますか?