Указанный бросок AxisFault в файл WSDL - PullRequest
0 голосов
/ 06 июня 2011

Я создаю свой веб-сервис из файла WSDL. Но мне нужно определить в этом файле, что мои методы в SkeletonInterface thow Axis Fault Exception. Что-то вроде:

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

Каким образом я могу это сделать (в WSDL).

Спасибо.

Ответы [ 2 ]

1 голос
/ 06 июня 2011

Короче говоря, это плохая практика - повторно использовать 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.

0 голосов
/ 06 июня 2011

с ошибками

<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>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...