我实际开发使用轴2 在Java Web服务我设计的公共方法抛出异常服务为POJO(普通Java对象):Web服务引发异常
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 {
[...]
}
[...]
}
但主叫通过钳位包围的方法时,“MyExceptionException”从不通过发送服务器发送而不是AxisFault(RemoteException的子类)。
我认为问题是服务器端,但没有找到在哪里。该服务被部署为tomcat 5.5服务器上的axis2 webapp中的aar文件。中声明。看起来是这样的:
<?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:错误>在操作输入&输出声明和WSDL2Java生成一个Exception类(并声明将它扔在存根方法),如果这是不可用的...
在服务器端生成的代码,它产生AxisFault并添加到SOAP上下文org.apache.axis2.Constants.FAULT_NAME来映射WSDL中的自定义错误... – Vinze 2009-01-13 14:04:33
在客户端存根中,问题似乎是org.apache.axiom.om.OMElement faultElt = f.getDetail();返回null ...所以存根无法将轴故障映射到自定义java异常(它是从WSDL生成的)... – Vinze 2009-01-13 14:05:47
对我来说看起来像一个bug。如果一个方法明确声明了它的异常,那么这些异常应该被序列化并相应地传输。即使eclipse轴web服务客户端生成器也会在客户端生成异常类。 IMO – 2014-01-15 18:09:42