简体   繁体   English

如何在LS2J中的另一个类的参数中传递对象?

[英]how pass an objet in parameter of another class in LS2J?

I am trying to pass an object of a java class (a bean) to another class with LS2J. 我正在尝试使用LS2J将Java类(bean)的对象传递给另一个类。

The problem is that an error is returned : 问题是返回了错误:

LS2J Error: Threw java.lang.ClassNotFoundException: com.pasquier.DTO.WS.LogWSDTO LS2J错误:引发java.lang.ClassNotFoundException:com.pasquier.DTO.WS.LogWSDTO

I don't know why ? 我不知道为什么?

I have a class bean normally with getter and setter. 我通常有一个带有getter和setter的类bean。 I want to pass an instance of this class in another. 我想在另一个中传递此类的一个实例。

My class in Lotus LS2J : 我在Lotus LS2J中的课程:

Class LogWebService
    sessionJava As JAVASESSION      
    classJava As JAVACLASS
    objectJava As JAVAOBJECT        
    methodJava As JAVAMETHOD

    Public Sub New()
        Set sessionJava = New JAVASESSION
        Set classJava = sessionJava.GetClass("com.pasquier.launcher/LogWebService")
        Set objectJava = classJava.CreateObject     
    End Sub 

    Public Sub setLog(logDTO As LogWSDTO)
        Set methodJava = classJava.GetMethod("setLog","(Lcom/pasquier/DTO/WS/LogWSDTO;)V")      
             objectJava.setLog(logDTO)      
    End Sub 

End Class

It is the method setLog which crashes 是setLog方法崩溃

I call it in the code : 我在代码中称它为:

Class LogGetAllDocumentsDAO

    Private ilog As LogWebService 
    Private logDTO As LogWSDTO
    Private docDTO As LogGetAllDocumentsDTO

    Public Sub New(logWSparam As LogWSDTO, docDTOparam As LogGetAllDocumentsDTO)
        Set Me.logDTO = logWSparam
        Set Me.docDTO = docDTOparam     
    End Sub 


    Public Sub appelLog()           
        Set ilog = New LogWebService()

        ' error: LS2J Error: Threw java.lang.ClassNotFoundException: com.pasquier.DTO.WS.LogWSDTO
        Call ilog.setLog(logDTO)


    End Sub 

an idea ? 一个主意 ?

i have a class LogDTO in the same library than LogWebService. 我在与LogWebService相同的库中有一个LogDTO类。

Class LogWSDTO
sessionJava As JAVASESSION      
classJava As JAVACLASS
objectJava As JAVAOBJECT        
methodJava As JAVAMETHOD


Public Sub New()
    Set sessionJava = New JAVASESSION
    Set classJava = sessionJava.GetClass("com.pasquier.DTO.WS/LogWSDTO")
    Set objectJava = classJava.CreateObject     
End Sub

if i understand i can't pass logDTO with : 如果我明白我不能通过logDTO与:

Set Me.logDTO = logWSparam

is it that ? 是那个吗 ? But how i do then ?? 但是我该怎么办??


well i try but it doesn't work. 好吧,我尝试,但它不起作用。

I add a getObjet method in LS2J (not in java only on lotus) 我在LS2J中添加了getObjet方法(不是仅在Lotus中在Java中)

Class LogWSDTO
sessionJava As JAVASESSION      
classJava As JAVACLASS
objectJava As JAVAOBJECT        
methodJava As JAVAMETHOD


Public Sub New()
    Set sessionJava = New JAVASESSION
    Set classJava = sessionJava.GetClass("com.pasquier.DTO.WS/LogWSDTO")
    Set objectJava = classJava.CreateObject     
End Sub


Public Function getJavaObject()
    Set getJavaObject = objectJava      
End Function

i try to call this in my prog : 我尝试在我的编中称呼它:

Class LogGetAllDocumentsDAO

Private ilog As LogWebService 
Private logDTO As LogWSDTO
Private docDTO As LogGetAllDocumentsDTO

Public Sub New(logWSparam As LogWSDTO, docDTOparam As LogGetAllDocumentsDTO)        
    Set Me.logDTO = logWSparam
    Set Me.docDTO = docDTOparam     
End Sub 


Public Sub appelLog()           
    Call ajouterParam()         
    Set ilog = New LogWebService()      

    Call ilog.setLog(logDTO.getJavaObject())
End Sub 

i can't save this change : it returns : 我无法保存此更改:它返回:

"type mismatch on : GETJAVAOBJECT"


so i try to add the method in LogWebService' s java class. 所以我尝试在LogWebService的java类中添加该方法。 and i try in LS2J : 我尝试LS2J:

Public Function getJavaObject()         
    Set methodJava = classJava.GetMethod("getJavaObject","()Lcom/pasquier/DTO/WS/LogWSDTO;")        
    getJavaObject = objectJava.getJavaObject()  
End Function

i call with : 我打电话给:

Public Sub appelLog()           
    Set ilog = New LogWebService()          
    Set logDTO = logDTO.getJavaObject
    Call ilog.setLog(logDTO)

and it doesn't works, same message, i cry !!! 它不起作用,相同的消息,我哭!

objectJava.setLog(logDTO) - logDTO has to be a Java object generated by LS2J. objectJava.setLog(logDTO) -logDTO必须是LS2J生成的Java对象。 It won't work with a LotusScript class object. 它不适用于LotusScript类对象。

Add a method getJavaObject() to your LotusScript class LogWSDTO which returns the LS2J Java object objectJava . 将方法getJavaObject()添加到LotusScript类LogWSDTO中,该方法返回LS2J Java对象objectJava Use it this way then: 然后以这种方式使用它:

objectJava.setLog(logDTO.getJavaObject())

This is a working example: 这是一个工作示例:

LotusScript agent: LotusScript代理:

Option Declare
UseLSX "*javacon"
Use "AandB"

Class LogWSDTO
    sessionJava As JAVASESSION      
    classJava As JAVACLASS
    objectJava As JAVAOBJECT        

    Public Sub New()
        Set sessionJava = New JAVASESSION
        Set classJava = sessionJava.GetClass("de.leonso.test/B")
        Set objectJava = classJava.CreateObject     
    End Sub

    Public Function getJavaObject()
        Set getJavaObject = objectJava      
    End Function
End Class

Sub Initialize
    Dim sessionJava As JAVASESSION      
    Dim classJavaA As JAVACLASS
    Dim objectJavaA As JAVAOBJECT        
    Dim lsB As LogWSDTO

    Set sessionJava = New JAVASESSION
    Set classJavaA = sessionJava.GetClass("de.leonso.test/A")
    Set objectJavaA = classJavaA.CreateObject     
    Set lsB = New LogWSDTO()

    print objectJavaA.a(lsB.getJavaObject())

End Sub

Java classes in Java ScriptLibrary "AandB": Java ScriptLibrary“ AandB”中的Java类:

package de.leonso.test;

public class A {
    public String a(B b) {
        return b.b();
    }
}

package de.leonso.test;

public class B {
    public String b() {
         return ("hallo");
    }
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM