我已经看到了许多有关此问题的问题,但没有明确的答案。我无法从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;
    }

}

控制台错误:



一些相关的问题是:
  • Ecma Error: TypeError: Cannot call property
  • i want to call a java class from the worklight adapter
  • https://www.ibm.com/developerworks/community/forums/html/topic?id=77777777-0000-0000-0000-000014867695
  • 最佳答案

    我接近了,它本身不是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!)。

    我希望这会在将来对其他人有所帮助。

    10-08 02:58