我的情况是等待 TXT 文件,然后根据文件调用 REST api。因此,我创建了一个代理服务,例如:
<proxy name="vsf-to-rest" startOnLoad="true" transports="vfs" xmlns="http://ws.apache.org/ns/synapse">
<target>
<inSequence>
<property name="messageType" scope="axis2" type="STRING" value="application/json"/>
<property expression="$trp:FILE_NAME" name="filename" scope="default" type="STRING"/>
<script language="js"><![CDATA[var filename = mc.getProperty('filename');
var s = filename.split('_');
mc.setProperty('a', s[0]);
mc.setProperty('b', s[1]);]]></script>
<payloadFactory media-type="json">
<format>{"a":"$1", "b":"$2"}</format>
<args>
<arg evaluator="xml" expression="get-property('a')" literal="true"/>
<arg evaluator="xml" expression="get-property('b')" literal="true"/>
</args>
</payloadFactory>
<call>
<endpoint key="mock-task-endpoint"/>
</call>
<drop/>
</inSequence>
<outSequence>
</outSequence>
<faultSequence/>
</target>
<parameter name="transport.PollInterval">5</parameter>
<parameter name="transport.vfs.FileURI">vfs:file:////Users/me/vsf/in</parameter>
<parameter name="transport.vfs.ContentType">text/plain</parameter>
<parameter name="transport.vfs.ActionAfterProcess">MOVE</parameter>
<parameter name="transport.vfs.MoveAfterFailure">vfs:file:////Users/me/vsf/failed</parameter>
<parameter name="transport.vfs.ActionAfterFailure">MOVE</parameter>
<parameter name="transport.vfs.FileNamePattern">.*\.txt</parameter>
<parameter name="transport.vfs.MoveAfterProcess">vfs:file:////Users/me/vsf/proceeded</parameter>
</proxy>
问题是如何根据 REST api 的 HTTP 状态(即 4xx 和 5xx)使序列失败。我尝试使用switch
和makefault
调解,但所有输入文件都移动到文件夹中,即使 REST api 返回 4xx 或 5xxproceeded
也没有文件。failed