我需要为 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,
加载:真});
非常感谢多米尼克