2013-03-15 75 views
0

我按照这个文件模块5.5在这个网址“http://www.ibm.com/developerworks/mobile/worklight/getting-started.html#authentication”或ftp://public.dhe.ibm.com/software/mobile-solutions/worklight/docs/v505/Module_05_5_-_Using_Java_in_Adapters.pdf我想从工作灯适配器

,并做了同样的我的代码结构调用Java类是

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

和我从工作灯适配器称为

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 “:假,” 警告 “:[],” 信息” :[]} *在loginfunction.java

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 < length; i++) { 
        System.out.println(">> \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(); 
    } 
} 

/

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) 

我的登录功能}

+0

不是一个答案,但看看下面会给你任何提示(见问题的答案:http://stackoverflow.com/questions/15392206/programmatically -modify-credential-in-worklight-adapter) – 2013-03-15 09:09:54

+0

登录是静态方法吗?你可以发布loginToRM.java吗? – longhua 2013-03-15 09:11:17

+0

另请检查是否有名称为“登录”的字段。 – longhua 2013-03-15 09:18:42

回答

0

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

+0

我已经发布我的登录功能以上,它是静态的,也公开 – anilgontla 2013-03-18 11:36:34

+0

任何帮助,请提前致谢 – anilgontla 2013-03-20 05:20:58

3

我刚才明白了这一点。每个人都在这个问题上沉默了两个月,这很有趣。对我而言,这根本不明显,因为它适用于某些项目,而不适用于其他项目。机器也是如此。它可以工作在一个地方,但不是另一个地方(如果你不知道发生了什么)。

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

<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> 

更多详情:ECMA TypeError calling Java class from Worklight adapter