WSO2 - VFS 在失败时没有将文件移动到正确的路径

WSO2 - VFS not moving file to the right path on failure

我在 WSO2 VFS 系统上遇到了一个小问题。我有一个简单的入站端点,它每 5 秒扫描一个文件夹以读取 CVS 文件。 我想处理文件名不是预期文件名的情况。 我用错误序列解决了这个问题,但我仍然遇到技术错误:

ERROR - FilePollingConsumer Error moving file : file:///C:/Servers/Flux/Input/UESMGEN_2AAB_20160729.csv to file:///C:/Servers/Flux/Output/Process/ org.apache.commons.vfs2.FileSystemException: Could not rename "

我使用了 transport.vfs.MoveAfterFailure 但文件被移到了 transport.vfs.MoveAfterProcess 路径。我认为这是由于技术错误造成的。

但是当我用正确的文件测试我的序列时,一切顺利。

对此有什么想法吗?感谢您的帮助

transport.vfs.MoveAfterFailure 在中介之前使用,当传输层/轴 2 的流中发生错误时(例如,在构建缺少某些结束标记的 application/xml 消息时)。

一旦消息进入你的中介,即使执行了故障序列,也会使用transport.vfs.MoveAfterProcess

(这是它在 ESB 4.8.1 中的工作方式,不能说这在 ESB 5 中仍然相同)

感谢 Jean-Michel 如此精确。很抱歉重新打开这个问题,但我觉得我找不到太多机会得到像你提供的那样清晰的答案。

如果出现问题,中介是否可以将文件从 transport.vfs.MoveAfterProcess(传输层移动到的位置)移动到其他文件夹?这是错误序列的相关部分,我尝试在其中移动文件

  • 来自 sftp://foo:***@localhost:2222/Process
  • sftp://foo:***@localhost:2222/Errors
<fileconnector.move>
    <source>{fn:concat($ctx:rsaFolderProcess ,$trp:FILE_NAME)}</source>
    <destination>{fn:concat($ctx:rsaFolderErrors,$trp:FILE_NAME)}</destination>
</fileconnector.move>

(我正在使用文件连接器 2.0.20 并且 rsaFolderProcessrsaFolderErrors 已定义)

这会导致以下错误:

[2020-03-26 14:51:21,743] [] ERROR - FileMove Unable to move a file/folder.
org.apache.commons.vfs2.FileSystemException: Could not determine if file "sftp://foo:***@localhost:2222/Process" is writeable.
        at org.apache.commons.vfs2.provider.AbstractFileObject.isWriteable(AbstractFileObject.java:1529)
        at org.apache.commons.vfs2.provider.AbstractFileObject.moveTo(AbstractFileObject.java:1573)
        at org.wso2.carbon.connector.FileMove.fileMove(FileMove.java:143)
        at org.wso2.carbon.connector.FileMove.moveFile(FileMove.java:103)
        at org.wso2.carbon.connector.FileMove.connect(FileMove.java:60)
.....

我检查了权限。用户foo可以写入Success/Errors;唯一的问题是中介序列不知道这一点,也无法将文件从前者移动到后者。就好像在传输层中声明的权利没有被中介继承。如何解决这个问题并实现这个目标?

环境

  • wso2ei 6.5.0