我已经看到有关此问题的一些问题,但没有确定的答案。我无法从我的Worklight适配器实现中调用Java类。我用IBM Worklight Java Adapter教程中的代码替换了我的代码,并且它以完全相同的方式失败。此外,我在IBM的网站上发现了一个响应,称Java 1.7编译器可能会导致此问题,并改用Java 1.6。我验证了我在Eclipse中的编译器是Java 1.6。ECMA TypeError从Worklight适配器调用Java类
我的Java类都开始与COM(例如com.worklight.customcode)。 我已经试过调用公共静态方法(使用正确的语法)以及实例化对象并调用方法。如上所述,我也验证了我正在使用Java 1.6编译器。
下面是一些示例代码:
适配器实现的文件:
function addTwoIntegers(a,b){
return {
result: com.worklight.customcode.Calculator1.addTwoIntegers(a,b)
};
}
爪哇文件(未编辑的IBM工作灯样品): 包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;
}
}
错误控制台:
TypeError: Cannot call property addTwoIntegers in object [JavaPackage com.worklight.customcode.Calculator1]. It is not a function, it is "object". (%2FUsers%2Fhome%2Fdev%2Fapp%2Fappprj%2Fadapters%2Fadapter/adapter-impl.js#26) FWLSE0101E: Caused by: null
一些相关的问题是:
- 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
谢谢Idan。我确认将类型从int更改为Object没有任何区别。我犯了同样的错误。 – user2217751
我强烈怀疑这是Eclipse/Worklight中的类路径问题。另一个有趣的细节是,我的开发人员工作的代码(在我们的项目中已经过时)在他的机器上工作良好,但从未在我的机器上工作。我刚刚意识到这是一个类似的问题。我无法让任何Java类从JavaScript正常工作。在关于这个问题的互联网上搜索时,它看起来与类路径(或类似的配置问题)非常相似,它可以在一个人的机器上工作,而在另一个人的机器上工作而不在另一个人的机器上。有关在WL中检查配置的任何提示?我明显检查了类路径。 – user2217751
这里有一个链接到另一个似乎相关的问题(和未解决):http://stackoverflow.com/questions/15826456/ecma-error-typeerror-cannot-call-property?rq=1 – user2217751