1

我从前端获取数据或字符串我在一个属性中设置数据或字符串,我需要在每次发送数据时将属性数据发送到文本文件中我是否使用过 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

4 回答 4

2

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

因此,在您的代理元素中,传输属性将是 transports="https http vfs"

为了附加到同一个文件,使用文件 URI 定义 transport.vfs.Append 参数,如文档 [2] 中所述

[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> 
于 2013-04-04T05:31:54.650 回答
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>
于 2013-10-28T10:34:44.513 回答
0
  1. 您必须在代理中将 VFS 设置为传输才能使用 vfs。
  2. 你定义 transport.vfs.Append 参数的方式是错误的

它应该是在 URL

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 参数。

对于 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

于 2013-04-04T05:54:45.223 回答
0

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

FileWriter(File file, boolean append) 

或者

FileWriter(String fileName, boolean append)
于 2014-02-01T05:17:22.693 回答