我想从worklight适配器调用java类

我已在此URL“ http://www.ibm.com/developerworks/mobile/worklight/getting-started.html#authentication ”或ftp://public.dhe.ibm.com/software/中关注此文档模块5.5 移动解决方案/工作灯/文档/ V505 / Module_05_5 _-_ Using_Java_in_Adapters.pdf

和我的代码结构一样

server/java folder name com.worklight.custonmode package name loginfunction.java java file inside com.worklight.custonmode package login java method in class loginfunction 

我从worklight适配器调用了

 function loginmodules(username, passwd) { return { result : com.worklight.custonmode.loginfunction.login() }; } 

当我打电话给我得到这样的错误

  response [/apps/services/api/Light/common/query] success: /*-secure- {"responseID":"2","errors":["Ecma Error: TypeError: Cannot call property login in object [JavaPackage com.worklight.custonmode.loginfunction]. It is not a function, it is \"object\". 

(C%3A%5CUsers%5CADMIN%5CworkspaceM11%5CMobileClient%5Cadapters%5CAdapter /适配器-impl.js#103) “],” isSuccessful “:假,” 警告 “:[],” 信息“:[]} * /

  worklight.js (line 1112) Procedure invocation error. Ecma Error: TypeError: Cannot call property login in object [JavaPackage com.worklight.custonmode.loginfunction]. It is not a function, it is "object". (C%3A%5CUsers%5CADMIN%5CworkspaceM11%5CMobileClient%5Cadapters%5CAdapter/Adapter-impl.js#103) 

我在loginfunction.java中的登录function

  public class loginfunction { public static void login() { //============== Code to adapt to your own configuration =============// String server = "https://ibm-f4acjqe8c6p:9443/dfd"; // Set the Public URI of your RRC server String JTS_Server = "https://ibm-f4acjqe8c6p:9443/jts"; //Set the public URI of your JTS server String login = "Admin"; // Set the user login String password = "Admin"; // Set the associated password //============== -------------------------------------- =============// String rootServices = server + "/rootservices"; String catalogXPath = "/rdf:Description/oslc_we:rweServiceProviders/@rdf:resource"; String serviceProviderTitleXPath = "//oslc:ServiceProvider/dcterms:title"; System.out.println(">> Example03: Print out the content of the Service Providers catalog"); System.out.println(" - Root Services URI: "+rootServices); System.out.println(" - Service Providers catalog XPath expression: "+catalogXPath); System.out.println(" - Service Provider title XPath expression: "+serviceProviderTitleXPath); System.out.println(" - Login: "+login); System.out.println(" - Password: "+password); // Setup the HttClient DefaultHttpClient httpclient = new DefaultHttpClient(); HttpUtils.setupLazySSLSupport(httpclient); // Setup the rootServices request HttpGet rootServiceDoc = new HttpGet(rootServices); rootServiceDoc.addHeader("Accept", "application/rdf+xml"); rootServiceDoc.addHeader("OSLC-Core-Version", "2.0"); try { // Request the Root Services document HttpResponse rootServicesResponse = HttpUtils.sendGetForSecureDocument( server, rootServiceDoc, login, password, httpclient,JTS_Server); if (rootServicesResponse.getStatusLine().getStatusCode() == 200) { // Define the XPath evaluation environment XPathFactory factory = XPathFactory.newInstance(); XPath xpath = factory.newXPath(); xpath.setNamespaceContext( new NamespaceContextMap(new String[] { "rdf", "http://www.w3.org/1999/02/22-rdf-syntax-ns#", "oslc_we","http://open-services.net/xmlns/we/1.0/"})); // Parse the response body to retrieve the catalog URI InputSource source = new InputSource(rootServicesResponse.getEntity().getContent()); Node attribute = (Node) (xpath.evaluate(catalogXPath, source, XPathConstants.NODE)); String serviceProvidersCatalog = attribute.getTextContent(); rootServicesResponse.getEntity().consumeContent(); // Setup the catalog request HttpGet catalogDoc = new HttpGet(serviceProvidersCatalog); catalogDoc.addHeader("Accept", "application/xml"); catalogDoc.addHeader("OSLC-Core-Version", "2.0"); // Access to the Service Providers catalog HttpResponse catalogResponse = HttpUtils.sendGetForSecureDocument( server, catalogDoc, login, password, httpclient,JTS_Server); if (catalogResponse.getStatusLine().getStatusCode() == 200) { // Define the XPath evaluation environment XPath xpath2 = factory.newXPath(); xpath2.setNamespaceContext( new NamespaceContextMap(new String[] { "oslc", "http://open-services.net/ns/core#", "dcterms","http://purl.org/dc/terms/"})); // Parse the response body to retrieve the Service Provider source = new InputSource(catalogResponse.getEntity().getContent()); NodeList titleNodes = (NodeList) (xpath2.evaluate(serviceProviderTitleXPath, source, XPathConstants.NODESET)); // Print out the title of each Service Provider int length = titleNodes.getLength(); System.out.println(">> Project Areas:"); for (int i = 0; i > \t - "+ titleNodes.item(i).getTextContent()); } } } rootServicesResponse.getEntity().consumeContent(); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } catch (XPathExpressionException e) { e.printStackTrace(); } catch (InvalidCredentialsException e) { e.printStackTrace(); } finally { // Shutdown the HTTP connection httpclient.getConnectionManager().shutdown(); } } 

}

我只想出了这个。 有趣的是,每个人都对这个问题保持沉默两个月。 对我而言,它根本不是很明显,因为它适用于某些项目,而其他项目则不然。 机器也是如此。 它会在一个地方工作,但不能在另一个地方工作(如果你不知道发生了什么)。

检查.project文件并确保其中包含正确的buildCommand标记。

  org.eclipse.jdt.core.javabuilder     org.eclipse.wst.jsdt.core.javascriptValidator     org.eclipse.wst.common.project.facet.core.builder     com.worklight.studio.plugin.WorklightProjectBuilder     org.eclipse.wst.validation.validationbuilder    

阅读更多: ECMA TypeError从Worklight适配器调用Java类

确保login()函数是公共和静态的。 查看您正在使用的培训模块的示例代码。