【问题标题】:How to transform JSON array response to xml array in esb wso2 using script mediator如何使用脚本调解器将 JSON 数组响应转换为 esb wso2 中的 xml 数组
【发布时间】:2017-12-02 16:12:49
【问题描述】:

我在我的 ESB 中获得 JSON 数组响应,但我需要使用脚本中介将其转换为 XML。 JSON 数组响应的长度是动态的。我需要遍历整个 JSON 数组长度并将其转换为 xml。请帮忙。

以下是我现在得到的 JSON 数组响应,但长度不固定。

    {
    "Results": [
        {
            "Id": 215766,
            "HostName": "xxx.xxx.xx.xxx",
            "IPAddress": "xx.xx.xxx.xxx",
            "ModelName": "HP COLOR LASERJET CP4520 SERIES",
            "SerialNumber": "JPDXG57J7Y",
            "FirmwareVersion": "07.160.6",
            "FirmwareDateCode": "2014-01-27T00:00:00Z",
            "LastContactTime": "2017-06-19T04:03:04Z",
            "TemplateSettings": {
                "ConsumablesStrategy": "Unknown",
                "LongLifeConsumablesStrategy": "Unknown"
            },
            "MacAddress": "xxx",
            "DeviceIntrinsicAttributeId": "SerialNumber",
            "ManufacturerName": "HP",
            "DeviceModelSupportTypeId": "Dat",
            "IsAmvDevice": false,
            "Guid": "3ff42b50-9d86-cf53-e053-0100007ffbe3",
            "MskuAttributeState": "Absent",
            "ActivationStatus": "Active",
            "GenuineHPCartridgeStatus": "GenuineHP",
            "HasGenuineHPCartridges": true
        },
        {
            "Id": 215757,
            "HostName": "xxx.xxx.xx.xxx",
            "IPAddress": "xx.xx.xxx.xxx",
            "ModelName": "HP COLOR LASERJET FLOW MFP M880",
            "SerialNumber": "CNCXG566XK",
            "FirmwareVersion": "2308209_000573",
            "FirmwareDateCode": "2016-08-20T00:00:00Z",
            "LastContactTime": "2017-06-19T04:02:22Z",
            "TemplateSettings": {
                "ConsumablesStrategy": "Unknown",
                "LongLifeConsumablesStrategy": "Unknown"
            },
            "MacAddress": "xxx",
            "DeviceIntrinsicAttributeId": "SerialNumber",
            "ManufacturerName": "HP",
            "DeviceModelSupportTypeId": "Dat",
            "IsAmvDevice": false,
            "Guid": "3bf42b50-c03b-863a-e053-0100007fad51",
            "MskuAttributeState": "Absent",
            "ActivationStatus": "Active",
            "GenuineHPCartridgeStatus": "CartridgeInBadState",
            "HasGenuineHPCartridges": true
        },
        {
            "Id": 215763,
            "HostName": null,
            "IPAddress": "xxx.xxx.xx.xxx",
            "ModelName": "HP COLOR LASERJET FLOW MFP M880",
            "SerialNumber": "CNDVGCS0LP",
            "FirmwareVersion": "2308209_000573",
            "FirmwareDateCode": "2016-08-20T00:00:00Z",
            "LastContactTime": "2017-06-19T04:03:11Z",
            "TemplateSettings": {
                "ConsumablesStrategy": "Unknown",
                "LongLifeConsumablesStrategy": "Unknown"
            },
            "MacAddress": "xxxx",
            "DeviceIntrinsicAttributeId": "SerialNumber",
            "ManufacturerName": "HP",
            "DeviceModelSupportTypeId": "Dat",
            "IsAmvDevice": false,
            "Guid": "3cf42b50-d977-d237-e053-0100007fae25",
            "MskuAttributeState": "Absent",
            "ActivationStatus": "Active",
            "GenuineHPCartridgeStatus": "GenuineHP",
            "HasGenuineHPCartridges": true
        },
        {
            "Id": 215762,
            "HostName": "xxx.xxx.xx.xxx",
            "IPAddress": "xx.xx.xxx.xxx",
            "ModelName": "HP LASERJET M4345 MFP",
            "SerialNumber": "CNCJ94000H",
            "FirmwareVersion": "48.306.1",
            "FirmwareDateCode": "2014-07-22T00:00:00Z",
            "LastContactTime": "2017-06-19T04:05:08Z",
            "TemplateSettings": {
                "ConsumablesStrategy": "Unknown",
                "LongLifeConsumablesStrategy": "Unknown"
            },
            "MacAddress": "xxx",
            "DeviceIntrinsicAttributeId": "SerialNumber",
            "ManufacturerName": "HP",
            "DeviceModelSupportTypeId": "Dat",
            "IsAmvDevice": false,
            "Guid": "3bf42b50-c13b-863a-e053-0100007fad51",
            "MskuAttributeState": "Absent",
            "ActivationStatus": "Active",
            "GenuineHPCartridgeStatus": "GenuineHP",
            "HasGenuineHPCartridges": true
        },
        {
            "Id": 215759,
            "HostName": "xxx.xxx.xx.xxx",
            "IPAddress": "xx.xx.xxx.xxx",
            "ModelName": "HP LASERJET M4345 MFP",
            "SerialNumber": "CNCJ98L01X",
            "FirmwareVersion": "48.306.1",
            "FirmwareDateCode": "2014-07-22T00:00:00Z",
            "LastContactTime": "2017-06-19T04:04:07Z",
            "TemplateSettings": {
                "ConsumablesStrategy": "Unknown",
                "LongLifeConsumablesStrategy": "Unknown"
            },
            "MacAddress": "xxx",
            "DeviceIntrinsicAttributeId": "SerialNumber",
            "ManufacturerName": "HP",
            "DeviceModelSupportTypeId": "Dat",
            "IsAmvDevice": false,
            "Guid": "3df42b50-a14a-a05b-e053-0100007f3f94",
            "MskuAttributeState": "Absent",
            "ActivationStatus": "Active",
            "GenuineHPCartridgeStatus": "NotSupported",
            "HasGenuineHPCartridges": true
        },
        {
            "Id": 224984,
            "HostName": "xxx.xxx.xx.xxx",
            "IPAddress": "xx.xx.xxx.xxx",
            "ModelName": "HP LASERJET M506",
            "SerialNumber": "PHCJQ00233",
            "FirmwareVersion": "2308209_000567",
            "FirmwareDateCode": "2016-08-20T00:00:00Z",
            "LastContactTime": "2017-06-16T04:09:27Z",
            "TemplateSettings": {
                "ConsumablesStrategy": "Unknown",
                "LongLifeConsumablesStrategy": "Unknown"
            },
            "MacAddress": "xxx",
            "DeviceIntrinsicAttributeId": "SerialNumber",
            "ManufacturerName": "HP",
            "DeviceModelSupportTypeId": "Dat",
            "IsAmvDevice": false,
            "Guid": "7aa4ca50-6303-7404-e053-0100007f7e65",
            "MskuAttributeState": "Absent",
            "ActivationStatus": "Active",
            "GenuineHPCartridgeStatus": "GenuineHP",
            "HasGenuineHPCartridges": true
        },
        {
            "Id": 215758,
            "HostName": "xxx.xxx.xx.xxx",
            "IPAddress": "xx.xx.xxx.xxx",
            "ModelName": "HP LASERJET M9040 MFP",
            "SerialNumber": "JPCXDDSBQH",
            "FirmwareVersion": "51.320.4",
            "FirmwareDateCode": "2017-01-24T00:00:00Z",
            "LastContactTime": "2017-06-19T04:02:03Z",
            "TemplateSettings": {
                "ConsumablesStrategy": "Unknown",
                "LongLifeConsumablesStrategy": "Unknown"
            },
            "MacAddress": "xxx",
            "DeviceIntrinsicAttributeId": "SerialNumber",
            "ManufacturerName": "HP",
            "DeviceModelSupportTypeId": "Dat",
            "IsAmvDevice": false,
            "Guid": "3cf42b50-d877-d237-e053-0100007fae25",
            "MskuAttributeState": "Absent",
            "ActivationStatus": "Active",
            "GenuineHPCartridgeStatus": "GenuineHP",
            "HasGenuineHPCartridges": true
        },
        {
            "Id": 215761,
            "HostName": null,
            "IPAddress": "xx.xx.xxx.xxx",
            "ModelName": "HP LASERJET P4515",
            "SerialNumber": "CNFY193829",
            "FirmwareVersion": "04.049.3",
            "FirmwareDateCode": "2009-09-25T00:00:00Z",
            "LastContactTime": "2017-06-14T03:55:39Z",
            "TemplateSettings": {
                "ConsumablesStrategy": "Unknown",
                "LongLifeConsumablesStrategy": "Unknown"
            },
            "MacAddress": "xxx",
            "DeviceIntrinsicAttributeId": "SerialNumber",
            "ManufacturerName": "HP",
            "DeviceModelSupportTypeId": "Dat",
            "IsAmvDevice": false,
            "Guid": "3ff42b50-9b86-cf53-e053-0100007ffbe3",
            "MskuAttributeState": "Absent",
            "ActivationStatus": "Active",
            "GenuineHPCartridgeStatus": "GenuineHP",
            "HasGenuineHPCartridges": true
        },
        {
            "Id": 240970,
            "HostName": "xxx.xxx.xx.xxx",
            "IPAddress": "xx.xx.xxx.xxx",
            "ModelName": "HP MFP S975DN",
            "SerialNumber": "5100008X00",
            "FirmwareVersion": "H1.07.t1.00",
            "FirmwareDateCode": null,
            "LastContactTime": "2017-06-14T05:58:08Z",
            "TemplateSettings": {
                "ConsumablesStrategy": "Unknown",
                "LongLifeConsumablesStrategy": "Unknown"
            },
            "MacAddress": "xxx",
            "DeviceIntrinsicAttributeId": "SerialNumber",
            "ManufacturerName": "HP",
            "DeviceModelSupportTypeId": "Dat",
            "IsAmvDevice": false,
            "Guid": "6c8b4351-1f83-b873-e053-0100007ffdc5",
            "MskuAttributeState": "Absent",
            "ActivationStatus": "Active",
            "GenuineHPCartridgeStatus": "NotAttempted",
            "HasGenuineHPCartridges": true
        },
        {
            "Id": 224986,
            "HostName": "xxx.xxx.xx.xxx",
            "IPAddress": "xx.xx.xxx.xxx",
            "ModelName": "HP PAGEWIDE PRO MFP 777HC",
            "SerialNumber": "MY73H5E00H",
            "FirmwareVersion": "LIMOFWMP2A006.1720B.00",
            "FirmwareDateCode": "2017-05-11T00:00:00Z",
            "LastContactTime": "2017-06-14T03:55:40Z",
            "TemplateSettings": {
                "ConsumablesStrategy": "Unknown",
                "LongLifeConsumablesStrategy": "Unknown"
            },
            "MacAddress": null,
            "DeviceIntrinsicAttributeId": "SerialNumber",
            "ManufacturerName": "HP",
            "DeviceModelSupportTypeId": "Dat",
            "IsAmvDevice": false,
            "Guid": "7aa4ca50-6503-7404-e053-0100007f7e65",
            "MskuAttributeState": "Absent",
            "ActivationStatus": "Active",
            "GenuineHPCartridgeStatus": "NotAttempted",
            "HasGenuineHPCartridges": true
        }
    ]
}

