example java web-services wsdl jax-ws soapfault

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.