从外部应用程序调用 Worklight 适配器

Posted

技术标签:

【中文标题】从外部应用程序调用 Worklight 适配器【英文标题】:Calling Worklight adapter from external app 【发布时间】:2013-11-21 10:18:49 【问题描述】:

我已经在 Worklight 服务器上部署了适配器,并且有一些要求,我从外部调用 worklight 适配器作为休息服务器,它工作正常并根据需要返回数据,但它不是提供 json 输出,而是提供 html

<!DOCTYPE html><html><head><meta charset="UTF-8" /><title>Invoke Procedure Result</title><script src="/secure/console/js/jquery-1.6.min.js"></script><style>   textarea        width: 100%;      .textwrapper        margin: 5px 0;       padding: 3px;   </style></head><body onload="attachEvent();"><div><span id="invRes">Invocation Result of procedure: 'Authentication' from the Worklight Server</span>: </div><div id="target"><textarea rows="20">
   "RESPONSE": 

      "USER_ID": "292265"
   ,
   "errors": [
   ],
   "info": [
   ],
   "isSuccessful": true,
   "responseHeaders": 
      "Content-Length": "1195",
      "Content-Type": "text\/xml;charset=ISO-8859-1",
      "Date": "Thu, 21 Nov 2013 10:10:13 GMT",
      "Server": "Oracle GlassFish Server 3.1.2.2",
      "X-Powered-By": "Servlet\/3.0 JSP\/2.2 (Oracle GlassFish Server 3.1.2.2 Java\/Oracle Corporation\/1.7)"
   ,
   "responseTime": 4234,
   "statusCode": 200,
   "statusReason": "OK",
   "totalTime": 4235,
   "warnings": [
   ]
</textarea></div><script>function attachEvent() $('#target').ajaxError(function(e, xhr, ajaxOptions, thrownError)$(this).text("Error: Please ensure that the XML input and XSL transformation are valid and try again."););function run_xslt() var xml = $('#originalXML').val();var xsl = $('#originalXSL').val();$.post('/secure/dev/xslt','xml':xml,'xsl':xsl,function(data, textStatus, XMLHttpRequest)$('#target').empty();json = $("<textarea></textarea>");json.attr("rows",25);json.text(data);$('#target').append(json);$('#invRes').text('Result of Local XSL Transformation');,'text');</script></body></html>

在代码中,我再次从 HTML 中解析它并将 json 存储到字符串中。然后只有我可以使用它。这是下面给出的 URL,用于根据 worklight 文档从外部调用适配器。

http://WorklightServer.com/secure/dev/invoke?adapter=Reports&procedure=Authentication&parameters=%5B%5D

【问题讨论】:

您能否提供更多关于您在适配器过程中实现的内容以及从中返回的内容的信息 我已经在 worklight 6 版本上实现了适配器,并且返回类型是适配器中的 xml。如果我通过调用过程方法从 Worklight 服务器运行适配器,它会给出 json 输出,但我从 url 访问它会返回包含 json 而不是上面提供的 json 的 html。 @vishal_g 您能否提供描述该主题的 worklight 文档链接? 【参考方案1】:

从 URL 中移除 /dev/ 组件,它只是为了便于开发。没有它,您将获得 JSON。

【讨论】:

是的,它现在在删除 /dev 后给出 json,但它正在添加 /*-secure- jsonData /。当我进行 ajax 调用时,我没有得到返回数据。在浏览器上,它使用 /-secure jsondata */ 显示 json 数据。帮我解决这个问题 您将始终将 JSON 包装在 /*secure */ 中。这是为了防止使用 WL 服务器进行 XSS 攻击【参考方案2】:

我遇到了同样的问题,在阅读了 Anton 的答案后,我将 Ajax 调用的“dataType”设置为“text”,然后编辑响应以删除 /*-secure- 和 */,然后解析字符串以获取JSON“JSON.parse(theString)”

$.ajax(
            type: 'POST',
            url: ajaxURL,               
            async: true,
            cache: true,
            timeout: 5,
            dataType: "text",
            success: function(data)                    
                data = data.replace("/*-secure-","");
                data = data.replace("*/","");                   
                var dataJSON = JSON.parse(data);                    
                //Do success                
            ,
            error: function(data, statusCode)
                //Do error                  
            
        );

【讨论】:

以上是关于从外部应用程序调用 Worklight 适配器的主要内容,如果未能解决你的问题,请参考以下文章

IBM Worklight - 无法从客户端应用程序调用适配器过程

从 Worklight 6.2 升级生产 MobileFirst 7 服务器,适配器调用不起作用

Worklight - 使用 URL 从非 Worklight 应用程序调用推送通知适配器

每次打开应用程序并调用适配器调用后,Worklight 应用程序都会更新

无法从 Worklight Liberty 服务器中的 HTTP 适配器调用 java 类

Worklight 适配器部署