2010-11-17 3 views
7

В настоящее время у меня возникает проблема с кодами ошибок и сообщениями с использованием Spring WS.Как преобразовать исключения в коды возврата с помощью Spring-WS?

Мы используем Spring WS 2.0 с привязкой JAXB2 и аннотами @Endpoint и @PayloadRoot для удобства.

Наша конечная точка выглядит следующим образом:

@Endpoint 
public class MyEndpoint() { 
    private static final String MY_NAMESPACE=...; 

    @PayloadRoot(namespace=MY_NAMESPACE, localPart="myPart") 
    public MyPartResponse handleMyPart(MyPart myPart) { 
     .... 
    } 
} 

Мы используем мыло только в виде тонкой оболочки вокруг сообщения ЧО, определяемом XSD. Это также означает, что вместо ошибок мы используем коды возврата и сообщения.

Каждый ответ наследует от

<xs:complexType name="ResultBase"> 
    <xs:sequence> 
     <xs:element name="errorCode" type="tns:ErrorCode" /> 
     <xs:element name="errorMessage" type="xs:string" /> 
    </xs:sequence> 
</xs:complexType> 

и добавляет некоторые особенности в случае успеха, как это:

<xs:element name="MySpecificResponse"> 
    <xs:complexType> 
     <xs:complexContent> 
      <xs:extension base="tns:ResultBase"> 
       <xs:sequence> 
        <xs:element name="mySpecificElement" type="tns:MySpecificType" /> 
       </xs:sequence> 
      </xs:extension> 
     </xs:complexContent> 
    </xs:complexType> 
</xs:element> 

Все исключения бросают внутри handleMyPart метод может быть чисто отображенной.

Однако два типа ошибок остается неперехваченным и генерировать ошибки, а не четкое сообщение об ошибке:

  • XSD Validations Ошибке
  • Искаженных XML Ошибок

В конце дня, это проблемы, которые имеют отношение к каждому веб-сервису POX, используя Spring WS. Как следует перехватывать эти исключения и отображать затем объект ответа?

Помните: все объекты отклика немного отличаются от, поскольку все они наследуются от общего, но добавляют к нему уникальный дополнительный дополнительный контент.

+0

Я просто поднял функция запроса на Спринг-WS Jira: HTTPS://jira.springframework.org/browse/SWS-657 –

ответ

4

Один подход, который работал хорошо для меня это:

Для проверки ошибок XSD, расширить AbstractValidatingInterceptor обеспечить пользовательскую обработку ошибок проверки XSD, и установить его в качестве компонента validatingInterceptor в контексте Spring.

Для искаженного XML расширьте MessageDispatcherServlet. Переопределите doService, чтобы поймать DomPoxMessageException и добавьте свою собственную настраиваемую обработку, когда вы поймаете это исключение. Задайте свой настроенный MessageDispatcherServlet в качестве сервлета spring-ws в web.xml.

Я написал это с информацией об объявлении в моем тошноты блоге здесь:

http://www.dev-garden.org/2011/09/03/handling-pox-errors-in-spring-ws-part-1/

-Larry

 Смежные вопросы

  • Нет связанных вопросов^_^