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