0

我们正在使用几个代理来监听不同的位置。但是在开发过程中,我们没有与生产环境中相同的 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>

4

2 回答 2

1

您可以查看这篇文章WSO2 ESB - 代理参数的动态值(传输),以了解如何在代理序列中动态设置值。

于 2012-06-22T05:39:14.513 回答
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 中设置它。

于 2015-09-25T09:25:00.150 回答