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.
Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!
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.
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!