如何在 WSO2 ESB 中检索和使用 属性 的设置值?
How to retrieve and use the setted value of a property in WSO2 ESB?
我是 WSO2 ESB 的新手,我在尝试检索 属性 的值并放入 XML 文档时遇到以下问题我正在生成。
所以,我有以下情况,在我的 ESB 流程中我定义了这个 属性 命名为 TRANSACTION 并且有 register 作为值:
<property name="TRANSACTION" scope="default" type="STRING" value="register"/>
然后在我的流程中,我使用 payloadFactory 中介生成一个 XML 文档(它工作正常),这样:
<payloadFactory media-type="xml">
<format>
<register password="" username="" xmlns="http://ws.wso2.org/dataservice">
<location>
<wiews></wiews>
<pid></pid>
<name></name>
<address></address>
<country></country>
<lat></lat>
<lon></lon>
</location>
<sampledoi></sampledoi>
<sampleid></sampleid>
<date></date>
<method></method>
<genus></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="" username="" xmlns="http://ws.wso2.org
register 名称必须是使用 TRANSACTION $15 变量 属性 值。我认为我可以通过某种方式将其定义到 ... 列表中,但我不知道如何定义。此时在这个列表中,我只有从 DSS 服务输出中检索到的值,在这种情况下,我认为我必须输入 TRANSACTION 属性 的值,但是如何?
所以,是否可以这样:
< password="" username="" xmlns="http://ws.wso2.org
动态插入标签名称?
据我所知,您不能使用 payloadFactory 做到这一点,但您可以为根节点使用默认名称,并在 payloadFactory 中介之后添加此 javascript:
<script language="js"><![CDATA[
mc.getEnvelope().getBody().getFirstElement().setLocalName(mc.getProperty("TRANSACTION"));
]]></script>
另一个解决方案是使用 XSLT
我是 WSO2 ESB 的新手,我在尝试检索 属性 的值并放入 XML 文档时遇到以下问题我正在生成。
所以,我有以下情况,在我的 ESB 流程中我定义了这个 属性 命名为 TRANSACTION 并且有 register 作为值:
<property name="TRANSACTION" scope="default" type="STRING" value="register"/>
然后在我的流程中,我使用 payloadFactory 中介生成一个 XML 文档(它工作正常),这样:
<payloadFactory media-type="xml">
<format>
<register password="" username="" xmlns="http://ws.wso2.org/dataservice">
<location>
<wiews></wiews>
<pid></pid>
<name></name>
<address></address>
<country></country>
<lat></lat>
<lon></lon>
</location>
<sampledoi></sampledoi>
<sampleid></sampleid>
<date></date>
<method></method>
<genus></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="" username="" xmlns="http://ws.wso2.org
register 名称必须是使用 TRANSACTION $15 变量 属性 值。我认为我可以通过某种方式将其定义到 ... 列表中,但我不知道如何定义。此时在这个列表中,我只有从 DSS 服务输出中检索到的值,在这种情况下,我认为我必须输入 TRANSACTION 属性 的值,但是如何?
所以,是否可以这样:
< password="" username="" xmlns="http://ws.wso2.org
动态插入标签名称?
据我所知,您不能使用 payloadFactory 做到这一点,但您可以为根节点使用默认名称,并在 payloadFactory 中介之后添加此 javascript:
<script language="js"><![CDATA[
mc.getEnvelope().getBody().getFirstElement().setLocalName(mc.getProperty("TRANSACTION"));
]]></script>
另一个解决方案是使用 XSLT