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

Posted

技术标签:

【中文标题】基于 Java 的适配器 - 找不到返回值【英文标题】:Java based Adapter- Could not find the Return value 【发布时间】:2013-04-08 11:18:54 【问题描述】:

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

这是我的响应 JSON:

"status":200,"invocationContext":null,"invocationResult":"responseID":"16","isSuccessful":true

我看过下面的例子 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 其中 result 是适配器中 java 方法的返回值。

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

"isSuccessful": true

Java-adapter.impl 代码

function getXML() return 结果: com.worklight.javaCode.FileIOPlugin.getXML() ;

Java 类方法

公共类 FileIOPlugin 公共静态字符串 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");

【问题讨论】:

能贴出适配器代码吗? 嗯,是的,看起来不错。调用适配器的客户端代码呢? 这可能无关紧要,或者可能是在您复制代码时发生的,但成功处理程序有一个错字:“function sucessHandler”,因为它缺少一个“c”。到目前为止,我无法重现您的错误... @JeremyNortey:这是我粘贴到这里时的拼写错误。它实际上只有successHandler 。还有什么我需要添加/更改的吗? 【参考方案1】:

return 必须是一个对象。

【讨论】:

嗨..我也尝试过发送对象。但我仍然看不到在哪里可以找到返回的对象。【参考方案2】:

我尝试在最近发布的 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()
    ;

我将我的应用程序称为 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) 的结果如下所示:

"status":200,"invocationContext":null,"invocationResult":"responseID":"9","re​​sult":"SUCCESS","isSuccessful":true

invocationResult.result中有您要查找的“SUCCESS”字符串。

希望这会有所帮助 奥兰多

【讨论】:

以上是关于基于 Java 的适配器 - 找不到返回值的主要内容,如果未能解决你的问题,请参考以下文章

在 authenticationConfig.xml 中找不到 IBM Mobile First 平台 v7.1 定制安全测试

为啥在运行C#时会弹出找不到调试类型coreclr调试适配器描述符?

“找不到类型‘节点’的调试适配器。”

设备管理器里找不到网卡怎么办

Worklight 适配器找不到证书链

在 Eclipse Mars 中找不到 Tomcat 运行时 [重复]