• Курсы Академии Кодебай, стартующие в мае - июне, от команды The Codeby

    1. Цифровая криминалистика и реагирование на инциденты
    2. ОС Linux (DFIR) Старт: 16 мая
    3. Анализ фишинговых атак Старт: 16 мая Устройства для тестирования на проникновение Старт: 16 мая

    Скидки до 10%

    Полный список ближайших курсов ...

Проблема lotus.domino.axis не может обработать ошибку от внешних сервисов

VladSh

начинающий
Lotus Team
11.12.2009
1 791
157
BIT
119
До сих пор на проде сидим на Domino 8.5.3FP6 HF1840, т.к. это довольно-таки стабильный релиз. Переезд в рамках всей конторы - очень тяжёлый процесс, - есть много критических процессов, которые должны работать в любом случае. По этим причинам переход постоянно отодвигался, пока дело не дошло до Lotus'а - контора глобально переезжает с шины ESB на IIB (IBM Integration Bus), а Lotus < 9.0.3 не поддерживает алгоритм шифрования SHA-256, который используется в IIB.

Web-сервисы перенесли "один к одному" и тут возникла принеприятнейшая ситуация - те сервисы, которые возвращают информацию об ошибке с помощью генерации исключения на FP8-FP10 заваливают лотусовые агенты с таким стеком:
Код:
lotus.domino.axis.InternalFault.makeFault(Unknown Source)
lotus.domino.axis.client.Call.invoke(Unknown Source)
lotus.domino.axis.client.Call.invoke(Unknown Source)
lotus.domino.axis.client.Call.invoke(Unknown Source)
lotus.domino.websvc.client.Call.invoke(Unknown Source)
-- здесь строки вызова нашего агента и внешнего сервиса --

предыдущий стек из массива исключений:
lotus.domino.axis.message.RPCHandler.onStartChild(Unknown Source)
lotus.domino.axis.encoding.DeserializationContextImpl.startElement(Unknown Source)
lotus.domino.axis.message.SAX2EventRecorder.replay(Unknown Source)
lotus.domino.axis.message.MessageElement.publishToHandler(Unknown Source)
lotus.domino.axis.message.RPCElement.deserialize(Unknown Source)
lotus.domino.axis.message.RPCElement.getParams(Unknown Source)
lotus.domino.axis.client.Call.invoke(Unknown Source)
lotus.domino.axis.client.Call.invoke(Unknown Source)
lotus.domino.axis.client.Call.invoke(Unknown Source)
lotus.domino.websvc.client.Call.invoke(Unknown Source)
-- здесь строки вызова нашего агента и внешнего сервиса --
lotus.domino.AgentBase.runNotes(Unknown Source)
lotus.domino.NotesThread.run(Unknown Source)

Результат работы сервиса:  ; nested exception is: java.lang.NullPointerException
Ошибка такая даже при вызове через http.

Пока что единственный выход - переделать сервисы на возврат инфы об ошибке в объекте. Этот подход работает. Но это куча дурной работы - на стороне IIB WSDL пишется практически вручную, т.к. сгенеренный автоматически не затягивается в Lotus.
 
Последнее редактирование:

garrick

Lotus Team
26.10.2009
1 352
151
BIT
204
Попробуйте для доступа к сервису использовать не доминошный Web Service Consumer, а обычный агент с чем-то поновее внутри, например JAX-WS, с новой версией того же Axis или CXF.
 
Последнее редактирование:
  • Нравится
Реакции: VladSh

VladSh

начинающий
Lotus Team
11.12.2009
1 791
157
BIT
119
У нас FP8. Предлагаете в Domino подменить jar'ники? А где их взять более новые? Это ж пакет Domino: lotus.domino.axis.client. От версии R10?
И как не пользоваться доминошным Web Service Consumer?

Спасибо за ответ, вряд ли так будем делать, это куча геморроя.
А моё сообщение больше для того, что может быть кто-то запостит баг-репорт.
 

garrick

Lotus Team
26.10.2009
1 352
151
BIT
204
JAX-WS входит в комплект Java 1.6, никаких жарников никуда подкладывать не надо, все необходимые классы уже есть в rt.jar.

 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!