【发布时间】:2017-03-16 00:14:33
【问题描述】:
最近我们开始研究 WSO2 Api Manager 并希望创建一个故障流序列,它将有关故障的一些信息写入位于文件系统中的文件中。 WSO2 API Manager 安装适用于 Windows。
我按照this dock page 中的文档步骤启用了 VFS 传输。然后我按照这个例子from the docks创建了一个文件代理和文件写入序列(我跳过了数据库和文件阅读器,因为我不需要它们):
<sequence xmlns="http://ws.apache.org/ns/synapse" name="fileWriteSequence">
<log level="custom">
<property name="sequence" value="fileWriteSequence"/>
</log>
<property xmlns:ns2="http://org.apache.synapse/xsd" name="transport.vfs.ReplyFileName" expression="fn:concat(fn:substring-after(get-property('MessageID'), 'urn:uuid:'), '.txt')" scope="transport"/>
<property xmlns:ns2="http://org.apache.synapse/xsd" name="transport.vfs.Locking" value="disable" scope="transport"/>
<property name="OUT_ONLY" value="true"/>
<send>
<endpoint name="FileEpr">
<address uri="vfs:file:///C:/home/username/test/out"/>
</endpoint>
</send>
我已经创建了 API 和上传的序列就好了,看起来它正在按预期触发,但文件没有被创建 - 这是来自进程的日志:
[2017-03-10 08:27:02,525] INFO - LogMediator sequence = fileWriteSequence
[2017-03-10 08:27:03,384] ERROR - VFSUtils Cannot get the lock for the file : file:///C:/home/username/test/out/* before processing
[2017-03-10 08:27:03,385] WARN - VFSTransportSender Couldn't get the lock for the file : file:///C:/home/username/test/out/*, retry : 1 scheduled after : 30000
首先我认为这是权限问题,但我授予匿名用户对此位置的完全控制权并以管理员身份运行 WSO2 AM 进程 - 仍然没有运气。
更新
我通过在全局配置 (axis2) 中禁用文件锁定来解决问题
<transportSender name="vfs" class="org.apache.synapse.transport.vfs.VFSTransportSender">
<parameter name="transport.vfs.Locking">disable</parameter>
</transportSender>
还是不行,只是报错略有不同(还是报错路径)。
Caused by: java.io.FileNotFoundException: C:\home\username\test\out\* (The filename, directory name, or volume label syntax is incorrect)
at java.io.FileOutputStream.open(Native Method)
at java.io.FileOutputStream.<init>(FileOutputStream.java:221)
at java.io.FileOutputStream.<init>(FileOutputStream.java:142)
at org.apache.commons.vfs2.provider.local.LocalFile.doGetOutputStream(LocalFile.java:251)
at org.apache.commons.vfs2.provider.AbstractFileObject.getOutputStream(AbstractFileObject.java:1399)
您可能会注意到,末尾有"*",我并不惊讶找不到整个文件路径,但它是由lib添加的,因此可能是预期的。
是否有人对 WSO2 ESB/AM 有任何经验并知道如何解决这个问题?这可能是微不足道的,但经过多次尝试后我找不到解决方案。
【问题讨论】:
-
我认为你的地址 uri 是错误的。尝试使用 vfs:file://C:/home/username/test/out 而不是 vfs:file:///C:/home/username/test/out(删除一个斜线,因为它是 Windows)
-
嗯,我在调查时检查过它并没有改变任何东西。事实上,引擎自己添加了这个斜线。我为此锁做了一个解决方法(通过禁用),更新了我的消息。