我实际上正在使用 Axis 2 在 Java 中开发 Web 服务。我将服务设计为 POJO(普通旧 Java 对象),并带有公共方法抛出异常:
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 包围的方法时,“MyExceptionException”永远不会被传输 AxisFault 的服务器传输(RemoteException 的子类)。
我认为问题出在服务器端,但找不到在哪里。该服务作为 aar 文件部署在 Tomcat 5.5 服务器上的axis2 webapp 中。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 生成一个异常类(并声明将其放入存根方法中)如果这不可用...