Лотос Ноты:Java работает нормально, когда работает с агентом, но терпит неудачу, когда работает с библиотекой java
-
21-12-2019 - |
Вопрос
Я создал потребителя веб-сервиса.Я хочу вызвать метод, который называется setCredentials
таким образом, я могу передать свою аутентификационную информацию службе.
У меня есть две сущности, которые импортируют потребителя веб-службы, агент и библиотеку java, предназначенные для вызова из LotusScript.
Самое странное, что у моего агента все работает нормально.Библиотека компилируется нормально, но когда она выполняется из LotusScript и достигает этой строки
stub.setCredentials("xxxx","ttttt");
Java выдает java.lang.nosuchmethod
ошибка.Что я могу делать не так?
Заранее большое вам спасибо за вашу помощь.
Обновить:
Может быть, я не совсем все объяснил.Действие происходит полностью внутри java.Это своего рода тест.В LotusScript я просто вызываю конструктор с последовательностью getClass/CreateObject .Код находится внутри конструктора (для удобства тестирования).И это выглядит точно так же, как в моем тестовом агенте, так и в библиотеке java.Отвечая на твой вопрос, Джейсон, нет, setCredentials является частью определенного интерфейса lotus.domino.types.PortTypeBase.Когда я использую .wsdl для создания потребителя веб-службы, я вижу из сгенерированных файлов .java, что мой интерфейс расширяет базу типов портов и удаленный
Решение
Невозможно вызвать потребителя веб-службы Java из LotusScript (LS2J).Это подробно описано в SPR SODY7UDKE8 / APAR LO42772.Это также относится к вызову Java-агента, который, в свою очередь, вызывает Java-потребителя.
Вам нужно будет создать пользователя LotusScript для доступа к веб-службе в LotusScript.Однако в LotusScript существуют известные ограничения, которые могут препятствовать использованию некоторых веб-сервисов.
- ограничение на 40 символов переменной/ метода
- Чрезвычайно большие сообщения SOAP могут вызвать проблемы с производительностью / аварийным завершением работы.
- Зарезервированные ключевые слова не совпадают в LS/ WSDL/SOAP.
Тем не менее, я создал следующий пример поставщика.
Class wsClass
Function hello ( helloText As String) As String
hello = "Hello " + helloText
End Function
End Class
В NSF, где он был сохранен, я настроил его так, чтобы разрешать только аутентифицированным пользователям.
Затем я создал потребительские библиотеки LS и Java из сгенерированного WSDL.
После этого я создал следующий пример кода.
Лотосный скрипт
Use "LsWebServiceConsumer"
Sub Initialize
Dim stub As New Wsclass
Dim answer As String
Call stub.Setcredentials("testuser", "password")
answer = stub.Hello("world")
MsgBox answer
End Sub
JAVA (добавлена библиотека пользователя в агент)
import lotus.domino.*;
public class JavaAgent extends AgentBase {
public void NotesMain() {
try {
WsClass stub = new WsClassServiceLocator().getDomino();
stub.setCredentials("testuser", "password");
System.out.println(stub.HELLO("world"));
} catch(Exception e) {
e.printStackTrace();
}
}
}
Оба они работали, как и ожидалось, со своим собственным потребителем.