0

我需要为 worklight 创建一个 HTTP 适配器,但 url 必须通过参数以编程方式提供。

1)我能够传递用户/密码,但不能传递 url。有没有办法做到这一点?

我还尝试创建自己的 java 适配器来调用 REST API,它在我测试适配器时有效,但似乎我的响应不是工作灯的预期格式。我收到了这个错误:

2) BAD_PARAMETER_EXPECTED_DOCUMENT_OR_ARRAY_OF_DOCUMENT。

我的 Java 适配器返回一个 JSONArtifact (JSONObject),但似乎工作灯希望将其嵌入到另一个 JSONObject 中,例如 {"array":{...}}。有没有办法将 JSONObject 转换为 worklight 预期的格式。

    导入 org.apache.wink.json4j.JSON;
    导入 org.apache.wink.json4j.JSONArtifact;
    导入 org.apache.wink.json4j.JSONException;

private Header headerUserAgent = new Header("User-Agent", "Mozilla");
private Header headerAccept = new Header("Accept", "application/json");

私有字符串主机名;
私有字符串 baseURL;

受保护的MyHttpClient(字符串用户名,字符串用户密码,字符串主机名,字符串baseURL){
    极好的();
    凭据 defaultcreds = new UsernamePasswordCredentials(userName,
            用户密码);
    this.getState().setCredentials(AuthScope.ANY, defaultcreds);
    this.hostName = 主机名;
    this.baseURL = baseURL;
}


私有 GetMethod getGetMethod(String url) 抛出 URIException {
    GetMethod httpMethod = new GetMethod(new HttpsURL("https://"+hostName+baseURL+url).getEscapedURI());
    addCommonHeaders(httpMethod);
    返回http方法;
}
私有 JSONArtifact getResponseAsJSONObject(InputStream inputStream) 抛出 IOException {
    InputStreamReader reader = new InputStreamReader(inputStream);
    尝试 {
        JSONArtifact json = JSON.parse(reader);
        返回 json;
    } 捕捉(NullPointerException e){
        // TODO 自动生成的 catch 块
        e.printStackTrace();
    } 捕捉(JSONException e){
        // TODO 自动生成的 catch 块
        e.printStackTrace();
    }
    返回空值;
         }

适配器:

    函数getResponse(用户,密码){
        var client = new com.itdove.mypackage.MyHttpClient(user,password,"myurl","mybaseurl");
        返回 {
            数组:client.executeGet("mypath")
        };
    }

它适用于此,但此解决方案不提供服务 url 作为参数:

    函数getResponseAdapters(路径,用户名,密码){

        变量输入 = {
            方法:'get',
            返回内容类型:'json',
            标题:{
                '用户代理':'Mozilla',
                '授权': '基本'+Base64.encode(用户名+':'+密码),
            } ,
            路径:“/资源/”+路径
        };

        返回 WL.Server.invokeHttp(输入);
    }

    函数getResponse(用户名,密码){
        返回 getMySCAWSAdapters(路径、用户名、密码);
    }

收藏

                vAPPArrayAdapterOptions = {
                    名称:'myResponseAdapter',
                    代替: '',
                    消除: '',
                    添加: '',
                    加载: {
                        程序:'getResponse',
                        参数:[“用户”,“密码”],
                        键:'数组'
                    },
                    接受:功能(数据){
                        返回(data.status === 200);
                    }
                },

    ...
                    vAPPArray = wlJsonStore.initCollection(
                            "vAPPArray",
                            vAPPArraySearchFields,
                            {适配器:vAPPArrayAdapterOptions,
                            onSuccess: initCollectionSuccessCallback,
                            onFailure: initCollectionFailureCallback,
                            加载:真});

非常感谢多米尼克

4

1 回答 1

0

找到了解决方案:

首先,我使用的是 apache wink JSONArtifact 而不是 com.ibm.json.java.JSONArtifact!

其次我修改了我的收集器实现方法如下添加状态(不确定是否需要)

函数getResponse(用户,密码,主机名){
    var client = new com.itdove.mypackage.IWDHttpClient(user,password,hostname,"mypath");
    返回 {
        数组:client.executeGet("mymethod"),
        状态码:client.getStatusCode(),
        statusReason:client.getStatusReason()
    };
}

在 myCollector.js 中,在调用我的 initCollection 之前,我将用户、密码、主机名设置如下。

        参数 = [ settings.json.user, settings.json.password, settings.json.hostname ];
        myAdapterOptions.load["params"] = 参数;

于 2013-03-17T13:29:09.990 回答