Обрабатывать исключения во время выполнения в одном месте в веб-службе SOAP и выдавать Fault с пользовательской ошибкой - PullRequest
0 голосов
/ 19 ноября 2018

У меня есть SOAP служба (spring boot + CXF), и эта служба может выдавать неисправности.Теперь мой код выглядит следующим образом:

@Component
@Slf4j
public class MyEndpoint implements MessageExchangePortType {

    private final Void aVoid = new Void();

    @Override
    public SendRequestResponse sendRequest(SendRequestRequest request) throws MessageIsAlreadySentException{
        try {
            myHandler.request(...);
         } catch (MessageIdAlreadyExistsException e) {
            log.error(e.getMessage(), e);
            throw new MessageIsAlreadySentException(FaultString.MESSAGE_IS_ALREADY_SENT.getMessage(), aVoid);
        }
    }

Это мое исключение:

public class MessageIdAlreadyExistsException extends Exception {}

Я пересылаю это Исключение из глубины классов до самого верха, чтобы поймать его ибросьте другой, который находится в сигнатуре веб-метода:

} catch (MessageIdAlreadyExistsException e) {//my exception
                throw new MessageIsAlreadySentException(FaultString.MESSAGE_IS_ALREADY_SENT.getMessage(), aVoid); //web service exception
            }

Это исключение веб-службы:

@WebFault(name = "MessageIsAlreadySent", targetNamespace = "")
public class MessageIsAlreadySentException
    extends Exception
{

Исключения во рту - Checked, но мне нужен какой-то механизмкак весенний отдых.Я хочу выбросить RuntimeException из того места, где появляются эти исключения, и после этого я хочу обработать его в одном месте, установить мое сообщение и вернуться к клиенту.Как это:

  @ExceptionHandler(EmailSendException.class)
  protected ResponseEntity<RestResponse<Boolean>> handleEmailSendException(EmailSendException e) {
    ...
  }

Как я могу сделать это с помощью веб-службы SOPA?

...