我从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代码,您应该看到实际上确实抛出了扩展了AxisFault
的RemoteException
。关于java - 在WSDL文件中指定抛出AxisFault,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6251975/