基于Java的适配器 - 找不到返回值

时间:2013-04-08 11:18:55

标签: java ibm-mobilefirst

我在worklight中使用基于java的适配器。我有一个返回字符串值的方法。我能够调用该函数,结果将转到适配器中的成功处理程序,但我无法找到有关返回值的任何信息。我无法在响应JSON中的任何位置看到返回的String。谁能帮我这个?

以下是我的回复JSON:

  

{ “状态”:200, “invocationContext”:NULL, “invocationResult”:{ “responseID”: “16”, “isSuccessful”:真}}

我见过以下例子 http://public.dhe.ibm.com/ibmdl/export/pub/software/mobile-solutions/worklight/docs/Module_05_5_-_Using_Java_in_Adapters.pdf,当我在代码示例上执行“调用适配器过程”时,我得到了这个结果。

  

{“isSuccessful”:true,“result”: - 9}   其中结果是适配器中java方法的返回值。

但是,当我为我的应用做同样的事情时,我得到以下

  

{“isSuccessful”:true}

Java-adapter.impl代码

  

function getXML(){return {result:   com.worklight.javaCode.FileIOPlugin.getXML()}; }

Java类方法

  

public class FileIOPlugin {   public static String getXML(){   返回“成功”;   }   }

function getXML()
{
var invocationData ={
adapter: 'JavaAdapter',
procedure: 'getXML'
};

WL.Client.invokeProcedure(invocationData,{
onSuccess: successHandler,
onFailure: failureHandler
)};

 function successHandler(data) {alert(JSON.stringify(data));}
 function failureHandler(data) {alert("Error to get data");}

2 个答案:

答案 0 :(得分:1)

返回需要成为一个对象。

答案 1 :(得分:0)

我尝试在最近发布的Worklight 6.0中重现您的问题,在复制和粘贴您的代码后,我发现一切正常。

我做的唯一更改是在用于调用适配器方法的invocationData对象上添加空参数。

这是我的确切代码:
FileIOPlugin.java (在server / conf下,在com.worklight.javacode包中)

package com.worklight.javacode;

public class FileIOPlugin {
    public static String getXML() {
        return "SUCCESS";
    }
}

JavaAdapter.xml (HTTP适配器定义,在适配器文件夹下)

<?xml version="1.0" encoding="UTF-8"?>
<wl:adapter name="JavaAdapter"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:wl="http://www.worklight.com/integration"
    xmlns:http="http://www.worklight.com/integration/http">

    <displayName>JavaAdapter</displayName>
    <description>JavaAdapter</description>
    <connectivity>
        <connectionPolicy xsi:type="http:HTTPConnectionPolicyType">
            <protocol>http</protocol>
            <domain>rss.cnn.com</domain>
            <port>80</port> 
            <!-- Following properties used by adapter's key manager for choosing specific certificate from key store  
            <sslCertificateAlias></sslCertificateAlias> 
            <sslCertificatePassword></sslCertificatePassword>
            -->     
        </connectionPolicy>
        <loadConstraints maxConcurrentConnectionsPerNode="2" />
    </connectivity>

    <procedure name="getXML"/>  
</wl:adapter>

JavaAdapter-impl.js (JavaAdapter.xml旁边)

function getXML() {
    return {
        result : com.worklight.javacode.FileIOPlugin.getXML()
    };
}
  

我调用了我的app javaAdapterApp,因此这些文件名为:

javaAdapterApp.js (在apps / javaAdapterApp / common / js下)

function wlCommonInit(){
}

function getXML() {
    var invocationData = {
        adapter : 'JavaAdapter',
        procedure : 'getXML',
        parameters : []
    };

    WL.Client.invokeProcedure(invocationData, {
        onSuccess : successHandler,
        onFailure : failureHandler
    });
}

function successHandler(data) {
    alert(JSON.stringify(data));
}
function failureHandler(data) {
    alert("Error to get data");
}

最后 javaAdapterApp.html (在apps / javaAdapterApp / common下)

<!DOCTYPE HTML>
<html>
        <head>
            <meta charset="UTF-8">
            <title>javaAdapterApp</title>
            <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0, user-scalable=0">
            <link rel="shortcut icon" href="images/favicon.png">
            <link rel="apple-touch-icon" href="images/apple-touch-icon.png">
            <link rel="stylesheet" href="css/javaAdapterApp.css">
            <script>window.$ = window.jQuery = WLJQ;</script>
        </head>
        <body id="content" style="display: none;">
            <button onClick="getXML()">GET XML</button>

            <script src="js/initOptions.js"></script>
            <script src="js/javaAdapterApp.js"></script>
            <script src="js/messages.js"></script>
        </body>
</html>

我在测试服务器中运行它,成功处理程序中的JSON.stringify(data)结果如下所示:

  

{ “状态”:200, “invocationContext”:NULL, “invocationResult”:{ “responseID”: “9”, “结果”: “SUCCESS”, “isSuccessful”:真}}

您正在 invocationResult.result 中找到“SUCCESS”字符串。

希望这会有所帮助
奥兰多