WSO2 ESB 4.5.0 vfs TransportSender作为端点错误,“访问被拒绝”

时间:2012-10-29 10:08:21

标签: wso2 wso2esb esb

我正在尝试整理wso2 esb使用的概念证明。概念证明将依赖于ESB获取放入文件夹的csv文件,将细节转换为xml,将它们发布到第三方Web服务,然后将响应(应包含pdf的二进制文件)转换为pdf并将其放入文件夹中。

当前的问题是,当我在wso2 esb 4.5.0中将文件夹配置为端点时,我发送到该端点错误的任何文件。我的配置的精简版本定义如下: -

<proxy name="PDFPoller"
      transports="vfs"
      startOnLoad="true"
      trace="enable"
      statistics="enable">
  <description/>
  <target>
     <inSequence>
        <log level="custom">
           <property name="status" value="PDF Receieved"/>
        </log>
        <log level="full"/>
        <property name="transport.vfs.ReplyFileName"
                  expression="test1.pdf"
                  scope="transport"/>
        <property name="OUT_ONLY" value="true"/>
        <send>
           <endpoint name="FileEpr">
              <address uri="vfs:file:///c:/wso2/processed"/>
           </endpoint>
        </send>
     </inSequence>
  </target>
  <parameter name="transport.vfs.ActionAfterProcess">MOVE</parameter>
  <parameter name="transport.PollInterval">15</parameter>
  <parameter name="transport.vfs.MoveAfterProcess">file:///C:/wso2/output</parameter>
  <parameter name="transport.vfs.FileURI">file:///C:/wso2/PollFolder</parameter>
  <parameter name="transport.vfs.MoveAfterFailure">file:///C:/wso2/Failed</parameter>
  <parameter name="transport.vfs.FileNamePattern">.*.pdf</parameter>
  <parameter name="transport.vfs.ContentType">application/pdf</parameter>
  <parameter name="transport.vfs.ActionAfterFailure">MOVE</parameter>

我从ESB获得的错误如下: -

2012-10-29 09:46:00,642 [-] [Axis2 Task] ERROR VFSTransportSender IO Error while 
org.apache.commons.vfs2.FileSystemException: Could not write to "file:///c:/wso2/processed".
    at org.apache.commons.vfs2.provider.AbstractFileObject.getOutputStream(AbstractFileObject.java:1440)
    at org.apache.commons.vfs2.provider.DefaultFileContent.getOutputStream(DefaultFileContent.java:462)
    at org.apache.synapse.transport.vfs.VFSTransportSender.populateResponseFile(VFSTransportSender.java:232)
    at org.apache.synapse.transport.vfs.VFSTransportSender.sendMessage(VFSTransportSender.java:173)
    at org.apache.axis2.transport.base.AbstractTransportSender.invoke(AbstractTransportSender.java:112)
    at org.apache.axis2.engine.AxisEngine$TransportNonBlockingInvocationWorker.run(AxisEngine.java:627)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
    at java.lang.Thread.run(Thread.java:662)
Caused by: java.io.FileNotFoundException: c:\wso2\processed (Access is denied)
    at java.io.FileOutputStream.open(Native Method)
    at java.io.FileOutputStream.<init>(FileOutputStream.java:194)
    at java.io.FileOutputStream.<init>(FileOutputStream.java:116)
    at org.apache.commons.vfs2.provider.local.LocalFile.doGetOutputStream(LocalFile.java:220)
    at org.apache.commons.vfs2.provider.AbstractFileObject.getOutputStream(AbstractFileObject.java:1432)
    ... 8 more

我不相信问题是本地文件夹权限问题,因为我有a)手动检查文件夹的权限和b)ESB会将我放在'pollfolder'中的文件移动到''如果我将transport.vfs.MoveAfterProcess属性设置为该值,则输出'或'Processed',因此可以写入这两个文件夹。

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

您的配置似乎很好。但我怀疑以下部分。

<property name="transport.vfs.ReplyFileName"
                  expression="test1.pdf"
                  scope="transport"/>

您可以尝试没有该属性。然后它将创建一个与“processed”文件夹中的输入文件名相同的文件。如果有效,请按以下步骤尝试上述属性。

<property name="transport.vfs.ReplyFileName"
                  value="test1.pdf"
                  scope="transport"/>

如您所见,我已将“expression”属性替换为“value”。当您想要执行某些操作时,应该使用表达式,例如连接两个字符串以构建响应文件名等。