2016-12-28 21 views
0

Потребитель для одного из моих веб-служб SOAP не может прочитать ошибки SOAP (проверки схемы), и поэтому он хочет, чтобы мы отправили ответ «Ok = false» вместо сообщения об ошибке проверки схемы.Можно ли отправить ответ «False» от Interceptors в Apache CXF и Spring SOAP WS?

Я не уверен, что мы каким-либо образом можем настроить перехватчики, чтобы генерировать ложный ответ вместо SOAP Faults.

Я использую перехватчик для генерации ошибки на сегодняшний день, как показано ниже

@org.apache.cxf.interceptor.InInterceptors(interceptors = {"com.xxx.piano.services.interceptors.RequestParserInterceptor", 
    "com.xxx.piano.services.interceptors.RequestInterceptor"}) 
@SchemaValidation(type = SchemaValidation.SchemaValidationType.IN) 
@org.apache.cxf.interceptor.OutFaultInterceptors(classes = RequestParsingValidator.class) 

На сегодняшний день я получаю ошибку, как показано ниже

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
<soap:Body> 
    <soap:Fault> 
    <faultcode>soap:Server</faultcode> 
    <faultstring>[City is empty !] </faultstring> 
    </soap:Fault> 
</soap:Body> 
</soap:Envelope> 

В то время как я хочу что-то, как показано ниже:

<ns3:XXXServiceTypeResponse> 
     <OK>false</OK> 
     <Error> 
      <Message>Duplicate Product Individual Identifier.</Message> 
      <TechnicalDescription>Postal Code Missing</TechnicalDescription> 
      <ErrorCode>E0022</ErrorCode> 
     </Error> 
     <ns3:ResponseID>01202662-0010-0001-0001-4617844469</ns3:ResponseID> 
    </ns3:XXXServiceTypeResponse> 

Пожалуйста, помогите.

ответ

0

С перехватчиком можно настроить ответ, но я не рекомендую возвращать сообщение, которое отсутствует в WSDL, который является договором между клиентом и сервером.

Вместо этого повышается, что ответы содержат коды ошибок вместо генерирования мыльных ошибок. Таким образом, ваш клиент также сможет автоматически генерировать код для своего языка программирования.

Каждое сообщение имеет статус (ОК), сведения об ошибках, и обычный ответ, если статус является правильным

<ns3:XXXServiceTypeResponse> 
     <OK>false</OK> 
     <Error> 
      <Message>Duplicate Product Individual Identifier.</Message> 
      <TechnicalDescription>Postal Code Missing</TechnicalDescription> 
      <ErrorCode>E0022</ErrorCode> 
     </Error> 
     <ns3:ResponseID>01202662-0010-0001-0001-4617844469</ns3:ResponseID> 
     <ns3:ResponseIfOk /> 
    </ns3:XXXServiceTypeResponse> 
+0

Не уверен, что, если я правильно понял @pedrofb. Вы имели в виду, что мы должны попытаться преобразовать ошибки в объект ответа. Но потребитель здесь не может разобрать ошибки в моем случае. :( –

+0

Уверен, что мой английский не слишком хорош. Я предлагаю не использовать ошибки и изменять объектную модель. Вместо того, чтобы поднимать ошибку в логике вашей логики, поймайте исключение и верните код ошибки в качестве атрибута возвращаемого объекта. Включите этот атрибут в каждое из ваших сообщений ответа. Эта схема очень распространена в мыле, чтобы избежать использования ошибок (я предпочитаю использовать ошибки, если это возможно) – pedrofb

+0

Спасибо. , но затем я хочу построить стандартный ответ для сбоев сообщений проверки. I прочитали в другом месте, что невозможно создать сообщения ServiceResponse от CXF Interceptors. Будет здорово, если вы сможете объяснить, что это хороший способ сделать это. –