Как вернуть (пользовательский) Soapfault из веб -службы Axis?

StackOverflow https://stackoverflow.com/questions/6322944

Вопрос

У меня есть какой -то WSDL, из которого мне нужно генерировать реализацию веб -службы. Я использую Eclipse и Axis1.4 и работаю на Weblogic9.2.

Генерация заглушек сервера идет нормально, и я реализовал код, который мне нужен. Тем не менее, для совместимости с выплаченной реализацией, которую мы подражаем, мне нужно вернуть неисправности мыла для некоторых указанных условий ошибки.

То есть мне нужно мыло тело ответа, чтобы выглядеть как этот пример:

<soapenv:Body>
    <soapenv:Fault>
        <faultcode xmlns:ns1="foobar">ns1:1234</faultcode>
        <faultstring>The supplied parameter name ABCD is not recognised.</faultstring>
        <detail>
            <FaultDetail>An error processing the web service [MyService]: Unknown parameter:ABCD</FaultDetail>
            <ns2:hostname xmlns:ns2="http://xml.apache.org/axis/">planet</ns2:hostname>
        </detail>
    </soapenv:Fault>
</soapenv:Body>

Из (много) гуглирования, я думаю, я должен быть в состоянии сделать это, бросив мыло. Но заглушка сообщения бросает только java.rmi.remoteexception, поэтому я попытался передать Soapfaultexception в RemoteException. Это дает мне что -то вроде этого:

   <soapenv:Body>
      <soapenv:Fault>
         <faultcode>soapenv:Server.userException</faultcode>
         <faultstring>java.rmi.RemoteException: My remote exception; nested exception is: 
    javax.xml.rpc.soap.SOAPFaultException: soap fault string</faultstring>
         <detail>
            <ns1:hostname xmlns:ns1="http://xml.apache.org/axis/">myhostname</ns1:hostname>
         </detail>
      </soapenv:Fault>
   </soapenv:Body>

... Другими словами, это не привело к мылу.

Я пробовал много других вещей, и я в значительной степени застрял. Так может ли кто -нибудь сказать мне (в идеале с примером), как вернуть ответ на разлову мыла с помощью контента, который я могу указать, в моей среде?

Я не приговорен к использованию оси (но у меня больше опыта с этим, чем с чем -либо еще). Если вы предлагаете альтернативу, обратите внимание, что мне нужна в методе веб -службы, чтобы вызвать еще один (аутентифицированный) веб -сервис, и я смог заставить это работать только в Axis1.4 ...

Это было полезно?

Решение

Ваш второй код пост - ошибка мыла (обратите внимание на soapenv:Fault внутри soapenv:Body).

По сути, все поведение по умолчанию Frameworks заключается в том, чтобы вернуть стандартную ошибку SOAP и предоставить вам возможность ввести свою собственную информацию в код неисправности, строки неисправности и детали неисправности.

Смотрите документы на исключении оси 1: http://ws.apache.org/axis/java/apidocs/org/apache/axis/axisfault.html

У него есть конструкторы для установки Qname различных полей, поэтому вы должны быть в состоянии ссылаться на свои собственные элементы там.

Многие люди будут использовать поле детализации неисправности и сериализовать свой собственный XML -тип внутри него с помощью DOM.

Последнее, но не менее важное время Axis1 было около 2000-2004 годов, вам будет трудно получить ответы и поддержку вокруг него. Большинство людей переехали с Axis1 Apache CXF, Axis2, или просто прямо
JAX-WS (теперь включен в JDK6+). Есть также Весенние веб -сервисы Проект, который обеспечивает полную настройку всех поведений в стеке (Marshalling, который выполняется Бин и т. Д.).

Лишь все эти фреймворки используют WSS4J для безопасности веб -службы и могут поддерживать стандартный токен имени пользователя, x509 Токен и т. Д. Тем не менее, как только вы получите основные сообщения, передаваемые туда-сюда, вам, вероятно, придется пройти через детали WS-Security.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top