为什么在WSO2 ESB中我无法创建一个新属性,它是另一个属性和固定字符串的串联?我得到null作为结果

问题描述 投票:2回答:1

我在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作为此新属性的值。

为什么?我的代码有什么问题?我错过了什么?我该如何解决这个问题?

wso2 wso2esb
1个回答
0
投票

以这种方式自己解决:

<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>
© www.soinside.com 2019 - 2024. All rights reserved.