莲花便笺:Java 在 Agent 上运行良好,但在 java lib 上运行失败
-
21-12-2019 - |
题
我创建了一个 Web 服务使用者。我想调用一个名为 setCredentials
这样我就可以将我的身份验证信息传递给该服务。
我有两个导入 Web 服务使用者的实体,一个代理和一个 java 库,旨在从 LotusScript 调用。
奇怪的是,在我的代理上一切正常。库编译正常,但是当它从 LotusScript 执行并到达该行时stub.setCredentials("xxxx","ttttt");
Java抛出一个 java.lang.nosuchmethod
错误。我可能做错了什么?
预先非常感谢您的帮助。
更新:
可能是我没有解释完整。该操作完全发生在 java 内部。这是一种测试。在 LotusScript 上,我只是使用 GetClass/CreateObject 序列调用构造函数。代码位于构造函数内部(为了测试目的)。无论是在我的测试代理上还是在 java 库上,它看起来都完全相同。回答你的问题,Jason,不,setCredentials 是某个 Lotus.domino.types.PortTypeBase 接口的一部分。当我使用 .wsdl 来创建 Web 服务使用者时,我可以从生成的 .java 文件中看到我的接口扩展了 portTypeBase 和 Remote
解决方案
无法从 LotusScript (LS2J) 调用 Java Web 服务使用者。SPR 中有详细说明 SODY7UDKE8 / APAR LO42772. 。这也适用于调用 Java 代理,而 Java 代理又调用 Java 使用者。
您需要创建一个 LotusScript 使用者来访问 LotusScript 中的 Web 服务。然而,LotusScript 中存在一些已知的限制,可能会阻止使用某些 Web 服务。
- 40 个字符变量/方法限制
- 非常大的 SOAP 消息可能会导致性能/崩溃问题。
- LS/WSDL/SOAP 中的保留关键字不匹配。
也就是说,我创建了以下示例提供程序。
Class wsClass
Function hello ( helloText As String) As String
hello = "Hello " + helloText
End Function
End Class
在 NSF 中它被存储,我将其设置为仅允许经过身份验证的用户。
然后,我根据生成的 WSDL 创建了 LS 消费者和 Java 消费者库。
之后我创建了以下示例代码。
Lotus脚本
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
爪哇 (将消费者库添加到代理)
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();
}
}
}
这两者都按各自消费者的预期工作。