로터스 노트:Java는 에이전트에서는 제대로 실행되지만 Java lib에서는 실패합니다.
-
21-12-2019 - |
문제
웹 서비스 소비자를 만들었습니다.이름이 지정된 메서드를 호출하고 싶습니다. setCredentials
그러면 내 인증 정보를 서비스에 전달할 수 있습니다.
웹 서비스 소비자, 에이전트 및 Java 라이브러리를 가져오는 두 개의 엔터티가 있으며 LotusScript에서 호출됩니다.
이상한 점은 내 에이전트에서는 모든 것이 잘 작동한다는 것입니다.라이브러리는 정상적으로 컴파일되지만 LotusScript에서 실행되어 해당 라인에 도달하면stub.setCredentials("xxxx","ttttt");
자바는 java.lang.nosuchmethod
오류.내가 뭘 잘못하고 있는 걸까요?
도움을 주셔서 미리 감사드립니다.
업데이트:
어쩌면 내가 완전히 설명하지 않았을 수도 있습니다.작업은 Java 내부에서 완전히 발생합니다.이것은 일종의 테스트입니다.LotusScript에서는 GetClass/CreateObject 시퀀스를 사용하여 생성자를 호출하고 있습니다.코드는 생성자 내부에 있습니다(테스트용).그리고 내 테스트 에이전트와 Java 라이브러리 모두에서 정확하게 동일해 보입니다.귀하의 질문에 대답하는 Jason, no, setCredentials는 특정 lotus.domino.types.PortTypeBase 인터페이스의 일부입니다.웹 서비스 소비자를 생성하기 위해 .wsdl을 사용할 때 생성된 .java 파일에서 내 인터페이스가 portTypeBase 및 Remote를 확장한다는 것을 볼 수 있습니다.
해결책
LotusScript(LS2J)에서는 Java 웹 서비스 소비자를 호출할 수 없습니다.이에 대해서는 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에는 인증된 사용자만 허용하도록 설정되어 저장되어 있습니다.
그런 다음 생성된 WSDL에서 LS 소비자 및 Java 소비자 라이브러리를 만들었습니다.
그 후 다음 샘플 코드를 만들었습니다.
로터스스크립트
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();
}
}
}
이 두 가지 모두 해당 소비자와 예상대로 작동했습니다.