我从WSDL文件生成Web服务。但是我需要在此文件中定义我在SkeletonInterface中的方法是否会出现“轴故障”异常。
像:

void method() throws AxisFault{....}


我可以用哪种方式做到这一点(在WSDL中)。

谢谢。

最佳答案

简而言之,对于您自己的应用程序错误,重用AxisFault是不好的做法。当我看到AxisFault时,它表示Axis自动生成代码内部发生故障。这可能包括包装在其中的异常。

首先,我想解决您的伪代码。

void method() throws AxisFault{....}


此伪代码表示您想要一个没有输入,没有输出但仍然有异常的方法。如果我以此为前提,那么就不建议您采用这种设计(我什至不确定是否可行)。如果您希望某些事件触发某些事件而没有输出,则空输出消息比异常更可取。异常仅应在异常情况发生时使用。

如果您将上述代码用作抽象示例,并且确实具有输入/输出,那么正确的方法是弥补自己的错误。使用自己的故障可以控制行为并更准确地描述故障原因。将来您可能还会需要几个故障,因此在这种情况下使用AxisFault不利。

<wsdl:definitions ...>
 ...
  <wsdl:message name="MyFault">
    <wsdl:part name="parameters" element="def:MyFault">
    </wsdl:part>
  </wsdl:message>

  <wsdl:portType name="MyPortType">
    <wsdl:operation name="doStuff">
      <wsdl:input message="tns:MyRequest">
    </wsdl:input>
      <wsdl:output message="tns:MyResponse">
    </wsdl:output>
      <wsdl:fault name="MyFault" message="tns:MyFault">
    </wsdl:fault>
    </wsdl:operation>
  </wsdl:portType>

  <wsdl:binding name="MyBinding" type="tns:MyPortType">
    <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
    <wsdl:operation name="doStuff">
      <soap:operation soapAction="namespace/operationName"/>
      <wsdl:input name="MyRequest">
        <soap:body use="literal"/>
      </wsdl:input>
      <wsdl:output name="MyResponse">
        <soap:body use="literal"/>
      </wsdl:output>
      <wsdl:fault name="MyFault">
    <soap:body use="literal"/>
      </wsdl:fault>
    </wsdl:operation>
  </wsdl:binding>

  ...
</wsdl:definitions>


就是说,AxisFault确实发生在Web服务操作调用中。对于您的客户存根代码,它应该抛出RemoteException。如果您查看一下autogen Stub代码,您应该看到实际上确实抛出了扩展了AxisFaultRemoteException

关于java - 在WSDL文件中指定抛出AxisFault,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6251975/

10-12 06:51