我有一些WSDL,我需要從中生成一個Web服務實現。我使用Eclipse和Axis1.4,並運行在Weblogic9.2上。如何從Axis Web服務返回(自定義)SOAPFault?
生成服務器樁很好,我已經實現了我需要的代碼。然而,爲了與我們正在模擬的exise實現兼容,我需要爲某些指定的錯誤條件返回SOAP錯誤。
也就是說,我需要響應的SOAP體看起來像這個例子:
<soapenv:Body>
<soapenv:Fault>
<faultcode xmlns:ns1="foobar">ns1:1234</faultcode>
<faultstring>The supplied parameter name ABCD is not recognised.</faultstring>
<detail>
<FaultDetail>An error processing the web service [MyService]: Unknown parameter:ABCD</FaultDetail>
<ns2:hostname xmlns:ns2="http://xml.apache.org/axis/">planet</ns2:hostname>
</detail>
</soapenv:Fault>
</soapenv:Body>
從(多)谷歌搜索,我想我應該可以通過拋出一個SOAPFaultException做到這一點。但消息存根只會拋出java.rmi.RemoteException,所以我嘗試將SOAPFaultException傳遞給RemoteException。這給了我這樣的東西:
<soapenv:Body>
<soapenv:Fault>
<faultcode>soapenv:Server.userException</faultcode>
<faultstring>java.rmi.RemoteException: My remote exception; nested exception is:
javax.xml.rpc.soap.SOAPFaultException: soap fault string</faultstring>
<detail>
<ns1:hostname xmlns:ns1="http://xml.apache.org/axis/">myhostname</ns1:hostname>
</detail>
</soapenv:Fault>
</soapenv:Body>
......換句話說,它沒有導致SOAP錯誤。
我嘗試了很多其他的東西,我幾乎卡住了。那麼有人可以告訴我(理想情況下是一個例子),在我的環境中,如何返回一個SOAP錯誤響應和我可以指定的內容?
我並不喜歡使用Axis(但我比其他任何東西都有更多的經驗)。如果你建議一個替代方案,請注意我需要在Web服務方法中調用另一個(經過身份驗證的)Web服務,並且我只能使它在Axis1.4中工作......
謝謝。我設法錯過了這是一個SOAP錯誤。我不清楚如何在那裏獲取自己的信息,儘管據我所知,我只能在該方法中引發一個RemoteException - 因此我可以構建一個AxisException,但我不知道如何扔它....無論如何,關閉實驗一些。在Axis1時代,是的,我同意,但儘管玩了很多,但我從來沒有通過Axis2進行認證,我也找不到有關使用CXF提升SOAPFault的詳細信息。 Weblogic9.2(我堅持使用)是Java1.5,因此直接的JAX-WS選項也不存在。 – 2011-06-12 17:42:53
D'dh,從您的鏈接頁面:「public class AxisFault extends java.rmi.RemoteException」。我會去試驗... – 2011-06-12 17:43:55
實驗工作。用精心設計的XML爲細節投擲AxisFault完美運行。謝謝! – 2011-06-12 18:39:04