ESB WSO2 -在数据源查询中使用ARRAY作为paramType



我想发送一个请求到我的api,像这样:

{
"id": "22",
"code": "AXB23, ADR40, SMRS2"
}

我想在查询中使用每个代码,如"SELECT…在那里……IN(AXB23, ADR40, SMRS2)"但我不知道怎么做到的。我在这里找到了<param type="IN" name="code" paramType="ARRAY" sqlType="STRING"/>的解但这行不通。有什么建议吗?

编辑*:这是我的api (inSequence -忘记id从请求在原始帖子,我只是只有那个"代码")

<inSequence>
<property expression="json-eval($..code)" name="code" scope="default" type="STRING"/>
<payloadFactory media-type="xml">
<format>
<selectTEST xmlns:xs="http://ws.wso2.org/dataservice/selectTEST">
<code>$1</code>
</selectTEST>
</format>
<args>
<arg evaluator="xml" expression="$ctx:code"/>
</args>
</payloadFactory>

<property name="messageType" scope="axis2" type="STRING" value="text/xml"/>
<header name="Action" scope="default" value="selectTEST"/>
<call>
<endpoint key="ep.select"/>
</call>
<property name="messageType" scope="axis2" type="STRING" value="application/json"/>

<respond/>
</inSequence>

,这是我的数据服务:

<operation name="selectTEST" returnRequestStatus="true">
<call-query href="selectTEST">
<with-param name="code" query-param="code"/>
</call-query>
</operation>
<query id="selectTEST" useConfig="default">
<sql><![CDATA[
select x, y, z, w from mydatabase where code in (:code)
]]></sql>
<param type="IN" name="code" paramType="ARRAY" sqlType="STRING"/>
<result outputType="json">
{
"data": {
"records": [
{
"x": "$x",
"y": "$y",
"z": "$z",
"w": "$w"
}
]
}
}
</result>
</query>

我的请求:

{ 
"code": ["AXB23", "ADR40"]
}

如果您正在使用数组类型参数,您应该将值作为适当的JSON数组传递。像这样的东西会对你有用的。

请求:

{
"_poststudent": {
"code": ["AXB23","ADR40"]
}
}

Dataservice查询

<query id="CreateStudents" useConfig="default">
<sql>SELECT id, name, school, grade FROM students WHERE grade IN (:code)</sql>
<param name="code" paramType="ARRAY" sqlType="STRING" type="IN" optional="false" />
<result outputType="json">{"students":{"student":[{"name":"$name","school":"$school","grade":"$grade"}]}}{"students":{"student":[{"name":"$name","school":"$school","grade":"$grade"}]}}{"students":{"student":[{"name":"$name","school":"$school","grade":"$grade"}]}}{"students":{"student":[{"name":"$name","school":"$school",                        "grade":"$grade"}]}}{"students":{"student":[{"name":"$name","school":"$school","grade":"$grade"}]}}{"students":{"student":[{"name":"$name","school":"$school","grade":"$grade"}]}}{"students":{"student":[{"name":"$name","school":"$school", "grade":"$grade"} ] }}{"students":{"student":[{"name":"$name","school":"$school","grade":"$grade"} ] } }</result>
</query>

Full Dataservice配置。

<data name="RESTDataService" serviceNamespace="http://ws.wso2.org/dataservice/samples/json_sample" transports="http https">
<description>Exposing the data service as a REST service.</description>
<config id="default">
<property name="driverClassName">com.mysql.jdbc.Driver</property>
<property name="url">jdbc:mysql://localhost:3306/school_db</property>
<property name="org.wso2.ws.dataservice.user">xxxxx</property>
<property name="org.wso2.ws.dataservice.password">xxxxx</property>
</config>
<resource method="POST" path="student">
<call-query href="ReadStudents">
<with-param name="code" query-param="code" />
</call-query>
</resource>
<operation name="selectTEST" returnRequestStatus="true">
<call-query href="ReadStudents">
<with-param name="code" query-param="code" />
</call-query>
</operation>
<query id="ReadStudents" useConfig="default">
<sql>SELECT id, name, school, grade FROM students WHERE grade IN (:code)</sql>
<param name="code" paramType="ARRAY" sqlType="STRING" type="IN" optional="false" />
<result outputType="json">{               "students":{                  "student":[                     {                        "name":"$name",                        "school":"$school",                        "grade":"$grade"                     }                  ]               }            }      {               "students":{                  "student":[                     {                        "name":"$name",                        "school":"$school",                        "grade":"$grade"                     }                  ]               }            }      {               "students":{                  "student":[                     {                        "name":"$name",                        "school":"$school",                        "grade":"$grade"                     }                  ]               }            }      {               "students":{                  "student":[                     {                        "name":"$name",                        "school":"$school",                        "grade":"$grade"                     }                  ]               }            }      {               "students":{                  "student":[                     {                        "name":"$name",                        "school":"$school",                        "grade":"$grade"                     }                  ]               }            }      {               "students":{                  "student":[                     {                        "name":"$name",                        "school":"$school",                        "grade":"$grade"                     }                  ]               }            }      {               "students":{                  "student":[                     {                        "name":"$name",                        "school":"$school",                        "grade":"$grade"                     }                  ]               }            }      {               "students":{                  "student":[                     {                        "name":"$name",                        "school":"$school",                        "grade":"$grade"                     }                  ]               }            }      {               "students":{                  "student":[                     {                        "name":"$name",                        "school":"$school",                        "grade":"$grade"                     }                  ]               }            }      {               "students":{                  "student":[                     {                        "name":"$name",                        "school":"$school",                        "grade":"$grade"                     }                  ]               }            }      {               "students":{                  "student":[                     {                        "name":"$name",                        "school":"$school",                        "grade":"$grade"                     }                  ]               }            }      {               "students":{                  "student":[                     {                        "name":"$name",                        "school":"$school",                        "grade":"$grade"                     }                  ]               }            }      {               "students":{                  "student":[                     {                        "name":"$name",                        "school":"$school",                        "grade":"$grade"                     }                  ]               }            }      {               "students":{                  "student":[                     {                        "name":"$name",                        "school":"$school",                        "grade":"$grade"                     }                  ]               }            }      {               "students":{                  "student":[                     {                        "name":"$name",                        "school":"$school",                        "grade":"$grade"                     }                  ]               }            }      {               "students":{                  "student":[                     {                        "name":"$name",                        "school":"$school",                        "grade":"$grade"                     }                  ]               }            }      </result>
</query>
</data>

注意,我指定了一个<resource method="POST" path="student">。资源用于rest调用,<operation name="selectTEST" returnRequestStatus="true">用于SOAP调用。我已经创建了RestFul和SOAP服务供您参考。下面是如何调用它们的方法。

注意:这里我直接调用Dataservice。

restful调用。

curl --location --request POST 'http://localhost:8290/services/RESTDataService/student' 
--header 'Content-Type: application/json' 
--data-raw '{
"students": {
"code": ["AXB23", "ADR40"]
}
}'

SOAP服务调用

curl --location --request POST 'http://localhost:8290/services/RESTDataService/selectTEST' 
--header 'Action: selectTEST' 
--header 'Content-Type: text/xml' 
--header 'Accept: application/json' 
--data-raw '<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope/">
<soap:Body>
<code>AXB23</code>
<code>ADR40</code>
</soap:Body>
</soap:Envelope>'

注意:在XML消息中,Array被描述为如上所示的重复元素。

最新更新