Как сопоставить исключение, генерируемое веб-службой с загрузочной пружиной, со сложной информацией об ошибках? - PullRequest
0 голосов
/ 28 июня 2019

Я реализую поставщика услуг для существующего WSDL с Spring Boot. WSDL определяет сервис с дополнительным сообщением об ошибке. Соответствующая информация об ошибке содержит некоторые детали, включая метку времени, класс вызывающего исключения и трассировку его стека, а также информацию, содержащуюся в исходном запросе. Все детали определены как элементы XML сами по себе.

Эта информация доступна во время выполнения, когда служба выполняется на сервере. Если возникает ошибка, выдается соответствующее исключение, которое содержит эту информацию.

При весенней загрузке можно настроить экземпляр org.springframework.ws.server.EndpointExceptionResolver сопоставить исключения с информацией о неисправностях. Однако, кажется, что во всех его реализующих классах возможно только добавить информационное сообщение об ошибке и код ошибки. Я не нашел способ добавить структурированный объект или лучше: объект, для которого определена сериализация JAXB.

Как это возможно?

1 Ответ

1 голос
/ 28 июня 2019

Конечно, это не проблема.

Одним из способов может быть создание пользовательского SoapFaultMappingExceptionResolver, который сопоставляет исключение с ошибкой:

public class DetailSoapFaultDefinitionExceptionResolver extends SoapFaultMappingExceptionResolver {

    private static final QName CODE = new QName("code");
    private static final QName DESCRIPTION = new QName("description");

    @Override
    protected void customizeFault(Object endpoint, Exception ex, SoapFault fault) {
        logger.warn("Exception processed ", ex);
        if (ex instanceof ServiceFaultException) {
            ServiceFault serviceFault = ((ServiceFaultException) ex).getServiceFault();
            SoapFaultDetail detail = fault.addFaultDetail();
            detail.addFaultDetailElement(CODE).addText(serviceFault.getCode());
            detail.addFaultDetailElement(DESCRIPTION).addText(serviceFault.getDescription());
        }
    }

}

Пожалуйста, найдите полный пример здесь:

https://memorynotfound.com/spring-ws-add-detail-soapfault-exception-handling/

...