Ho visto una serie di domande su questo problema ma nessuna risposta conclusiva. Sto riscontrando problemi nel chiamare una classe Java dall'implementazione dell'adattatore Worklight. Ho sostituito il mio codice con il codice dell'esercitazione IBM Worklight Java Adapter e ha esito negativo nello stesso modo. Inoltre ho trovato una risposta sul sito di IBM dicendo che il compilatore Java 1.7 potrebbe causare questo problema e utilizzare Java 1.6. Ho convalidato che il mio compilatore in Eclipse è Java 1.6.ECMA TypeError che chiama classe Java dall'adattatore Worklight
classi Java mio iniziano tutti con com (ad esempio com.worklight.customcode). Ho provato sia a chiamare metodi statici pubblici (usando la sintassi corretta) sia a istanziare l'oggetto e chiamare il metodo. Come detto sopra, ho anche convalidato che sto usando il compilatore Java 1.6.
Ecco alcuni esempi di codice:
adattatore file di implementazione:
function addTwoIntegers(a,b){
return {
result: com.worklight.customcode.Calculator1.addTwoIntegers(a,b)
};
}
file di Java (campione inedito IBM Worklight): pacchetto 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;
}
}
Problemi con la console:
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
Alcune delle domande relative sono:
- 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
Grazie Idan. Ho verificato che la modifica del tipo da int a Object non ha fatto alcuna differenza. Ho fatto lo stesso errore. – user2217751
Sospetto fortemente che si tratti di un problema di classpath con Eclipse/Worklight. Un altro dettaglio interessante è che il codice che uno dei miei sviluppatori ha funzionato (che è obsoleto nel nostro progetto ora) ha funzionato bene sulla sua macchina ma non ha mai fatto il mio. Ho appena realizzato che si trattava di un problema simile. Non riesco a far funzionare QUALSIASI classe Java da JavaScript. Nel setacciare Internet per quanto riguarda questo problema, sembra molto simile a un classpath (o simile problema di configurazione) in cui funziona sulla macchina di una persona, ma non su quella di un'altra persona. Qualche consiglio su dove controllare la configurazione in WL? Ho ovviamente controllato il classpath. – user2217751
Ecco un collegamento a un'altra domanda che sembra correlata (e non risolta): http://stackoverflow.com/questions/15826456/ecma-errortypeerror-cannot-call-property?rq=1 – user2217751