В Spring WS, как я могу обработать исключение SaajSoapEnvelopeException и получить копию SOAP после исключения?

Это «После и только после» исключения, так как мне сказали, что это нужно сделать заранее, это удар по производительности, которого мы не хотим, потому что это будет для каждого вызова, а не только для исключения. Конечно, это имеет смысл, но я не понимаю, как это можно сделать ПОСЛЕ исключения.

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

Пока что у меня есть расширение MessageDispatcherServlet с переопределением метода doService(). Файл web.xml был обновлен, чтобы показать конфигурацию Dispatcher for Spring. В этом переопределении окружите вызов метода super с помощью try/catch, и вы поймаете исключение, но проблема здесь в том, что поток для HttpServletRequest уже закрыт, поэтому вы не можете получить SOAP отсюда, AFIK.

Другая проблема в том, что я не могу заставить диспетчера подключиться сюда. У меня есть ошибки Java, сгенерированные из нашего WSDL, который я хотел бы использовать, но я думаю, что есть проблема с проводными маршаллерами в классе, отличном от конечной точки. Возможно, что-то о пространстве имен? Наверное, мне нужно прочитать, как они работают.

Итог: возможно ли получить SOAP после исключения или можно ли предсказать, что будет исключение, чтобы я мог захватить его заранее? Кроме того, как я могу получить маршаллер сбоев в этом Dispatcher или мне придется создавать текстовую версию сбоя?

Я новичок в веб-сервисах, и то, что я знаю до сих пор, это в основном CXF. Пока я не очень впечатлен Spring WS. У них еще все впереди, ИМХО. Тот факт, что я не могу получить свой WSDL из службы из-за известной ошибки, связанной с тем, что ссылки XSD в WSDL не переименовываются должным образом, чтобы соответствовать bean-компоненту, особенно раздражает.


person user447607    schedule 20.10.2012    source источник


Ответы (1)


Пробовали ли вы EndpointExceptionResolver ? Например, я использовал его для перехвата и преобразования исключений аутентификации.

Вам, вероятно, понадобится EndpointInterceptor а также обернуть преобразователь исключений.

person evandongen    schedule 26.10.2012