1
resposta

É possível setar o Status HTTP do fault?

Boa noite, Por padrão, ao lançar exceção, o SOAP envia o HTTP status 500. É possível customizar este Status de alguma forma antes de enviar ao cliente? Obrigado.

1 resposta

Olá Rafael, tudo bem?

Sim, é possível customizar o status HTTP do fault no JAX-WS. Para fazer isso, você pode utilizar a classe javax.xml.ws.soap.SOAPFaultException para criar uma exceção personalizada com o status desejado.

Por exemplo, se você deseja enviar um status HTTP 400 (Bad Request), você pode fazer o seguinte:

import javax.xml.ws.soap.SOAPFaultException;
import javax.xml.soap.SOAPFault;
import javax.xml.namespace.QName;

...

try {
    // Seu código que pode lançar uma exceção
} catch (Exception e) {
    SOAPFaultException soapFaultException = new SOAPFaultException(
        createSOAPFault("Sua mensagem de erro aqui", "400")
    );
    throw soapFaultException;
}

...

private SOAPFault createSOAPFault(String errorMessage, String statusCode) {
    try {
        SOAPFactory soapFactory = SOAPFactory.newInstance();
        SOAPFault soapFault = soapFactory.createFault();
        soapFault.setFaultString(errorMessage);
        soapFault.setFaultCode(new QName("http://schemas.xmlsoap.org/soap/envelope/", "Client"));
        soapFault.addFaultReasonText(errorMessage);

        // Definindo o status HTTP customizado
        soapFault.addFaultReasonText("HTTP Status: " + statusCode, "en");

        return soapFault;
    } catch (SOAPException e) {
        throw new RuntimeException("Erro ao criar SOAPFault", e);
    }
}

Dessa forma, você pode personalizar o status HTTP do fault de acordo com suas necessidades.

Espero ter ajudado e bons estudos!