Как вернуть (пользовательский) Soapfault из веб -службы Axis?
-
27-10-2019 - |
Вопрос
У меня есть какой -то 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.