Lotus Notes:Java在代理上运行良好,但在java lib上运行失败

时间:2014-02-26 19:56:26

标签: java lotus-notes lotusscript ls2j

我创建了一个Web服务使用者。 我想调用名为setCredentials的方法,以便将身份验证信息传递给服务。

我有两个实体导入Web服务使用者,一个代理和一个java库,意味着从LotusScript调用。

奇怪的是,我的经纪人一切正常。库编译好了,但是当它从LotusScript执行并到达那一行时 stub.setCredentials("xxxx","ttttt"); Java引发java.lang.nosuchmethod错误。我能做错什么?

非常感谢您的帮助。

更新

也许我没有完全解释。该操作完全发生在java中。这是一种考验。在LotusScript上,我只是使用序列GetClass / CreateObject调用构造函数。代码在构造函数内(为了测试)。它在我的测试代理和java库上看起来都是一样的。回答你的问题,杰森,不,setCredentials是某个lotus.domino.types.PortTypeBase接口的一部分。当我使用.wsdl创建一个Web服务使用者时,我可以从生成的.java文件中看到我的接口扩展了portTypeBase和Remote

1 个答案:

答案 0 :(得分:4)

无法从LotusScript(LS2J)调用Java Web Service使用者。这在SPR SODY7UDKE8 / APAR LO42772中有详细说明。这也适用于调用Java代理,后者又调用Java使用者。

您需要创建一个LotusScript使用者来访问LotusScript中的Web服务。但是,LotusScript中存在已知的限制,这些限制可能会阻止某些Web服务被使用。

  • 40个字符变量/方法限制
  • 极大的SOAP消息可能会导致性能/崩溃问题。
  • LS / WSDL / SOAP中保留的关键字不匹配。

那说我创建了以下示例Provider。

Class wsClass 
    Function hello ( helloText As String) As String
        hello = "Hello " + helloText
    End Function
End Class

在存储的NSF中,我将其设置为仅允许经过身份验证的用户。

然后,我从生成的WSDL创建了LS使用者和Java使用者库。

之后我创建了以下示例代码。

LotusScript

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();
       }
   }
}

这些都与他们各自的消费者一样按预期工作。