• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

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

    Запись на курс до 25 апреля. Получить промодоступ ...

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

VladSh

начинающий
Lotus Team
11.12.2009
1 786
157
BIT
79
До сих пор на проде сидим на 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 351
151
BIT
189
Попробуйте для доступа к сервису использовать не доминошный Web Service Consumer, а обычный агент с чем-то поновее внутри, например JAX-WS, с новой версией того же Axis или CXF.
 
Последнее редактирование:
  • Нравится
Реакции: VladSh

VladSh

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

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

garrick

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

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

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