Notas de loto:Java funciona bien cuando está en un agente, pero falla cuando está en una biblioteca de Java
-
21-12-2019 - |
Pregunta
Creé un consumidor de servicios web.Quiero llamar a un método que se llama. setCredentials
para poder pasar mi información de autenticación al servicio.
Tengo dos entidades que importan el consumidor del servicio web, un agente y una biblioteca Java, que deben llamarse desde LotusScript.
Lo extraño es que en mi agente todo funciona bien.La biblioteca se compila bien, pero cuando se ejecuta desde LotusScript y llega a esa líneastub.setCredentials("xxxx","ttttt");
Java lanza un java.lang.nosuchmethod
error.¿Qué puedo estar haciendo mal?
Muchas gracias de antemano por tu ayuda.
Actualizar:
Quizás no lo expliqué completamente.La acción ocurre completamente dentro de java.Esto es una especie de prueba.En LotusScript simplemente estoy llamando al constructor con la secuencia GetClass/CreateObject.El código está dentro del constructor (por motivos de prueba).Y se ve exactamente igual, tanto en mi agente de prueba como en la biblioteca de Java.Respondiendo a tu pregunta, Jason, no, setCredentials es parte de cierta interfaz lotus.domino.types.PortTypeBase.Cuando consumo el .wsdl para crear un consumidor de servicios web, puedo ver en los archivos .java generados que mi interfaz extiende portTypeBase y Remote
Solución
No es posible llamar a un consumidor de servicio web de Java desde LotusScript (LS2J). Esto se detalla en SPR sody7udke8 / apar lo42772 . Esto también se aplica a llamar a un agente de Java, que a su vez llama a un consumidor Java.
Necesitará crear un consumidor de LotusScript para acceder al servicio web en LotusScript. Sin embargo, hay limitaciones conocidas en LotusScript, lo que puede evitar que se consuman algunos servicios web.
- 40 caracteres variable / límite de método
- Los mensajes de jabón extremadamente grandes pueden causar problemas de rendimiento / accidente.
- Palabras clave reservadas Desajuste en LS / WSDL / SOAP.
Dicho esto, creé el siguiente proveedor de muestra.
Class wsClass
Function hello ( helloText As String) As String
hello = "Hello " + helloText
End Function
End Class
En el NSF se almacenó, lo configura para permitir a los usuarios autenticados.
Luego creé una LS Consumer y Java Consumer Bibliotecas de la WSDL generada.
Después de eso, creé el siguiente código de muestra.
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 (Biblioteca de consumidores agregada al Agente)
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();
}
}
}
Ambos trabajados como se esperan con su propio consumidor respectivo.