WSO2 ESB:为代理使用外部参数定义?

时间:2012-06-21 11:49:12

标签: proxy wso2 mediator wso2esb synapse

我们正在使用几个正在侦听不同位置的代理。但是在开发期间,我们没有与生产环境中相同的URI。是否可以在外部定义URI(transport.vfs.File.URI)? (也许是当地入境或其他财产?)

以下行应该能够加载实际URI的外部定义:

<parameter name="transport.vfs.FileURI">get-property('myURI')</parameter>

完整代理示例(不工作):

<proxy xmlns="http://ws.apache.org/ns/synapse" name="getRN100xml"
statistics="disable" trace="disable" transports="vfs">
<target>
    <inSequence>
   <send>...</send>
    </inSequence>
</target>
<parameter name="transport.vfs.ActionAfterProcess">MOVE</parameter>
<parameter name="transport.PollInterval">5</parameter>
<parameter name="transport.vfs.MoveAfterProcess">C:/WSO2/In/saved</parameter>
<parameter name="transport.vfs.FileURI">get-property('myURI')</parameter>
<parameter name="transport.vfs.FileNamePattern">.*.xml</parameter>
<parameter name="transport.vfs.ContentType">application/xml</parameter>
<parameter name="transport.vfs.MoveTimestampFormat">yyMMddHHmmss</parameter>

2 个答案:

答案 0 :(得分:1)

您可以查看此帖子WSO2 ESB - Dynamic value for proxy parameters (transport),了解如何在代理序列中动态设置值的示例。

答案 1 :(得分:0)

执行此操作的一种简单方法是制作序列模板并在该模板中设置参数。您将此模板作为inSequence中的第一个操作。 您的代理定义如下:

<proxy xmlns="http://ws.apache.org/ns/synapse" name="getRN100xml"
statistics="disable" trace="disable" transports="vfs">
<target>
 <inSequence>
   <call-template target="transport_vfs_parameter_settings"/>
 <send>...</send>
/<inSequence>
</target>

模板定义看起来像sg。像:

<template xmlns="http://ws.apache.org/ns/synapse" name="transport_vfs_parameter_settings">
   <sequence>
    <property xmlns:ns="http://org.apache.synapse/xsd" name="transport.vfs.FileNamePattern" expression="test.xml"></property>
    <property xmlns:ns="http://org.apache.synapse/xsd" name="transport.PollInterval" expression="15" scope="transport"></property>
    <property xmlns:ns="http://org.apache.synapse/xsd" name="transport.vfs.ActionAfterProcess" expression="MOVE" scope="transport"></property>
    <property xmlns:ns="http://org.apache.synapse/xsd" name="transport.vfs.FileURI" expression="//localhost/D:/Test/in" scope="transport"></property>
    <property xmlns:ns="http://org.apache.synapse/xsd" name="transport.vfs.MoveAfterProcess" expression="//localhost/D:/Test/processed" scope="transport"></property>
    <property xmlns:ns="http://org.apache.synapse/xsd" name="transport.vfs.MoveAfterFailure" expression="//localhost/D:/Test/failure" scope="transport"></property>
    <property xmlns:ns="http://org.apache.synapse/xsd" name="transport.vfs.ContentType" expression="text/xml" scope="transport"></property>
    <property xmlns:ns="http://org.apache.synapse/xsd" name="transport.vfs.ActionAfterFailure" expression="MOVE" scope="transport"></property>
   </sequence>
</template>

通过这种方式将代理定义传输到另一个环境意味着使用不同的模板。 当然,您只能在inSequence中设置那些参数,其值可以在inSequence的开头确定。例如,如果您希望replyFilename包含回复messageID,请在outSequence中设置它。