为什么在WSO2 ESB中我无法创建一个新属性,它是另一个属性和固定字符串的串联?我得到null作为结果
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了为什么在WSO2 ESB中我无法创建一个新属性,它是另一个属性和固定字符串的串联?我得到null作为结果相关的知识,希望对你有一定的参考价值。
我在WSO2 ESB中很新,我有以下问题。我有一个简单的POST API接收JSON有效负载。我正确地将JSON内容提取到属性中。
然后我必须创建一个包含以前属性之一(从JSON文档中检索)的内容的新属性,并且我必须将固定字符串连接到其内容。
所以我的API是:
<?xml version="1.0" encoding="UTF-8"?>
<api context="/meteo" name="meteo_data_population_insert" xmlns="http://ws.apache.org/ns/synapse">
<resource methods="POST" protocol="http" uri-template="/forecast">
<inSequence>
<log level="full"/>
<log description="Log" level="custom">
<property name="message" value="meteo_data_population_insert START !!!"/>
</log>
<property expression="json-eval($.forecast_date)" name="forecast_date" scope="default" type="STRING"/>
<property expression="json-eval($.morning.weather.min_temp)" name="morning_min_temp" scope="default" type="STRING"/>
<log level="custom">
<property expression="$ctx:forecast_date" name="forecast_date"/>
</log>
<log level="custom">
<property expression="$ctx:morning_min_temp" name="morning_min_temp"/>
</log>
<property name="forecast_date_CONCAT" expression="fn:concat($ctx:forecast_date, '_morning')" scope="operation" type="STRING"/>
<log level="custom">
<property expression="$ctx:forecast_date_CONCAT" name="forecast_date_CONCAT"/>
</log>
</inSequence>
<outSequence/>
<faultSequence/>
</resource>
</api>
如您所见,我正在从JSON有效负载中检索forecast_date字段的值:
<property expression="json-eval($.forecast_date)" name="forecast_date" scope="default" type="STRING"/>
它运行正常(我可以在日志中看到它),然后我想创建一个以此forecast_date的内容开头的新属性,并将_morning字符串连接到它。
所以我试着这样做:
<property name="forecast_date_CONCAT" expression="fn:concat($ctx:forecast_date, '_morning')" scope="operation" type="STRING"/>
<log level="custom">
<property expression="$ctx:forecast_date_CONCAT" name="forecast_date_CONCAT"/>
</log>
问题是在日志中我得到了这个结果:
TID: [-1234] [] [2018-03-08 16:03:46,882] INFO {org.apache.synapse.mediators.builtin.LogMediator} - message = meteo_data_population_insert START !!! {org.apache.synapse.mediators.builtin.LogMediator}
TID: [-1234] [] [2018-03-08 16:03:46,883] INFO {org.apache.synapse.mediators.builtin.LogMediator} - forecast_date = 2018-03-14 {org.apache.synapse.mediators.builtin.LogMediator}
TID: [-1234] [] [2018-03-08 16:03:46,883] INFO {org.apache.synapse.mediators.builtin.LogMediator} - morning_min_temp = 24 {org.apache.synapse.mediators.builtin.LogMediator}
TID: [-1234] [] [2018-03-08 16:03:46,884] INFO {org.apache.synapse.mediators.builtin.LogMediator} - forecast_date_CONCAT = null {org.apache.synapse.mediators.builtin.LogMediator}
因此,您可以看到我正确检索forecast_date值,但是当我尝试创建新的forecast_date_CONCAT属性将此值与_morning字符串连接时,它不起作用,并且我获取null作为此新属性的值。
为什么?我的代码有什么问题?我错过了什么?我该如何解决这个问题?
答案
以这种方式自己解决:
<property expression="fn:concat(get-property('forecast_date'), '_morning')" name="forecast_date_CONCAT" scope="default" type="STRING"/>
<log level="custom">
<property expression="$ctx:forecast_date_CONCAT" name="forecast_date_CONCAT"/>
</log>
以上是关于为什么在WSO2 ESB中我无法创建一个新属性,它是另一个属性和固定字符串的串联?我得到null作为结果的主要内容,如果未能解决你的问题,请参考以下文章
WSO2 ESB 无法将完整的 JSON 数据转换为 XML
如何在2个不同的环境中正确处理某些WSO2 ESB REST API的部署? (目前包含硬编码的HATEOAS链接)