i want to call a java class from the worklight ada

2019-01-20 19:42发布

i have followed this document module 5.5 in this url "http://www.ibm.com/developerworks/mobile/worklight/getting-started.html#authentication" or ftp://public.dhe.ibm.com/software/mobile-solutions/worklight/docs/v505/Module_05_5_-_Using_Java_in_Adapters.pdf

and did the same my code structure is

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

and i have called from the worklight adapter as

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

when i am calling am getting the error like this as

 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/Adapter-impl.js#103)"],"isSuccessful":false,"warnings":[],"info":[]}*/

    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)

my login function in 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();
    }
}

}

2条回答
戒情不戒烟
2楼-- · 2019-01-20 19:50

Make sure that login() function is public and static. Check out a sample code of the training module you're working with.

查看更多
Fickle 薄情
3楼-- · 2019-01-20 19:53

I just figured this out. It's funny how everyone went silent on this issue for two months. For me it wasn't obvious at all because it works in some projects and simply doesn't in others. The same is true for machines. It'll work one place, but not another (if you're not aware of what's going on).

Check your .project file and make sure it has the right buildCommand tags in it.

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

Read more at: ECMA TypeError calling Java class from Worklight adapter

查看更多
登录 后发表回答