如何在WSO2 ESB中检索和使用属性的设置值?

时间:2017-05-30 08:42:11

标签: wso2 wso2esb esb wso2dss

我是 WSO2 ESB 的新手,我在尝试检索属性的值并将其放入我正在生成的XML文档时遇到以下问题。

所以,我有以下情况,在我的ESB流程中,我已经定义了这个名为 TRANSACTION 的属性,并将注册作为值:

<property name="TRANSACTION" scope="default" type="STRING" value="register"/>

然后在我的流程中,我以这种方式使用 payloadFactory 介体生成XML文档(它工作正常):

<payloadFactory media-type="xml">
    <format>
        <register password="$14" username="$13" xmlns="http://ws.wso2.org/dataservice">
            <location>
                <wiews>$1</wiews>
                <pid>$2</pid>
                <name>$3</name>
                <address>$4</address>
                <country>$5</country>
                <lat>$6</lat>
                <lon>$7</lon>
            </location>
            <sampledoi>$8</sampledoi>
            <sampleid>$9</sampleid>
            <date>$10</date>
            <method>$11</method>
            <genus>$12</genus>
        </register>
    </format>
    <args>
        <arg evaluator="xml" expression="$ctx:sampleData//ds:Sample/ds:hold_wiews/text()" xmlns:ds="http://ws.wso2.org/dataservice"/>
        <arg evaluator="xml" expression="$ctx:sampleData//ds:Sample/ds:hold_pid/text()" xmlns:ds="http://ws.wso2.org/dataservice"/>
        <arg evaluator="xml" expression="$ctx:sampleData//ds:Sample/ds:hold_name/text()" xmlns:ds="http://ws.wso2.org/dataservice"/>
        <arg evaluator="xml" expression="$ctx:sampleData//ds:Sample/ds:hold_address/text()" xmlns:ds="http://ws.wso2.org/dataservice"/>
        <arg evaluator="xml" expression="$ctx:sampleData//ds:Sample/ds:hold_country/text()" xmlns:ds="http://ws.wso2.org/dataservice"/>
        <arg evaluator="xml" expression="$ctx:sampleData//ds:Sample/ds:hold_lat/text()" xmlns:ds="http://ws.wso2.org/dataservice"/>
        <arg evaluator="xml" expression="$ctx:sampleData//ds:Sample/ds:hold_lon/text()" xmlns:ds="http://ws.wso2.org/dataservice"/>
        <arg evaluator="xml" expression="$ctx:sampleData//ds:Sample/ds:sample_doi/text()" xmlns:ds="http://ws.wso2.org/dataservice"/>
        <arg evaluator="xml" expression="$ctx:sampleData//ds:Sample/ds:sample_id/text()" xmlns:ds="http://ws.wso2.org/dataservice"/>
        <arg evaluator="xml" expression="$ctx:sampleData//ds:Sample/ds:date/text()" xmlns:ds="http://ws.wso2.org/dataservice"/>
        <arg evaluator="xml" expression="$ctx:sampleData//ds:Sample/ds:method/text()" xmlns:ds="http://ws.wso2.org/dataservice"/>
        <arg evaluator="xml" expression="$ctx:sampleData//ds:Sample/ds:genus/text()" xmlns:ds="http://ws.wso2.org/dataservice"/>
        <arg evaluator="xml" expression="$ctx:sampleData//ds:Sample/ds:username/text()" xmlns:ds="http://ws.wso2.org/dataservice"/>
        <arg evaluator="xml" expression="$ctx:sampleData//ds:Sample/ds:password/text()" xmlns:ds="http://ws.wso2.org/dataservice"/>
    </args>
</payloadFactory>

生成这样的XML文档:

<?xml version="1.0" encoding="UTF-8" ?>
<register username="myUserName" password="myPswd">
    <sampleid>CGN00001</sampleid>
    <genus>Hordeum2</genus>
    ...................................
    ...................................
    ...................................

我想使用 TRANSACTION 属性的值来创建XML文档的第一个标记的名称,其中包含:

<register password="$14" username="$13" xmlns="http://ws.wso2.org
注册名称必须是使用 TRANSACTION 属性值的 $ 15 变量。我认为我可以在某种程度上将其定义为 ... 列表,但我不知道如何。此时在此列表中我只从DSS服务输出中检索到值,在这种情况下,我认为我必须将我的 TRANSACTION 属性的值,但是如何?

那么,有可能是这样的:

<$15 password="$14" username="$13" xmlns="http://ws.wso2.org

以dinamically插入标签名称?

1 个答案:

答案 0 :(得分:1)

据我所知,你不能用payloadFactory做到这一点,但你可以使用你的根节点的默认名称,并在payloadFactory mediator之后,添加这个javascript:

<script language="js"><![CDATA[
    mc.getEnvelope().getBody().getFirstElement().setLocalName(mc.getProperty("TRANSACTION"));
]]></script>

另一种解决方案是使用XSLT