List 使用wso2中介器创建响应对象列表

List 使用wso2中介器创建响应对象列表,list,wso2,mediator,List,Wso2,Mediator,我创建了一个源代码为“Get”的RESTAPI。它在输入中有参数,并通过输入和输出中介将json转换为soap,然后再将soap转换为json以生成输出。 输出是对象列表。如果列表中有多个对象,则其工作正常。但是如果我有一个对象,我期望一个列表包含一个对象作为响应,但是输出只是一个对象。并且省略了列表。 我的调解人有什么问题吗 以下是JsonToSoap中介(在中介中): 一个对象的响应是: { "Response": { "LivePrices": { "Last": 1903, "P

我创建了一个源代码为“Get”的RESTAPI。它在输入中有参数,并通过输入和输出中介将json转换为soap,然后再将soap转换为json以生成输出。 输出是对象列表。如果列表中有多个对象,则其工作正常。但是如果我有一个对象,我期望一个列表包含一个对象作为响应,但是输出只是一个对象。并且省略了列表。 我的调解人有什么问题吗

以下是JsonToSoap中介(在中介中):

一个对象的响应是:

{
"Response": {
"LivePrices": {
  "Last": 1903,
  "Price": 1911,
  "Quantity": 15345096,
  "Since": "2018-07-24T00:00:00"
  }
 }
}

这是wso2 esb的预期行为,因为您所做的是使用属性“application/json”盲目地从XML转换为json,因此如果您只有多个元素,那么您将获得对象列表,如果只有一个元素,那么您将获得一个对象作为响应。 您需要使用XSLT进行如下转换

 <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs" version="2.0" xmlns:fn="http://www.w3.org/2005/xpath-functions">
        <xsl:output method="text" indent="yes" media-type="application/json" encoding="UTF-8"/>
        <xsl:strip-space elements="*"/>
        <xsl:template match="/">{ 
            "Response":{
            "LivePrices":[

            <xsl:for-each select="//LivePrices">
            {
            "Last":"<xsl:value-of select="//Last"/>" ,    
 "Price":"<xsl:value-of select="//Price"/>"        
            }

           <xsl:if test="position()!=last()">,</xsl:if> 

            </xsl:for-each>        
            ]      
            }
            }
        </xsl:template>
         </xsl:stylesheet>

{ 
“答复”:{
“现场价格”:[
{
“最后”:“,
“价格”:”
}
, 
]      
}
}

不客气,很乐意帮助:)
{
"Response": {
"LivePrices": [
  {
    "Last": 2100,
    "Price": 2075,
    "Quantity": 29252869,
    "Since": "2018-07-18T00:00:00"
  },
  {
    "Last": 2067,
    "Price": 2067,
    "Quantity": 40790,
    "Since": "2018-07-24T11:04:35"
  },
  {
    "Last": 2067,
    "Price": 2067,
    "Quantity": 40790,
    "Since": "2018-07-24T11:08:35"
   }
  ]
 }
}
{
"Response": {
"LivePrices": {
  "Last": 1903,
  "Price": 1911,
  "Quantity": 15345096,
  "Since": "2018-07-24T00:00:00"
  }
 }
}
 <?xml version="1.0" encoding="UTF-8"?> <xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs" version="2.0" xmlns:fn="http://www.w3.org/2005/xpath-functions">
        <xsl:output method="text" indent="yes" media-type="application/json" encoding="UTF-8"/>
        <xsl:strip-space elements="*"/>
        <xsl:template match="/">{ 
            "Response":{
            "LivePrices":[

            <xsl:for-each select="//LivePrices">
            {
            "Last":"<xsl:value-of select="//Last"/>" ,    
 "Price":"<xsl:value-of select="//Price"/>"        
            }

           <xsl:if test="position()!=last()">,</xsl:if> 

            </xsl:for-each>        
            ]      
            }
            }
        </xsl:template>
         </xsl:stylesheet>