我们如何使用wso2esb将数据写入文本文件

时间:2013-04-04 05:19:38

标签: wso2 wso2esb wso2dss

我从前端获取数据或字符串我在一个属性中设置数据或字符串 每次他们发送数据我需要在文本文件中发送的属性数据我需要将数据保存在同一个文件中而不覆盖我怎样才能完成使用VFS传输我在配置文件中使用vfs的未注释发送者部分,即使它不是在配置下正常工作

    <?xml version="1.0" encoding="UTF-8"?>
    <proxy xmlns="http://ws.apache.org/ns/synapse"
           name="FileWrite"
           transports="https http"
           startOnLoad="true"
           trace="disable">
       <description/>
       <target>
          <inSequence>
             <property name="error" expression="//error/text()" scope="default"/>
             <log level="full"/>
          </inSequence>
          <outSequence>
             <log>
 <property name="error" expression="get-property('error')" scope="default"/>
                <property name="OUT_ONLY" value="true"/>
             </log>
             <payloadFactory>
                <format>
                   <error>$1</error>
                </format>
                <args>
                   <arg expression="get-property('error')"/>
                </args>
             </payloadFactory>
             <log level="full"/>
             <send>
                <endpoint>
                   <address uri="vfs:file:///home/youtility2/Desktop/Errorlog.text"/>
                </endpoint>
             </send>
             <log level="full"/>
          </outSequence>
       </target>
       <parameter name="transport.vfs.Append">true</parameter>
    </proxy> 

我在桌面上创建了文本文件,但数据没有写入文本文件中,也没有给出任何异常,也会引用一些内容

4 个答案:

答案 0 :(得分:2)

您必须为代理服务启用VFS传输。在代理创建/编辑向导中,您可以选择必要的传输。在axis2.xml中启用VFS传输后,VFS将作为服务的可用传输。因此,如果要在代理服务中使用它,也应该启用该特定服务。

因此,在您的代理服务器元素中,transport属性将为transports =“https http vfs”

要附加到同一文件,请使用doc [2]中描述的文件URI定义transport.vfs.Append参数

[2] http://docs.wso2.org/wiki/display/ESB450/VFS+Transport

    <?xml version="1.0" encoding="UTF-8"?>
    <proxy xmlns="http://ws.apache.org/ns/synapse"
           name="FileWrite"
           transports="https http vfs"
           startOnLoad="true"
           trace="disable">
       <description/>
       <target>
          <inSequence>
             <property name="OUT_ONLY" value="true"/>
             <property name="error" expression="//error/text()" scope="default"/>
             <log level="full"/>
          </inSequence>
          <outSequence>
             <log>
 <property name="error" expression="get-property('error')" scope="default"/>
                <property name="OUT_ONLY" value="true"/>
             </log>
             <payloadFactory>
                <format>
                   <error>$1</error>
                </format>
                <args>
                   <arg expression="get-property('error')"/>
                </args>
             </payloadFactory>
             <log level="full"/>
             <send>
                <endpoint>
                   <address uri="vfs:file:///home/youtility2/Desktop/Errorlog.text?transport.vfs.Append=true"/>
                </endpoint>
             </send>
             <log level="full"/>
          </outSequence>
       </target>
       <parameter name="transport.vfs.Append">true</parameter>
    </proxy> 

答案 1 :(得分:1)

下面的代码显示了将有效负载插入文件的功能。 您不需要使用vfs作为传输。

<proxy xmlns="http://ws.apache.org/ns/synapse"
       name="WriteIntoFile"
       transports="https,http"
       statistics="disable"
       trace="disable"
       startOnLoad="true">
   <target>
      <inSequence>
         <property name="OUT_ONLY" value="true" scope="default" type="STRING"/>
         <property name="transport.vfs.ReplyFileName"
                   expression="fileName.xml')"
                   scope="transport"/>
         <send>
            <endpoint>
               <address uri="vfs:ftp://admin:admin@localhost:21/srcFolder?vfs.passive=true"/>
            </endpoint>
         </send>
      </inSequence>
   </target>
</proxy>

答案 2 :(得分:0)

  1. 您必须将VFS设置为代理中的传输以使用vfs。
  2. 定义transport.vfs.Append参数的方式错误
  3. 它应该是 在网址

    vfs:file:///home/user/test/out? transport.vfs.Append=true " 
    

    作为参数

    <parameter name="transport.vfs.ReplyFileURI">file:///home/user/test/out? transport.vfs.Append=true </parameter>
    
    1. 配置中缺少vfs参数。
    2. 对于vfs服务级别参数,您可以参考[1]。

      我只是粗略地编辑你的代理尝试。

       <?xml version="1.0" encoding="UTF-8"?>
          <proxy xmlns="http://ws.apache.org/ns/synapse"
                 name="FileWrite"
                 transports="vfs" statistics="disable" trace="disable" startOnLoad="true">
             <description/>
             <target>
                <inSequence>
                   <property name="error" expression="//error/text()" scope="default"/>
                   <log level="full"/>
                </inSequence>
                <outSequence>
                   <log>
       <property name="error" expression="get-property('error')" scope="default"/>
                      <property name="OUT_ONLY" value="true"/>
                   </log>
                   <payloadFactory>
                      <format>
                         <error>$1</error>
                      </format>
                      <args>
                         <arg expression="get-property('error')"/>
                      </args>
                   </payloadFactory>
                   <log level="full"/>
                   <send>
                      <endpoint>
                         <address uri="vfs:file:///home/youtility2/Desktop/Errorlog? transport.vfs.Append=true"/>
                      </endpoint>
                   </send>
                   <log level="full"/>
                </outSequence>
             </target>
             <parameter name="transport.PollInterval">10</parameter>
             <parameter name="transport.vfs.FileURI">file:///home/youtility2/Desktop/Errorlog.text</parameter>
             <parameter name="transport.vfs.FileNamePattern">.*.xml</parameter>
             <parameter name="transport.vfs.ContentType">text/xml</parameter>
             <parameter name="transport.vfs.ActionAfterFailure">MOVE</parameter>
          </proxy> 
      

      [1]。http://docs.wso2.org/wiki/display/ESB460/VFS+Transport

答案 3 :(得分:0)

你也可以在wso2esb中尝试类中介。在java类中使用FileWriter可以写入这样的文本文件:

FileWriter(File file, boolean append) 

FileWriter(String fileName, boolean append)