java - soap fault example
¿Agregar fallas de jabón sin cambiar el archivo WSDL? (2)
Cuando arroje una excepción desde su código, JAX-WS lo mapeará automáticamente en una falla SOAP en la respuesta. No es necesario definir un error en su WSDL.
El uso de @WebFault
o la definición de un elemento <soap:fault>
en el archivo WSDL se utiliza para declarar que una operación específica puede devolver un error SOAP personalizado.
@WebFault
definitivamente agregará un elemento <soap:fault>
en el WSDL resultante.
Para recapitular, lanzar una excepción insertará un elemento en la respuesta de jabón.
Actualizar
Faultstring personalizado:
El mensaje de cadena que pasa como un parámetro al constructor Exception
representa el elemento faultstring en <soap:fault>
. Ejemplo:
throw new Exception("This is the faultstring text");
Fallo resultante en la respuesta de jabón:
<soap:fault>
<faultcode>soap:Server</faultcode>
<faultstring>This is the faultstring text</faultstring>
</soap:fault>
Código de falla personalizado:
No creo que puedas cambiar el código de falla con las excepciones normales de Java. Si realmente necesita hacer eso, puede echar un vistazo a JAX-WS SOAPFaultException .
Tenga en cuenta que los códigos de falla se utilizan para indicar el tipo de error producido, y la mayoría de las veces va a devolver un error de Servidor desde su servicio web.
Estos son los cuatro códigos de falla existentes en SOAP 1.1 y 1.2:
- VersionMismatch : se encontró un espacio de nombres no válido para el elemento SOAP Envelope.
- MustUnderstand : un elemento secundario inmediato del elemento Encabezado, con el atributo mustUnderstand establecido en "1", no se entendió.
- Cliente : el mensaje se formó incorrectamente o contenía información incorrecta.
- Servidor : Hubo un problema con el servidor por lo que el mensaje no pudo continuar.
Los primeros tres serán creados por JAX-WS al analizar la solicitud SOAP y, a menos que exista una situación muy específica o usted esté escribiendo sus propios manejadores / interceptores JAX-WS, no necesitará devolver ningún otro código de falla además del ''Servidor''.
Detalle personalizado:
El elemento <detail>
se rellenará con un elemento que representa la excepción. Por ejemplo, si está lanzando una new MyCustomException("custom message")
será algo como esto:
<detail>
<MyCustomException>
<message>custom message</message>
</MyCustomException>
</detail>
Me gustaría agregar algunas fallas SOAP a mi servicio web JAX-WS, pero me gustaría no cambiar el contenido del esquema WSDL. Por lo que he leído, tendría que usar la anotación @WebFault para definir SOAP Fault y automáticamente causa cambios en WSDL durante la siguiente compilación. ¿Hay alguna forma de usar Fallas SOAP sin cambiar el contenido del esquema WSDL?
Pon a prueba tu servicio web con Soap Ui. Acabo de probar el mío, usando un mensaje personalizado en la excepción y cuando veo la Respuesta de Soap Ui, veo que la Fault String tiene mi Mensaje personalizado.