WSO2 API Manager VFS写入序列忽略文件参数

时间:2017-03-16 08:12:56

标签: wso2 wso2esb wso2-am

在我们的项目中,我们使用的是WSO2 API Manager v 2.1.0。我们的目标是编写一个故障序列,它将记录自定义日志文件中的一些信息,示例时间戳,API的名称等。我能够创建一个文件并写入它,但它不能按预期工作。我需要的是

  • 控制文件名
  • 将内容附加到文件而不是每次都覆盖它

这是我正在使用的序列(简化阅读更简单):

<?xml version="1.0" encoding="UTF-8"?>
<sequence xmlns="http://ws.apache.org/ns/synapse" name="admin--FaultyAPI2:v1.0.0--Fault">
   <clone continueParent="true">
      <target>
         <sequence>
            <property xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope" xmlns:wsa="http://www.w3.org/2005/08/addressing" xmlns:ns3="http://org.apache.synapse/xsd" name="destination" expression="get-property('To')"/>
               <format>
                        {
                            "destination_host" : "$1"
                        }
                    </format>
               <args>
                  <arg xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope" xmlns:ns3="http://org.apache.synapse/xsd" evaluator="xml" expression="get-property('destination')"/>
               </args>
            </payloadFactory>
            <property name="transport.vfs.ReplyFileName" value="test.txt" scope="transport" type="STRING"/>
            <property name="OUT_ONLY" value="true" scope="default" type="STRING"/>
            <send>
               <endpoint>
                  <http uri-template="vfs:file:///home/install/out?transport.vfs.Append=true"/>
               </endpoint>
            </send>
         </sequence>
      </target>
   </clone>
</sequence>

以下文档我使用transport.vfs.ReplyFileName指定文件名和?transport.vfs.Append=true路径参数来告诉它附加到文件。问题是这两件事都被忽略了。 首先,创建的文件不是test.txt,但它是失败的端点URI(我在API Manager中设置的端点)。因此,如果我调用/fault端点,则在指定的位置下创建的文件为fault。 第二件事是它不附加到文件,但每次触发序列时都会覆盖它。更糟糕的是!它在文件系统上创建实际路径/home/install/out?transport.vfs.Append=true并将文件保存在此目录下。

这些功能似乎可以在WSO ESB下运行,但不适用于API Manager。任何人的想法?

1 个答案:

答案 0 :(得分:0)

首先,我在WSO2 EI中测试了这个,而不是在API管理器中,但在我看来,你所描述的问题也出现了。

控制文件名

我也有一些问题。问题是当你通过API调用序列时,文件名不是基于&#34; transport.vfs.ReplyFileName&#34;传输属性,但基于&#34; REST_URL_POSTFIX&#34; axis2属性。您可以通过设置&#34; REST_URL_POSTFIX&#34;来解决此问题。属性到正确的文件名或删除该属性。

追加内容

您正在使用http端点,但应使用地址端点。在这种情况下,将识别路径参数。

实施例

我认为您的代码应该更像这样:

<?xml version="1.0" encoding="UTF-8"?>
<sequence name="admin--FaultyAPI2:v1.0.0--Fault" trace="disable" xmlns="http://ws.apache.org/ns/synapse">
    <clone continueParent="true">
        <target>
            <sequence>
                <payloadFactory media-type="json">
                    <format>
                  {
                  "destination_host" : "$1"
                  }
               </format>
                    <args>
                        <arg evaluator="xml" expression="get-property('destination')" xmlns:ns3="http://org.apache.synapse/xsd" xmlns:soapenv="http://www.w3.org/2003/05/soap-envelope"/>
                    </args>
                </payloadFactory>
                <property name="transport.vfs.ReplyFileName" scope="transport" type="STRING" value="test.txt"/>
                <property name="OUT_ONLY" scope="default" type="STRING" value="true"/>
                <property name="REST_URL_POSTFIX" action="remove" scope="axis2" />
                <send>
                    <endpoint>
                        <address uri="vfs:file:///home/install/out?transport.vfs.Append=true"/>
                    </endpoint>
                </send>
            </sequence>
        </target>
    </clone>
</sequence>