WSO2 ESB。使用VFS传输文件

时间:2016-06-02 12:17:15

标签: wso2esb vfs

我需要使用com.wso2esb.command.MyCommand检查目录“/ home / user / from /”中的每个文件,如果结果== true,则将文件替换为“home / user / to /”。我有以下代理:

<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse"
       name="fromto"
       transports="vfs"
       statistics="enable"
       trace="enable"
       startOnLoad="true">
   <target>
      <inSequence>
         <pojoCommand name="com.wso2esb.command.MyCommand">
            <axis2ns47:property xmlns:axis2ns47="http://ws.apache.org/ns/synapse"
                                name="fileURL"
                                expression="$trp:FILE_PATH"
                                action="ReadMessage"/>
            <axis2ns48:property xmlns:axis2ns48="http://ws.apache.org/ns/synapse"
                                name="result"
                                context-name="com.fx.FileIsOBI"
                                action="UpdateContext"/>
         </pojoCommand>
         <switch source="$ctx:com.fx.FileIsOBI">
            <case regex="^true$">
               <log level="custom">
                  <property name="OUTPUT"
                            expression="fn:concat('===555===', $ctx:com.fx.FileIsOBI)"/>
               </log>
               <property name="OUT_ONLY" value="true" scope="default"/>
               <property xmlns:ns="http://org.apache.synapse/xsd"
                         xmlns:ns3="http://org.apache.synapse/xsd"
                         name="transport.vfs.ReplyFileName"
                         expression="$trp:FILE_NAME"
                         scope="transport"/>
               <send>
                  <endpoint>
                     <address uri="vfs:file:////home/user/to"/>
                  </endpoint>
               </send>
            </case>
         </switch>
      </inSequence>
   </target>
   <parameter name="transport.PollInterval">10</parameter>
   <parameter name="transport.vfs.ActionAfterProcess">DELETE</parameter>
   <parameter name="transport.vfs.FileURI">vfs:file:////home/user/from/</parameter>
   <parameter name="transport.vfs.FileNamePattern">.*\.txt</parameter>
   <parameter name="transport.vfs.ContentType">application/octet-stream</parameter>
   <parameter name="transport.vfs.ActionAfterFailure">DELETE</parameter>
   <description/>
</proxy>

我可以在日志文件中看到字符串“=== 555 === true”,这意味着com.fx.FileIsOBI == true。但是我的文件没有移到“/ home / user / to /”。我认为问题在于

<property name="OUT_ONLY" value="true" scope="default"/>
<property xmlns:ns="http://org.apache.synapse/xsd"
         xmlns:ns3="http://org.apache.synapse/xsd"
         name="transport.vfs.ReplyFileName"
         expression="$trp:FILE_NAME"
         scope="transport"/>
<send>
  <endpoint>
     <address uri="vfs:file:////home/user/to"/>
  </endpoint>
</send>

怎么了?

2 个答案:

答案 0 :(得分:1)

请检查是否已启用VFS传输, https://docs.wso2.com/display/ESB490/VFS+Transport

以下作品对我来说很好

<?xml version="1.0" encoding="UTF-8"?>
<proxy xmlns="http://ws.apache.org/ns/synapse"
   name="fromto"
   statistics="enable"
   trace="enable"
   startOnLoad="true">
 <target>
  <inSequence>
     <log level="custom">
        <property name="OUTPUT" value="===555==="/>
     </log>
     <property name="OUT_ONLY" value="true" scope="default"/>
     <property xmlns:ns="http://org.apache.synapse/xsd"
               xmlns:ns3="http://org.apache.synapse/xsd"
               name="transport.vfs.ReplyFileName"
               expression="$trp:FILE_NAME"
               scope="transport"/>
     <send>
        <endpoint>
           <address uri="vfs:file:///Users/lahiru/work/wso2/esb/9/to"/>
        </endpoint>
     </send>
  </inSequence>
</target>
<parameter name="transport.vfs.ActionAfterProcess">DELETE</parameter>
<parameter name="transport.PollInterval">10</parameter>
<parameter name="transport.vfs.FileURI">vfs:file:///Users/lahiru/work/wso2/esb/9/from</parameter>
<parameter name="transport.vfs.FileNamePattern">.*\.txt</parameter>
<parameter name="transport.vfs.ContentType">application/octet-stream</parameter>
<parameter name="transport.vfs.ActionAfterFailure">DELETE</parameter>
<description/>
</proxy>

答案 1 :(得分:1)

我认为您的文件路径存在问题。你可以改变如下。

<parameter name="transport.vfs.FileURI">vfs:file:///home/user/from/</parameter>

<send>
   <endpoint>
        <address uri="vfs:file:///home/user/to"/>
   </endpoint>
</send>

由于您正在处理xml文件,因此更改内容类型如下所示。

<parameter name="transport.vfs.FileNamePattern">.*\.xml</parameter>
<parameter name="transport.vfs.ContentType">text/xml</parameter>

执行这些建议的更改并告知我们您的反馈意见。

相关问题