我有一些 WSDL,需要从中生成 Web 服务实现。我正在使用 Eclipse 和 Axis1.4,并在 Weblogic9.2 上运行。
生成服务器存根很好,我已经实现了我需要的代码。但是,为了与我们正在模拟的现有实现兼容,我需要针对某些指定的错误条件返回 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 中使用它...