有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

WSDL文件中的java指定错误

我从WSDL文件生成web服务。但我需要在这个文件中定义,我的方法在SkeletonInterface中有一个轴故障异常。 例如:

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

我可以通过这种方式(在WSDL中)实现这一点

谢谢


共 (2) 个答案

  1. # 1 楼答案

    简而言之,对于自己的应用程序错误,重用AxisFault是不好的做法。当我看到AxisFault时,它表示Axis autogen代码内部的某个东西失败了。这可能包括包装在其中的异常

    首先,我想谈谈你的伪代码

    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存根代码,你会发现它实际上抛出了一个扩展RemoteExceptionAxisFault

  2. # 2 楼答案

    利用故障

    <definitions ...>
    
      <message name="empty"/>
      <message name="InsufficientFundsFault">
        <part name="balance" type="xsd:int"/>
      </message>
    
      <portType name="Bank">
        <operation name="throwException">
          <input message="tns:empty"/>
          <output message="tns:empty"/>
          <fault name="fault" message="tns:InsufficientFundFault"/>
        </operation>
      </portType>
      ...
    </definitions>