2015-01-26 7 views
1

В процессе перехода к Spring WS и использования JAXB из wsdl для генерации объектов, используемых в сообщении Soap. У меня возникла проблема с попыткой получить пользовательское исключение в поле сведений сообщения Soap Fault. Ниже описано, как возвращается существующее сообщение о неисправности (подробно описано в FooException).Ошибка мыла. Нестандартное исключение

<env:Envelope xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <env:Header/> 
    <env:Body> 
     <env:Fault> 
     <faultcode>env:Server</faultcode> 
     <faultstring>Service specific exception: com.test.FooException: Invalid authentication credentials. Please try again.</faultstring> 
     <detail> 
      <n1:FooException xsi:type="n1:FooException" xmlns:n1="java:com.test"> 
       <errorCode xsi:type="xsd:int">101</errorCode> 
       <errorReason xsi:type="xsd:string">InvalidUserCredentials:Invalid authentication credentials. Please try again</errorReason> 
      </n1:FooException> 
     </detail> 
     </env:Fault> 
    </env:Body> 
</env:Envelope> 

У меня настроен идентификатор компонента exceptionResolver клиента в файле конфигурации Spring Spring.

<bean id="exceptionResolver" class="com.test.FacadeExceptionHandler"> 
     <property name="order" value="1"></property> 
     <property name="defaultFault" value="SERVER"/> 
     <property name="exceptionMappings"> 
      <value> com.test.FooException=SERVER,FaultMsg </value> 
     </property> 
    </bean> 

Я создал FacadeExceptionHandler и он вызывался, но я не могу понять, как получить FooException в детали части сообщения об ошибке.

Любая помощь будет оценена!

Заранее благодарим за вашу помощь!

+0

Покажите нам реализацию 'FooException' – kolossus

ответ

0

Я думаю, вы почти получить все это, в вашем FacadeExceptionHandler вы должны переопределить метод customizeFault (doc), а затем добавить деталь для ошибки (у вас есть ваш Exception в качестве параметра там).

Все это пользовательские обработки сообщений SOAP Fault подробно объясняется подробно в этой записи: http://www.stevideter.com/2009/02/18/of-exceptionresolvers-and-xmlbeans/

0

Вы не можете вернуться к вине клиента SOAP с такой глубиной вложенности элементов в <detail> элемента причины весной WS SoapFault имеет список SoapFaultDetail, в котором есть список SoapFaultDetailElement, но SoapFaultDetailElement - это просто сообщение о подробностях в String. Таким образом, весной WS max глубина SOAP Fault составляет один.

<SOAP-ENV:Fault> 
    <faultcode>SOAP-ENV:Client</faultcode> 
    <faultstring>Сообщение не соответствуют схеме сервиса СМЭВ.</faultstring> 
    <detail> 
     <InvalidContent xmlns="urn://x-artefacts-smev-gov-ru/services/message-exchange/types/faults/1.1">cvc-complex-type.2.4.a: Invalid content was found starting with element 'ns:SenderProvidedRequestData1'. One of '{"urn://x-artefacts-smev-gov-ru/services/message-exchange/types/1.1":SenderProvidedRequestData}' is expected.</InvalidContent> 
     <InvalidContent xmlns="urn://x-artefacts-smev-gov-ru/services/message-exchange/types/faults/1.1">cvc-complex-type.2.3: Element 'ns:CallerInformationSystemSignature' cannot have character [children], because the type's content type is element-only.</InvalidContent> 
     <InvalidContent xmlns="urn://x-artefacts-smev-gov-ru/services/message-exchange/types/faults/1.1">cvc-complex-type.2.4.b: The content of element 'ns:CallerInformationSystemSignature' is not complete. One of '{WC["http://www.w3.org/2000/09/xmldsig#"]}' is expected.</InvalidContent> 
    </detail> 
    </SOAP-ENV:Fault> 
Смежные вопросы