Короче говоря, это плохая практика - повторно использовать 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
действительно происходит для вызовов операций веб-службы. Для вашего клиентского заглушки код должен выдать RemoteException
. Если вы посмотрите на свой код заглушки автогена, вы увидите, что на самом деле выдает AxisFault
, который расширяет RemoteException
.