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

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

Создание заглушек сервера проходит нормально, и я реализовал необходимый мне код. Однако для совместимости с существующей реализацией, которую мы эмулируем, мне нужно возвращать ошибки SOAP для некоторых указанных условий ошибки.

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

<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>

From (much ) googling, я думаю, что смогу сделать это, выбросив SOAPFaultException. Но заглушка сообщения кидает только 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>

... другими словами, это не привело к ошибке SOAP.

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

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

6
задан The Archetypal Paul 12 June 2011 в 16:01
поделиться