我實際開發使用軸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