2

我正在尝试使用 LS2J 将 java 类(bean)的对象传递给另一个类。

问题是返回错误:

LS2J 错误:抛出 java.lang.ClassNotFoundException:com.pasquier.DTO.WS.LogWSDTO

我不知道为什么?

我有一个通常带有 getter 和 setter 的类 bean。我想在另一个中传递这个类的一个实例。

我在 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

崩溃的是方法 setLog

我在代码中调用它:

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 

一个主意 ?

我在与 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

如果我明白我不能通过 logDTO :

Set Me.logDTO = logWSparam

是那个吗 ?但那我怎么办??


好吧,我尝试了,但它不起作用。

我在 LS2J 中添加了一个 getObjet 方法(不是在 Java 中只在 Lotus 上)

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

我尝试在我的 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 

我无法保存此更改:它返回:

"type mismatch on : GETJAVAOBJECT"


所以我尝试在 LogWebService 的 java 类中添加该方法。我在 LS2J 中尝试:

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

我打电话给:

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

它不起作用,同样的消息,我哭了!

4

1 回答 1

3

objectJava.setLog(logDTO)- logDTO 必须是 LS2J 生成的 Java 对象。它不适用于 LotusScript 类对象。

将方法 getJavaObject() 添加到您的 LotusScript 类 LogWSDTO,它返回 LS2J Java 对象objectJava。然后以这种方式使用它:

objectJava.setLog(logDTO.getJavaObject())

这是一个工作示例:

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 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");
    }
}
于 2014-06-26T14:15:01.270 回答