2012-10-29 15 views
-2

我正試圖將使用wso2 esb的概念證明放在一起。概念驗證將依靠ESB獲取放入文件夾的csv文件,將細節轉換爲xml,將它們發佈到第三方Web服務,然後將響應(包含PDF的二進制文件)轉換爲pdf並將其放入文件夾中。WSO2 ESB 4.5.0 vfs TransportSender作爲「訪問被拒絕」的端點錯誤

當前的問題是,當我在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'中放置的文件移動到'Output'或'Processed'將transport.vfs.MoveAfterProcess屬性設置爲該值,因此可以編寫到這兩個文件夾。

任何幫助,將不勝感激。

回答

0

你配置看起來不錯。但我懷疑以下部分。

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

您可以嘗試沒有該屬性。然後它將創建一個與「已處理」文件夾內的輸入文件名相同的文件。如果它工作,然後嘗試以上屬性如下。

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

正如您所看到的,我已將「expression」屬性替換爲「value」。當你想要執行某些事情時應該使用表達式,例如連接兩個字符串來構建響應文件名等。

+0

這是有效的。順便說一句,只要我使用一個表達式,例如,表達式也可以工作。謝謝你的幫助。 – jimmycliffface

+0

是的。當你在那裏提供一個表達式時,表達就起作用但是以前你爲表達式提供了一個值。這是失敗的原因。 –