我想打电话从工作灯适配器的Java类(i want to call a java class fro

2019-07-21 16:43发布

我按照这个文件模块5.5在这个网址“ http://www.ibm.com/developerworks/mobile/worklight/getting-started.html#authentication ”或ftp://public.dhe.ibm.com/software/移动解决方案/工作灯/文档/ 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

而我从工作灯适配器称为

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我的登录功能

  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();
    }
}

}

Answer 1:

我想通了这一点。 这很有趣,每个人如何去沉默在这个问题上两个月。 对我来说并不明显,因为在所有它的工作原理在某些项目上,只是没有在其他国家。 这同样适用于机器真。 它会工作一个地方,而不是另一个(如果你不知道发生了什么事情的)。

请检查您的项目文件,并确保它在它的右侧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类型错误调用Java类的工作灯适配器



Answer 2:

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



文章来源: i want to call a java class from the worklight adapter