【问题讨论】:

  • 您可以使用 Jackson Plugin 实现此目的,非常简单快捷
  • 我在 ESB WSO2 中进行转换,所以我将不得不使用脚本中介。
  • 好吧...我只是不知道
  • 最好使用XSLT...1-从json转换为xml,2-创建xslt转换并在esb中使用。
  • 因为,我有 json 数组,所以我将不得不使用脚本中介。我已经编写了脚本中介代码,但现在我收到错误,因为“脚本引擎返回执行内联 js 脚本的错误函数调解 {org.apache.synapse.mediators.bsf.ScriptMediator} com.sun.phobos.script.util.ExtendedScriptException: org.mozilla.javascript.EcmaError: TypeError: Cannot read property "length" from undefined ( #4) 在 的第 4 行,com.sun.phobos.script.javascript.RhinoCompiledScript.eval(RhinoCompiledScript.java:68)"......你有什么想法吗?跨度>

标签: json xml wso2 transform esb


【解决方案1】:

如果将messageType 属性添加到out 序列,它应该会自动将消息转换为XML。

<outSequence>
    <property name="messageType" value="application/xml" scope="axis2"/>
    <send/>
</outSequence>

【讨论】:

    【解决方案2】:

    我的 xml 响应应该如下所示

         <body>
       <p:jacdevice_batch_req xmlns:p="http://ws.wso2.org/dataservice">
          <!--1 or more occurrences-->
          <p:jacdevice xmlns:p="http://ws.wso2.org/dataservice">
          <!--Exactly 1 occurrence-->
          <xs:JACDeviceId xmlns:xs="http://ws.wso2.org/dataservice">1</xs:JACDeviceId>
          <!--Exactly 1 occurrence-->
          <xs:Make xmlns:xs="http://ws.wso2.org/dataservice">HP</xs:Make>
          <!--Exactly 1 occurrence-->
          <xs:Model xmlns:xs="http://ws.wso2.org/dataservice">HP CM8060 Color MFP</xs:Model>
          <!--Exactly 1 occurrence-->
          <xs:SerialNumber xmlns:xs="http://ws.wso2.org/dataservice">SerialNumberZ</xs:SerialNumber>
          <!--Exactly 1 occurrence-->
          <xs:IPv4 xmlns:xs="http://ws.wso2.org/dataservice">IPV4z</xs:IPv4>
          <!--Exactly 1 occurrence-->
          <xs:MAC xmlns:xs="http://ws.wso2.org/dataservice">MACZZ</xs:MAC>
          <!--Exactly 1 occurrence-->
          <xs:Hostname xmlns:xs="http://ws.wso2.org/dataservice">HOST NAMEZ</xs:Hostname>
          <!--Exactly 1 occurrence-->
          <xs:FirstScanDate xmlns:xs="http://ws.wso2.org/dataservice">2017-06-06 10:33:42.773</xs:FirstScanDate>
          <!--Exactly 1 occurrence-->
          <xs:LastScanDate xmlns:xs="http://ws.wso2.org/dataservice">2017-06-06 10:33:42.773</xs:LastScanDate>
          <!--Exactly 1 occurrence-->
          <xs:Managed xmlns:xs="http://ws.wso2.org/dataservice">1</xs:Managed>
          <!--Exactly 1 occurrence-->
          <xs:LastAttemptedContactTime xmlns:xs="http://ws.wso2.org/dataservice">2017-06-06 10:33:42.773</xs:LastAttemptedContactTime>
          <!--Exactly 1 occurrence-->
          <xs:CredentialProfileStatus xmlns:xs="http://ws.wso2.org/dataservice">aa</xs:CredentialProfileStatus>
          <!--Exactly 1 occurrence-->
          <xs:JACCredentialProfileId xmlns:xs="http://ws.wso2.org/dataservice">1</xs:JACCredentialProfileId>
          <!--Exactly 1 occurrence-->
          <xs:FirmwareVersion xmlns:xs="http://ws.wso2.org/dataservice">bb</xs:FirmwareVersion>
          <!--Exactly 1 occurrence-->
          <xs:FirmwareDateCode xmlns:xs="http://ws.wso2.org/dataservice">cc</xs:FirmwareDateCode>
          <!--Exactly 1 occurrence-->
          <xs:JACAccountID xmlns:xs="http://ws.wso2.org/dataservice">3113</xs:JACAccountID>
       </p:jacdevice>
        <p:jacdevice xmlns:p="http://ws.wso2.org/dataservice">
          <!--Exactly 1 occurrence-->
          <xs:JACDeviceId xmlns:xs="http://ws.wso2.org/dataservice">9</xs:JACDeviceId>
          <!--Exactly 1 occurrence-->
          <xs:Make xmlns:xs="http://ws.wso2.org/dataservice">HPjj</xs:Make>
          <!--Exactly 1 occurrence-->
          <xs:Model xmlns:xs="http://ws.wso2.org/dataservice">HP CM8060 Color MFPjj</xs:Model>
          <!--Exactly 1 occurrence-->
          <xs:SerialNumber xmlns:xs="http://ws.wso2.org/dataservice">SerialNumberkkZ</xs:SerialNumber>
          <!--Exactly 1 occurrence-->
          <xs:IPv4 xmlns:xs="http://ws.wso2.org/dataservice">IPV4zjj</xs:IPv4>
          <!--Exactly 1 occurrence-->
          <xs:MAC xmlns:xs="http://ws.wso2.org/dataservice">MACZZjj</xs:MAC>
          <!--Exactly 1 occurrence-->
          <xs:Hostname xmlns:xs="http://ws.wso2.org/dataservice">HOST NAMEjjZ</xs:Hostname>
          <!--Exactly 1 occurrence-->
          <xs:FirstScanDate xmlns:xs="http://ws.wso2.org/dataservice">2017-06-06 10:33:42.773</xs:FirstScanDate>
          <!--Exactly 1 occurrence-->
          <xs:LastScanDate xmlns:xs="http://ws.wso2.org/dataservice">2017-06-06 10:33:42.773</xs:LastScanDate>
          <!--Exactly 1 occurrence-->
          <xs:Managed xmlns:xs="http://ws.wso2.org/dataservice">1</xs:Managed>
          <!--Exactly 1 occurrence-->
          <xs:LastAttemptedContactTime xmlns:xs="http://ws.wso2.org/dataservice">2017-06-06 10:33:42.773</xs:LastAttemptedContactTime>
          <!--Exactly 1 occurrence-->
          <xs:CredentialProfileStatus xmlns:xs="http://ws.wso2.org/dataservice">aa</xs:CredentialProfileStatus>
          <!--Exactly 1 occurrence-->
          <xs:JACCredentialProfileId xmlns:xs="http://ws.wso2.org/dataservice">1</xs:JACCredentialProfileId>
          <!--Exactly 1 occurrence-->
          <xs:FirmwareVersion xmlns:xs="http://ws.wso2.org/dataservice">bb</xs:FirmwareVersion>
          <!--Exactly 1 occurrence-->
          <xs:FirmwareDateCode xmlns:xs="http://ws.wso2.org/dataservice">cc</xs:FirmwareDateCode>
          <!--Exactly 1 occurrence-->
          <xs:JACAccountID xmlns:xs="http://ws.wso2.org/dataservice">3113</xs:JACAccountID>
       </p:jacdevice>
       </p:jacdevice_batch_req>
    </body>
    

    【讨论】:

      【解决方案3】:

      我通过编写下面的代码让它工作了。

      <script language="js"><![CDATA[
                     var   payload = mc.getPayloadJSON();
         var results = payload.Results;
          var response = <locations/>;
          for (i = 0; i < results.length; ++i) {
              var elem = results[i];
              response.locations += <jacdevice>
                  <JACDeviceId>{elem.Id}</JACDeviceId>
                  <Make>{elem.ManufacturerName}</Make>
                  <Model>{elem.ModelName}</Model>
              </jacdevice>
          }
          mc.setPayloadXML(response);
                      ]]></script>
      

      【讨论】:

        猜你喜欢
        • 2021-05-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-12
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多