我创建了一个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
答案 0 :(得分:4)
无法从LotusScript(LS2J)调用Java Web Service使用者。这在SPR SODY7UDKE8 / APAR LO42772中有详细说明。这也适用于调用Java代理,后者又调用Java使用者。
您需要创建一个LotusScript使用者来访问LotusScript中的Web服务。但是,LotusScript中存在已知的限制,这些限制可能会阻止某些Web服务被使用。
那说我创建了以下示例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();
}
}
}
这些都与他们各自的消费者一样按预期工作。