SAPфорум.RU
https://sapboard.ru/forum/

Обработка SOAP System Error в синхронном взаимодействии
https://sapboard.ru/forum/viewtopic.php?f=70&t=92519
Страница 1 из 1

Автор:  Андрей Петин [ Ср, мар 02 2016, 10:26 ]
Заголовок сообщения:  Обработка SOAP System Error в синхронном взаимодействии

Добрый день!

Ситуация следующая.
В сценарии - SOAP Sender и HTTP Receiver, обмен синхронный.
Интересует возможность какой-либо обработки системных ошибок в случае сбоя при HTTP-запросе (например, таймаут).
SOAP-ответ тогда возвращается типа такого:
Code:
<SOAP:Envelope xmlns:SOAP="http://schemas.xmlsoap.org/soap/envelope/">
   <SOAP:Body>
      <SOAP:Fault>
         <faultcode>SOAP:Server</faultcode>
         <faultstring>Server Error</faultstring>
         <detail>
            <s:SystemError xmlns:s="http://sap.com/xi/WebService/xi2.0">
               <context>XIAdapter</context>
               <code>ADAPTER.JAVA_EXCEPTION</code>
...
            </s:SystemError>
         </detail>
      </SOAP:Fault>
   </SOAP:Body>
</SOAP:Envelope>

Хотелось бы узнать, какие есть возможности перехватить подобную ошибку и как-либо преобразовать её в корректный response для синхронного outbound-интерфейса.

Насколько я понимаю, это либо нужно делать через ccBPM (использовать ветвь exception), либо вместо HTTP Receiver делать Java Proxy и туда выносить вызов HTTP и обработку его результата, либо как-то через модули адаптера. Про модули особо не нашёл информации. Может быть, есть какие-либо готовые решения для этой цели?

Автор:  Chaser009 [ Ср, мар 02 2016, 10:37 ]
Заголовок сообщения:  Re: Обработка SOAP System Error в синхронном взаимодействии

Здравствуйте!

Обсуждали для SOAP-канала, решений особых так и не нашли:

viewtopic.php?f=70&t=86769

Автор:  Андрей Петин [ Ср, мар 02 2016, 14:29 ]
Заголовок сообщения:  Re: Обработка SOAP System Error в синхронном взаимодействии

Да, жаль.

Уже работает похожий сценарий, но там асинхронный процесс, где отправитель - SAP CRM (proxy), и получатель - тоже эта же система.
Но в мэппинге используется UDF, где в Java-коде выполняется lookup к внешней системе по HTTP-каналу.
И там, соответственно, можно как-либо обработать результат выполнения HTTP.
По сути это один из вариантов асинхронно-синхронного моста.
Для разработки такое достаточно удобно.

А вот для синхронного вызова никакого аналога придумать не могу, чтоб с UDF или Java Mapping сделать.

Автор:  Chaser009 [ Чт, мар 10 2016, 06:36 ]
Заголовок сообщения:  Re: Обработка SOAP System Error в синхронном взаимодействии

Вообще есть некий "костыльный" вариант:

1. Выключаете SOAP-обертку в канале (Do not use SOAP Envelope).
2. Формируете сообщение целиком, включая SOAP-Envelope.
3. Создаете структуру ответного сообщения, опять же включая Envelope, внутри нее описываете как возвращаемые данные, так и Fault-структуру.
4. В адаптере прописываете XMBWS.NoSOAPIgnoreStatusCode = true, чтобы у вас сообщение прилетало как обычный Response даже в случае ошибки.
5. Ну и дальше анализируете структуру ответа прилетевшего: если есть Fault - значит, ошибка была, дальше смотрите, что там внутри лежит, если Fault нет - значит, данные прилетели.

Насколько оно того стоит - зависит от требований к процессу.

Страница 1 из 1 Часовой пояс: UTC + 3 часа
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/