首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >访问带有LS2J的lotuscript中的java接口?

访问带有LS2J的lotuscript中的java接口?
EN

Stack Overflow用户
提问于 2014-06-24 11:36:56
回答 3查看 1.6K关注 0票数 0

enter code here我试图通过他的接口访问一个java类,我用Ls2J来创建一个类,而不是java接口,因为我不知道我是怎么做的,我有一个错误:

代码语言:javascript
复制
error : LS2J Error: Java constructor failed to execute

一个想法?^^

谢谢!

我在莲花中的java类

代码语言:javascript
复制
Class ILogWebService
sessionJava As JAVASESSION      
classJava As JAVACLASS
objectJava As JAVAOBJECT        
methodJava As JAVAMETHOD

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

Public Sub notesMain()
    Set methodJava = classJava.GetMethod("notesMain","()V")     
    objectJava.notesMain        
End Sub 

端级

我的java接口:

包装com.pasquier.IDAO.WS;

进口com.pasquier.MesExceptions.ExceptionWS;

公共接口ILogWebService {

代码语言:javascript
复制
void notesMain() throws ExceptionWS;    

}

我的java类:

代码语言:javascript
复制
public class LogWebService implements ILogWebService {
private Session session;
private LogWSDTO logDTO = null;

public LogWebService(LogWSDTO log) {
    this.logDTO = log;
}


public void notesMain() throws ExceptionWS  {
    try 
    {
        try 
        {           
            session =  WebServiceBase.getCurrentSession();              
                        ILogWSDAO ilog = FactoryWS.getInstance().createLogWSDAO(session, logDTO);

            ilog.ajouterLog();  
        } finally
        {
            UtilMemoire.purgeMemoire(); 
        }
    } catch (NullPointerException e1)
    {   
        System.out.println("ERREUR NullPointer sur NotesMain sur LogWebService");
        throw new ExceptionWS("ERREUR NullPointer sur NotesMain sur LogWebService", e1, logDTO);
    } catch (ExceptionWS e) 
    {
        System.out.println( e.getMessage());        
    } catch (Exception e2) 
    {           
        System.out.println("ERREUR sur NotesMain sur LogWebService " + e2.getMessage());    
        throw new ExceptionWS("ERREUR sur NotesMain sur LogWebService " + e2.getMessage(), e2, logDTO);
    }
}

我的彩票记录:

代码语言:javascript
复制
Class LogGetAllDocumentsDAO

Private ilog As ILogWebService 
Private logDTO As LogWSDTO
Private docDTO As LogGetAllDocumentsDTO
Private utilDt As UtilDate

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 ILogWebService(logDTO)       
    'Call ilog.notesMain()
End Sub 

Public Sub ajouterParam()

    Dim retourWS As String 
    Dim paramWS As String

    'paramètres d'envoi de web services
    paramWS = "dbserver=" + docDTO.getDbServer
    paramWS = paramWS + "dbpath="  + docDTO.getDbPath
    paramWS = paramWS + "nomVue="  + docDTO.getNomVue
    paramWS = paramWS + "key="  + docDTO.getKey
    paramWS = paramWS + "sep="  + docDTO.getSep

    logDTO.setParamWS(paramWS)

    'paramètres de retour de web services
    retourWS = "Nombre d'Identifiants : ...." 
    logDTO.setRetourWS(retourWS)

    'logDTO.setDateHeureDebutWS(utilDt.dateTimeDuJour(session, logDTO))     

End Sub     

端级

谢谢你的帮助!!

我回来是因为它不起作用,我试着调用我的类,好像接口不存在一样,但是它写着错误:"LS2J错误:未能执行“

代码语言:javascript
复制
Sub Click(Source As Button)
Dim mySession As JAVASESSION    
Dim myClass As JAVACLASS
Dim myObjet As JAVAOBJECT
Dim toto As String
Dim toto2 As String
Dim myCollection As JavaMethodCollection
Dim myMethod As JavaMethod
Dim myMethod2 As JavaMethod
toto2 = "test"

Set mySession = New  JAVASESSION        
Set myClass = mySession.GetClass("com.pasquier.launcher/LogWebService") 
Set myObjet = myClass.CreateObject("(Lcom/pasquier/DTO/WS/LogWSDTO;)V")


Messagebox (toto2)

Set myCollection = myClass.getClassMethods()

Set myMethod = myCollection.getFirst()
Do
    If myCollection.count <> 0 Then 
        toto2 =  myMethod.MethodName & " " & myMethod.signature
        Messagebox (toto2)          

    End If
    Set myMethod = myCollection.getNext()       
Loop While myCollection.current <> 1    

结束子对象

你能帮我吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2014-06-25 09:06:53

假设我们有一个包com.pasquier.IDAO.WS和下面的类/接口:

