我已经看到了许多有关此问题的问题,但没有明确的答案。我无法从Worklight适配器实现中调用Java类。我用IBM Worklight Java Adapter教程中的代码替换了我的代码,但它以完全相同的方式失败。此外,我在IBM网站上找到了一个答复,说Java 1.7编译器可能会导致此问题,而改用Java 1.6。我验证了我在Eclipse中的编译器是Java 1.6。
我的Java类都以com开头(例如com.worklight.customcode)。
我尝试了调用公共(public)静态方法(使用正确的语法)以及实例化对象和调用该方法。如上所述,我还验证了我在使用Java 1.6编译器。
以下是一些代码示例:
适配器实现文件:
function addTwoIntegers(a,b){
return {
result: com.worklight.customcode.Calculator1.addTwoIntegers(a,b)
};
}
Java文件(未经编辑的IBM Worklight示例):
包com.worklight.customcode;
import java.util.logging.Logger;
public class Calculator1 {
private final static Logger logger = Logger.getLogger(Calculator1.class.getName());
public static int addTwoIntegers(int first, int second){
logger.info("addTwoIntegers invoked");
return first + second;
}
public int subtractTwoIntegers(int first, int second){
logger.info("subtractTwoIntegers invoked");
return first - second;
}
}
控制台错误:
一些相关的问题是:
最佳答案
我接近了,它本身不是CLASSPATH,而是(显然)是Eclipse项目设置。
经过一个星期或更长时间的反复尝试之后,我编辑了.project文件,以包含项目中没有的某些buildCommand标记。在该部分中添加以下buildCommands允许我的代码在重新启动Eclipse之后从JavaScript启动Java类。
<buildSpec>
<buildCommand>
<name>org.eclipse.jdt.core.javabuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.wst.jsdt.core.javascriptValidator</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.wst.common.project.facet.core.builder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>com.worklight.studio.plugin.WorklightProjectBuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>org.eclipse.wst.validation.validationbuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
.project文件位于Worklight项目主目录的根目录中(例如myproject/.project)。我最终通过运行一个确实从JavaScript调用Java的工作项目来弄清楚了这一点。
参见http://www.ibm.com/developerworks/rational/library/server-side-mobile-application-development-1/
我将代码逐字复制到我的项目中,并且其行为与我的代码相同。我将代码复制到该项目,并且我的代码正常工作(!!)。然后,我比较了类路径,它们有些不同,但是并没有改变行为。我检查了.project文件,发现我的文件上面没有buildCommand标记。相反,我的文件具有许多externalToolBuilding标记,大概是因为我们团队中的一个人使用的是除Eclipse之外的IDE,并且他的.project成为了该项目中的一个。 (如果重要的话,我认为是Sublime)。
我不太了解所有这些标签的作用的全部细节,也不完全了解Worklight和Eclipse如何以及为什么因此改变它们的行为(或者为什么它们首先消失了)。但是,这使我的代码正常工作。这只花了我一周的工作时间(ack!)。
我希望这会在将来对其他人有所帮助。