WSO2 API配置,查询参数到负载工厂到json到数据服务



我在理解如何将查询参数传递给创建json的有效负载工厂,然后将其数据传递给数据服务时遇到了一些问题。我认为正确的配置是

<payloadFactory media-type="json">
<format>{"cod_uo" : "$1"}</format>
<args>
<arg evaluator="xml" expression="get-property('query.param.id')"/>
</args>
</payloadFactory>
<log>
<property expression="json-eval($.cod_uo)" name="string"/>
</log>
<dataServiceCall description="GET operation" serviceName="MyService">
<operations type="single">
<operation name="MyOperationName">
---> <param evaluator="xml" expression="json-eval('$.cod_uo')" name="cod_uo"/> <-- This Line
</operation>
</operations>
<source type="inline"/>
<target type="body"/>
</dataServiceCall>

但是系统不识别json-eval函数。我还尝试了一个直接的json评估

<param evaluator="json" name="id" expression="$.cod_uo"/>

但我得到一个DataServiceCallMediator

Current Request Name: MyOperationName
Current Params: {cod_uo=}
Nested Exception:-
java.lang.NumberFormatException: For input string: ""

在后续数据服务调用中使用有效负载工厂有效负载的'cod_uo'属性的正确方法是什么?


我正在使用最新的集成工作室(8.0.0.202104161647)

日志总是返回

{api:MyApi:v1.0.0} To: /my/path?id=123, MessageID: urn:uuid:[uuid], correlation_id: [correlation_id], Direction: request, string = 123

所有组合+错误:

<param evaluator="xml" expression="json-eval('$.cod_uo')" name="cod_uo"/>
[2021-07-30 08:50:41,179] ERROR {SynapseXPath} - Evaluation of the XPath expression json-eval('$.cod_uo') resulted in an error org.jaxen.UnresolvableException: No Such Function json-eval
<param evaluator="xml" expression="json-eval($.cod_uo)" name="cod_uo"/>
(doesn't compile: "Invalid XPath expression for attribute expression : json-eval($.cod_uo)"
<param evaluator="json" expression="json-eval('$.cod_uo')" name="cod_uo"/>
<param evaluator="json" expression="json-eval($.cod_uo)" name="cod_uo"/>
<param evaluator="json" expression="$.cod_uo" name="cod_uo"/>

Current Request Name: MyOperationName
Current Params: {cod_uo=}
Nested Exception:-
org.postgresql.util.PSQLException: ERROR: invalid input syntax for integer: ""
<param evaluator="xml" expression="$.cod_uo" name="cod_uo"/>
(doesn't compile: Invalid XPath expression for attribute expression : $.cod_uo)

由于Payload Factory中介器和Data Service Call中介器在同一序列中,您可以使用get-property()函数来检索值并赋值。

例如,

<param evaluator="json" name="id" expression="get-property('query.param.id')"/>

此外,如果您想通过json-eval()访问属性,我认为有一个错字导致了空值行为。请删除键周围的引号并尝试

场景

更新注意json-eval()方法并没有解决问题。但是,保留以下部分作为参考。查看Update部分,以使用XPath表达式访问有效负载。

<!-- without single quotes around the $.myId -->
<param evaluator="json" name="id" expression="json-eval($.myId)"/>

更新您还可以尝试使用XPath表达式访问负载,如下所示

<param evaluator="xml" name="id" expression="$body//myId"/>

相关内容

  • 没有找到相关文章

最新更新