  • LogWebService
  • LogWSDTO
  • ILogWebService

LS2J是一件奇怪的事情,它在某些情况下不起作用。当像这样报告一个不应该发生的错误时,开发人员会响应LS2J。

我们假设LogWSDTO有默认构造函数,所以我们创建它的实例:

代码语言:javascript
复制
Set logWSDTOClass = javaSession.getClass("com/pasquier/IDAO/WS/LogWSDTO")
Set logWSDTOObject = logWSDTOClass.CreateObject()

然后我们创建对象,在它的构造函数中使用这个日志。

我们得到了全班:

代码语言:javascript
复制
Set logWebServiceClass = javaSession.getClass("com/pasquier/IDAO/WS/LogWebService")

并打电话:

代码语言:javascript
复制
Set logWebServiceObject = logWebServiceClass.CreateObject("(Lcom/pasquier/IDAO/WS/LogWSDTO;)V", logWSDTOObject)

塔-达!,那不起作用。我们得到了一个著名的"Java构造函数未能执行“。为什么?因为构造函数有一个具有正确类型的参数,因此不应该发生此错误。但是它是LS2J,我们需要忍受:)

所以,我们需要一个解决办法来解决这个问题。

我们正在修改我们的LogWebService类以声明一个默认的构造函数,并且添加了一个新的方法:

代码语言:javascript
复制
public void setLog(LogWSDTO log) {
   this.logDTO = log;       
}

在那之后,我们会:

代码语言:javascript
复制
Set logWebServiceObject = logWebServiceClass.CreateObject()
Call logWebServiceObject.setLog(logWSDTOObject)
Call logWebServiceObject.notesMain()

它起作用了。魔术。

下面列出了本示例所需的所有类/代码:

代码语言:javascript
复制
package com.pasquier.IDAO.WS;

public class LogWSDTO {

    public LogWSDTO() {
        System.out.println("@@@ LogWSDTO constructor called!");
    }

    public void log() {
        System.out.println("@@@ LogWSDTO DO called!");
    }

}
代码语言:javascript
复制
package com.pasquier.IDAO.WS;

public interface ILogWebService {
    void notesMain();
}
代码语言:javascript
复制
package com.pasquier.IDAO.WS;

import lotus.domino.Session;

public class LogWebService implements ILogWebService {

    private Session session;
    private LogWSDTO logDTO = null; 

    public LogWebService() {
        System.out.println("LogWebService: Default Constructor called!");
    }

    public void setLog(LogWSDTO log) {
        this.logDTO = log;      
    }

    public LogWebService(LogWSDTO log) {
        this.logDTO = log;
        System.out.println("~~~ LogWebService.constructor!!!");
    }

    public void notesMain() {
        // TODO Auto-generated method stub
        System.out.println("~~~ LogWebService.notesmain called!!!");
        this.logDTO.log();

    }
}

和lotusscript代码:

代码语言:javascript
复制
Sub Click(Source As Button)
    Dim javaSession As New JAVASESSION
    Dim javaError As JAVAERROR

    On Error Goto ErrorHandling

    Dim logWSDTOClass As JAVACLASS
    Dim logWSDTOObject As JavaObject

    Dim logWebServiceClass As JAVACLASS
    Dim logWebServiceObject As JavaObject

    Set logWSDTOClass = javaSession.getClass("com/pasquier/IDAO/WS/LogWSDTO")
    Set logWSDTOObject = logWSDTOClass.CreateObject()

    Set logWebServiceClass = javaSession.getClass("com/pasquier/IDAO/WS/LogWebService")

    'Does not work, but should 
    'Set logWebServiceObject = logWebServiceClass.CreateObject("(Lcom/pasquier/IDAO/WS/LogWSDTO;)V", logWSDTOObject)

    'workaround
    Set logWebServiceObject = logWebServiceClass.CreateObject()
    Call logWebServiceObject.setLog(logWSDTOObject)
    Call logWebServiceObject.notesMain()

    Msgbox "done"

    Exit Sub
ErrorHandling:
    Msgbox Error '
    Set javaError = javaSession.getLastJavaError
    Msgbox "Java error: " + javaError.ErrorMsg 
End Sub

要查看输出消息(通过System.out.println),请通过菜单"Tools - Show控制台“打开Java控制台。有时,这个控制台不会出现,您需要重新启动lotus和designer。

票数 2
EN

Stack Overflow用户

发布于 2014-06-24 14:22:45

我没有经常使用LS2J,但在我看来,LogWSDTO类的构造函数使用一个LogWSDTO对象作为参数,但是您调用的是没有任何参数的classJava.CreateObject。我相信您应该传递一个JNI签名字符串和参数,如doc 这里所示。

票数 0
EN

Stack Overflow用户

发布于 2015-08-05 09:47:01

嗯;Domino9.0.1FP3在这个领域有一个已知的问题;这可能是根本的问题吗?您是在使用Domino或Notes的那个版本吗?见IBM http://www-01.ibm.com/support/docview.wss?uid=swg21696682

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24385613

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档