如何在适配器中对输入请求执行xslt转换

时间:2014-11-17 13:25:25

标签: xslt ibm-mobilefirst worklight-adapters worklight-server

我为XSLT创建了一个WL.Server.invokeHttp,它以XML格式从后端服务器获取数据并成功执行转换。此适配器用于从后端服务器获取数据。

但是在以XML格式向服务器发送数据时,由于我将适配器中的数据作为JSON获取,我需要使用XSLT将其转换为XML。

在ibm worklight适配器中是否有任何规定我可以对输入请求执行XSLT转换,就像我从后端服务器获取响应时可以轻松完成的那样。

我在这里解释返回数据(即响应)

例如,

如果我想获取所有员工的数据,我将调用一个适配器,即getEmpDetails,它以XML格式返回数据,但我不想显示从后端服务器返回的所有字段,所以我使用XSLT过滤特定数据,我的移动应用程序在JSON中使用它,所以我也转换为JSON格式。

来自服务器的数据

<Employee>
    <EmpName>Jhon Methew</EmpName>
    <EmpId>1234</EmpId>
    <EmpDepartment>Accounts</EmpDepartment>
</Employee>
<Employee>
    <EmpName>James</EmpName>
    <EmpId>4434</EmpId>
    <EmpDepartment>Sales</EmpDepartment>        
</Employee>
<Employee>
    <EmpName>Anna</EmpName>
    <EmpId>3344</EmpId>
    <EmpDepartment>Business Development</EmpDepartment>
</Employee>

通过在适配器中分配XSLT进行转换后,我得到了以下数据

"array":{

      "employee":[{

         "empname":"John Methew",
         "empdept":"Accounts"


       },{

         "empname":"Anna",
         "empdept":"Business Development"


       }],

}

现在,如果我想通过createEmp adatper添加新员工,那么我需要从移动设备传递JSON格式的输入请求以创建新员工,我的适配器需要将此请求转换为XML(此处,我想要一个XSLT过滤器,就像我在getEmpDetails适配器中一样。)

输入创建员工的请求

"employee":{

             "empname":"Rahul",
             "empdept":"Softwares",
             "empid":"4233",
             "emppay":"20k"


           }

适配器将接受响应,并需要将上面的JSON输入请求转换为XML,所以我问工作灯是否有任何规定来转换传入的请求?

<Employee>
        <EmpName>Rahul</EmpName>
        <EmpId>4233</EmpId>
        <EmpDepartment>Softwares</EmpDepartment>
        <EmpPayment>20K</EmpPayment>
</Employee>

1 个答案:

答案 0 :(得分:1)

XSLT没有将XML转换为JSON。 XSLT将XML转换为另一种XML而不是JSON。

一旦您的适配器从后端检索XML,WL服务器基础结构将自动将其转换为JSON。如果您定义了XSLT,则从后端检索的原始XML将首先根据XSLT转换为新的XML,然后将新的XML转换为JSON。

在WL适配器中没有可以将JSON对象转换为XML字符串的开箱即用的API。你可以在这里遵循两种不同的方法

  1. 使用第三方Java / JavaScript库将JSON转换为XML,例如https://code.google.com/p/x2js/http://www.json.org/java/。您可以在此处阅读有关在适配器中使用Java的更多信息http://www.ibm.com/developerworks/mobile/worklight/getting-started.html,搜索“在适配器中使用Java”

  2. 手动创建XML模板并使用JSON中的值填充它们。请参阅http://public.dhe.ibm.com/software/mobile-solutions/worklight/docs/v620/04_02_HTTP_adapter_-_Communicating_with_HTTP_back-end_systems.pdf的第18页以及。使用{myJsonObject.propertyName}将值注入XML。