我创建了一个 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();
       }
   }
}

这两者都按各自消费者的预期工作。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top