如何从Axis Web服务返回(自定义)SOAPFault?

| 我有一些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中使它起作用。     
已邀请:
        您的第二篇代码文章是SOAP错误(请注意
soapenv:Body
中的
soapenv:Fault
)。 基本上,所有框架的默认行为都是返回标准SOAP错误,并使您能够在错误代码,错误字符串和错误详细信息字段中输入自己的信息。 请参阅有关Axis 1异常的文档:http://ws.apache.org/axis/java/apiDocs/org/apache/axis/AxisFault.html 它具有用于设置各个字段的qname的构造函数,因此您应该能够在其中引用自己的项目。 许多人将使用故障详细信息字段,并使用DOM在其中将自己的XML类型序列化。 最后但并非最不重要的一点是,Axis1的黄金时段大约是2000-2004年,您会发现很难获得答案和支持。大多数人已经从Axis1迁移到Apache CXF,Axis2或刚起步 JAX-WS(现已包含在JDK6 +中)。还有一个Spring Web Services项目,它提供了堆栈中所有行为(编组,执行哪个bean等)的完全自定义。 只是所有这些框架都使用WSS4J来确保其Web服务的安全性,并且可以支持标准的用户名令牌,x509令牌等。不过,一旦获得来回传递的基本消息,您可能将不得不通过WS-Security的详细信息。     

要回复问题请先登录注册