WSO2 API 配置,查询有效负载工厂的参数到 json 到数据服务
WSO2 API config, query param to payload factory to json to data service
我在理解如何将查询参数传递给创建 json 的负载工厂,然后将其数据传递给数据服务时遇到了一些问题。
我认为正确的配置是
<payloadFactory media-type="json">
<format>{"cod_uo" : ""}</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: ""
在后续的数据服务调用中,payload factory payload的'cod_uo' 属性的正确使用方法是什么?
我使用的是最新的 Integration Studio (8.0.0.202104161647)
日志总是returns
{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
mediator 和Data Service Call
mediator 在同一个序列中,您可以使用get-property()
函数检索值并赋值。
例如,
<param evaluator="json" name="id" expression="get-property('query.param.id')"/>
此外,如果您想通过 json-eval()
访问 属性,我认为存在导致空值行为的拼写错误。请删除密钥周围的引号并尝试场景
Update Note: The json-eval()
approach didn't solve the problem. But, keeping the following segment as a reference. Look at the Update
section to access the payload using XPath expression.
<!-- without single quotes around the $.myId -->
<param evaluator="json" name="id" expression="json-eval($.myId)"/>
更新
您也可以尝试使用 XPath 表达式访问 Payload,如下所示
<param evaluator="xml" name="id" expression="$body//myId"/>
我在理解如何将查询参数传递给创建 json 的负载工厂,然后将其数据传递给数据服务时遇到了一些问题。 我认为正确的配置是
<payloadFactory media-type="json">
<format>{"cod_uo" : ""}</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: ""
在后续的数据服务调用中,payload factory payload的'cod_uo' 属性的正确使用方法是什么?
我使用的是最新的 Integration Studio (8.0.0.202104161647)
日志总是returns
{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
mediator 和Data Service Call
mediator 在同一个序列中,您可以使用get-property()
函数检索值并赋值。
例如,
<param evaluator="json" name="id" expression="get-property('query.param.id')"/>
此外,如果您想通过 json-eval()
访问 属性,我认为存在导致空值行为的拼写错误。请删除密钥周围的引号并尝试场景
Update Note: The
json-eval()
approach didn't solve the problem. But, keeping the following segment as a reference. Look at theUpdate
section to access the payload using XPath expression.
<!-- without single quotes around the $.myId -->
<param evaluator="json" name="id" expression="json-eval($.myId)"/>
更新
您也可以尝试使用 XPath 表达式访问 Payload,如下所示
<param evaluator="xml" name="id" expression="$body//myId"/>