Как установить SOAP XML ответ в HttpServletResponse при возникновении ошибки - PullRequest
0 голосов
/ 21 февраля 2020

Я ищу помощь. Я хочу иметь возможность вернуть сообщение XML SOAP в ответе моего сервлета. Я пытаюсь вернуть этот ответ во время процесса аутентификации в методе doFilter в классе, который расширяет класс GenericFilterBean.

К сожалению, на данный момент следующий код:

    try
    {
        //some logic that may throw AuthenticationException;
    }
    catch (final AuthenticationException authenticationException)
    {
        SecurityContextHolder.clearContext();
        HttpServletResponse httpResponse = WebUtils.getNativeResponse(response, HttpServletResponse.class);

        httpResponse.sendError(HttpServletResponse.SC_UNAUTHORIZED, "MSG");

    }

Возвращает JSON ответ:

 {
      "timestamp": "2020-02-21T15:09:28.689+0000",
      "status": 401,
      "error": "Unauthorized",
      "message": "MSG",
      "path": "/testPath"
    }

Это своего рода ожидаемое поведение по умолчанию.

Дело в том, что я использую метод POST для отправки моего SOAP сообщения. Ответное сообщение уже сгенерировано следующим распознавателем:

@Component
public class SomeResolver extends SoapFaultMappingExceptionResolver
{
    @Override
    protected SoapFaultDefinition getFaultDefinition(Object endpoint, Exception exception)
    {
        String defaultFaultCode = "SOME:CODE";
        final String nameSpaceUri = "somenamespace";
        final String localPart = exception instanceof BadCredentialsException ? "SOAP-MSG:TEST : "SOAP-MSG:SOMETHINGELSE;
        final QName faultCode = new QName(nameSpaceUri, localPart);

        SoapFaultDefinitionEditor editor = new SoapFaultDefinitionEditor();
        editor.setAsText("Test");

        return (SoapFaultDefinition) editor.getValue();
    }

Я знаю, что ответ должен установить тип содержимого ответа. Но я не знаю, как связать Resolver с телом ответа.

...