在我们的项目中,我们使用的是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。任何人的想法?
答案 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>