WedX - журнал о программировании и компьютерных науках

Можно ли отправить ложный ответ от перехватчиков в Apache CXF и Spring SOAP WS?

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

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

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

@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="https://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>

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


Ответы:


1

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

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

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

<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>
28.12.2016
  • Не уверен, правильно ли я понял @pedrofb. Вы имели в виду, что мы должны попытаться преобразовать ошибки в объект ответа. Но потребитель здесь не может анализировать ответы об ошибках в моем случае. :( 28.12.2016
  • Конечно, мой английский не слишком хорош. Предлагаю не использовать разломы и изменить модель объекта. Вместо того, чтобы вызывать ошибку в вашей бизнес-логике, поймайте исключение и верните код ошибки в качестве атрибута возвращаемого объекта. Включите этот атрибут в каждое из ваших ответных сообщений. Эта схема очень распространена в мыле, чтобы избежать использования ошибок (я предпочитаю использовать ошибки, если это возможно). 28.12.2016
  • Спасибо. но затем я хочу создать стандартный ответ для сообщений об ошибках проверки. Я где-то читал, что невозможно создавать сообщения ServiceResponse из перехватчиков CXF. Будет здорово, если вы сможете объяснить какой-то хороший способ сделать это. 29.12.2016
  • С перехватчиком у вас есть доступ к обменному сообщению. См. в моем ответе stackoverflow.com/a/38587928/6371459 перехватчик для извлечения полезной нагрузки сообщения и установки нового содержание, если хотите. Вам понадобится перехватчик OUT, расширяющий AbstractPhaseInterceptor (общий) или AbstractSoapInterceptor, получите полезную нагрузку, проанализируйте данные и составьте новое сообщение SOAP. Вашему клиенту также потребуется проанализировать сообщение напрямую, потому что, поскольку формат сообщения отсутствует в WSDL, его язык программирования не будет генерировать соответствующий код, поэтому он вызовет исключение. 29.12.2016
  • Новые материалы

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

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

    ИИ в аэрокосмической отрасли
    Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


    Для любых предложений по сайту: [email protected]