enter code here我试图通过他的接口访问一个java类,我用Ls2J来创建一个类,而不是java接口,因为我不知道我是怎么做的,我有一个错误:
error : LS2J Error: Java constructor failed to execute一个想法?^^
谢谢!
我在莲花中的java类
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 {
void notesMain() throws ExceptionWS; }
我的java类:
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);
}
}我的彩票记录:
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错误:未能执行“
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 结束子对象
你能帮我吗?
发布于 2014-06-25 09:06:53
假设我们有一个包com.pasquier.IDAO.WS和下面的类/接口:
LS2J是一件奇怪的事情,它在某些情况下不起作用。当像这样报告一个不应该发生的错误时,开发人员会响应LS2J。
我们假设LogWSDTO有默认构造函数,所以我们创建它的实例:
Set logWSDTOClass = javaSession.getClass("com/pasquier/IDAO/WS/LogWSDTO")
Set logWSDTOObject = logWSDTOClass.CreateObject()然后我们创建对象,在它的构造函数中使用这个日志。
我们得到了全班:
Set logWebServiceClass = javaSession.getClass("com/pasquier/IDAO/WS/LogWebService")并打电话:
Set logWebServiceObject = logWebServiceClass.CreateObject("(Lcom/pasquier/IDAO/WS/LogWSDTO;)V", logWSDTOObject)塔-达!,那不起作用。我们得到了一个著名的"Java构造函数未能执行“。为什么?因为构造函数有一个具有正确类型的参数,因此不应该发生此错误。但是它是LS2J,我们需要忍受:)
所以,我们需要一个解决办法来解决这个问题。
我们正在修改我们的LogWebService类以声明一个默认的构造函数,并且添加了一个新的方法:
public void setLog(LogWSDTO log) {
this.logDTO = log;
}在那之后,我们会:
Set logWebServiceObject = logWebServiceClass.CreateObject()
Call logWebServiceObject.setLog(logWSDTOObject)
Call logWebServiceObject.notesMain()它起作用了。魔术。
下面列出了本示例所需的所有类/代码:
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!");
}
}package com.pasquier.IDAO.WS;
public interface ILogWebService {
void notesMain();
}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代码:
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。
发布于 2014-06-24 14:22:45
我没有经常使用LS2J,但在我看来,LogWSDTO类的构造函数使用一个LogWSDTO对象作为参数,但是您调用的是没有任何参数的classJava.CreateObject。我相信您应该传递一个JNI签名字符串和参数,如doc 这里所示。
发布于 2015-08-05 09:47:01
嗯;Domino9.0.1FP3在这个领域有一个已知的问题;这可能是根本的问题吗?您是在使用Domino或Notes的那个版本吗?见IBM http://www-01.ibm.com/support/docview.wss?uid=swg21696682
https://stackoverflow.com/questions/24385613
复制相似问题