私は実際に Axis 2 を使用して Java で Web サービスを開発しています。私はサービスを POJO (Plain Old Java Object) として設計し、パブリック メソッドが例外をスローします。
public class MyService {
public Object myMethod() throws MyException {
[...]
}
}
次に、Axis2 ant タスクを使用して WSDL を生成しました。WSDL を使用してクライアント スタブを生成し、サービスをテストします。生成されたコードには、「MyExceptionException」とスタブ内の「myMethod」が含まれており、これをスローするように宣言されています。
public class MyServiceStub extends org.apache.axis2.client.Stub {
[...]
public MyServiceStub.MyMethodResponse myMethod(MyServiceStub.MyMethod myMethod)
throws java.rmi.RemoteException, MyExceptionException0 {
[...]
}
[...]
}
ただし、catch で囲まれたメソッドを呼び出すと、代わりに AxisFault を送信するサーバー (RemoteException のサブクラス) によって「MyExceptionException」が送信されることはありません。
問題はサーバー側にあると思いますが、どこにあるのかわかりません。このサービスは、Tomcat 5.5 サーバー上の axis2 webapp に aar ファイルとしてデプロイされます。services.xml は次のようになります。
<?xml version="1.0" encoding="UTF-8"?>
<service name="MyService" scope="application">
<description></description>
<messageReceivers>
<messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only"
class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"/>
<messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out"
class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>
</messageReceivers>
<parameter name="ServiceClass">MyService</parameter>
<parameter name="ServiceTCCL">composite</parameter>
</service>
動作が正常であれば、例外の使用を中止します (これは私のプロジェクトにとって重要ではありません) が、操作の入力と出力の宣言で Java2WSDL がカスタム <wsdl:fault> を生成し、WSDL2Java が例外クラス (スタブメソッドでスローするように宣言します)これが使用できない場合...