העתקת תוכן קובץ מ-SFTP לתיקייה לוקאלית
בכדי להעתיק קובץ הממוקם בתיקיית SFTP לתיקייה בשרת הלוקאלי / המחשב האישי, יש להשתמש ב-File connector.
העתקה תבוצע באמצעות הפונקציות file.read ו-file.write זאת מאחר ומיקום התיקייה ממנה מעתיקים הינה מסביבה אחרת.
להורדת ה-File connector, יש להוריד תחילה מהחנות של WSO2.

יש לוודא כי מתקינים את ה-Connector דרך ה- EI management console וגם דרך ה-Integration studio תחת הפרויקט הרלוונטי.
* כתיבת מסמך זה בוצעה בעבודה על IE 6.6.0 עם גרסה File connector 4.0.13.
יצירת API ראשי
להלן דוגמה של העתקת קובץ txt פשוט מתוך תיקייה ב-SFTP לתיקייה הלואקלית במחשב.
תחילה יש לייצר API שיקרא ל-Sequence.
<?xml version="1.0" encoding="UTF-8"?>
<api context="getTxt" name="getTxt" xmlns="http://ws.apache.org/ns/synapse">
<resource methods="GET">
<inSequence>
<sequence key="saveTxtFromSftp"/>
<respond/>
</inSequence>
<outSequence/>
<faultSequence/>
</resource>
</api>
יצירת Sequence לביצוע הפעולה
נייצר Sequence ושני local-entries, אחד עבור כל צד התחברות. (SFTP והסביבה הלוקאלית)
נתחיל בדוגמה ל-Sequence:
<?xml version="1.0" encoding="UTF-8"?>
<sequence name="saveTxtFromSftp" trace="disable" xmlns="http://ws.apache.org/ns/synapse">
<log level="full">
<property name="INFO" value="Starting to copy the file from SFTP to local directory"/>
</log>
<file.read configKey="FILE_CONNECTION_1">
<path>/SFTP_FOLDER/Outgoing</path>
<filePattern>test.txt</filePattern>
<readMode>Complete File</readMode>
<includeResultTo>Message Body</includeResultTo>
<enableStreaming>false</enableStreaming>
<enableLock>true</enableLock>
</file.read>
<log level="full">
<property name="INFO" value="File content read from SFTP"/>
</log>
<file.write configKey="LOCAL_PATH_CONNECTION">
<filePath>C:/WSO2/files/test.txt</filePath>
<contentOrExpression>{json-eval($.text)}</contentOrExpression>
<mimeType>Automatic</mimeType>
<compress>false</compress>
<writeMode>Overwrite</writeMode>
<enableStreaming>false</enableStreaming>
<appendNewLine>false</appendNewLine>
<enableLock>false</enableLock>
<includeResultTo>Message Body</includeResultTo>
<updateLastModified>true</updateLastModified>
</file.write>
<log level="full">
<property name="INFO" value="File successfully written to local directory"/>
</log>
</sequence>
בדוגמה זו, ניתן לראות כי מבצעים קריאה (file.read) של הקובץ txt מתוך ה-SFTP שפרטיו יפורטו ב-local-entry שנקרא FILE_CONNECTION_1.
ב-<path> למעשה נגדיר את הנתיב של מיקום הקובץ שאותו נרצה לקרוא, ב-<filePattern> נגדיר את שם הקובץ.
יש לוודא כי <includeResultTo> יכיל את הערך Message Body ע"מ שנוכל לקרוא את תוכן הקובץ.
לאחר מכן, אנו נבצע כתיבה של תוכן מה- Message Body על ידי שימוש ב- file.write, שם נחליט על מיקום ושם הקובץ במחשב האישי. (שימו לב כי צורת הכתיבה של תיקייה מתוך המחשב האישי ותיקייה ב-Linux שונה, במקרה השני יש לרשום תיקייה רלטיבית כמו שרשום ב-file.read)
ב-<contentOrExpression> נקרא למעשה את התוכן מתוך הפרמטר של הטקסט ולכן נשתמש ב-json-eval($.text).
ב-<writeMode> החלטנו כי כל פעם שהקובץ יועתק, יבוצע override על הקובץ הקודם אם היה, כמובן שאופציה זו ניתנת לשינוי.
יצירת local-entry עבור ה-SFTP (להעתקת הקובץ)
כעת נגדיר את ה-local-entry של ה-SFTP שנקרא FILE_CONNECTION_1:
<?xml version="1.0" encoding="UTF-8"?>
<localEntry key="FILE_CONNECTION_1" xmlns="http://ws.apache.org/ns/synapse">
<file.init>
<strictHostKeyChecking>false</strictHostKeyChecking>
<connectionType>SFTP</connectionType>
<password>aaaaa</password>
<host>test.consist.co.il</host>
<fileLockScheme>Local</fileLockScheme>
<sftpConnectionTimeout>100000</sftpConnectionTimeout>
<setAvoidPermission>false</setAvoidPermission>
<userDirIsRoot>true</userDirIsRoot>
<privateKeyPassword>bbbbb</privateKeyPassword>
<port>1224</port>
<name>FILE_CONNECTION_1</name>
<sftpSessionTimeout>150000</sftpSessionTimeout>
<privateKeyFilePath>C:/WSO2/consist.pem</privateKeyFilePath>
<username>consist</username>
</file.init>
</localEntry>
למעשה FILE_CONNECTION_1 מגדיר את ההתחברות ל-SFTP.
בדוגמה לעיל קיים private key (המפתח קיים בקובץ בעל סיומת pem.) שמוגדר בשרת/במחשב האישי. (שימו לב כי צורך הכתיבה של תיקייה מתוך המחשב האישי ותיקייה ב-Linux שונה, במקרה השני יש לרשום תיקייה רלטיבית כמו שרשום ב-file.read), שדה זה מוגדר ב-<privateKeyFilePath>.
מאחר ושמות השדות הם די אינטואטיביים לגבי מה כל אחד עושה, נדלג על ההסבר.
עם זאת, מומלץ לבדוק היטב את תקינות המפתח (קובץ pem) לפני השימוש וכן את פרטי ההתחברות ל-SFTP.
בכדי לעשות זאת, ניתן להשתמש ב-WinSCP לוודא תקינות החיבור.
יצירת local-entry עבור המחשב האישי (לשמירת הקובץ)
כעת, נגדיר את ה-local-entry של המחשב האישי שנקרא LOCAL_PATH_CONNECTION:
<?xml version="1.0" encoding="UTF-8"?>
<localEntry key="LOCAL_PATH_CONNECTION" xmlns="http://ws.apache.org/ns/synapse">
<file.init>
<connectionType>LOCAL</connectionType>
<fileLockScheme>Local</fileLockScheme>
<name>LOCAL_PATH_CONNECTION</name>
</file.init>
</localEntry>
למעשה LOCAL_PATH_CONNECTION מגדיר את ההתחברות למחשב האישי.
מאחר ואנו משתמשים בנתיב של התיקייה בה ישמר קובץ ה-txt במחשב האישי ב-Sequence עצמו (תחת ה-file.write), אין צורך לציין כאן את מיקום התיקייה או את שם הקובץ, עם זאת, local-entry חובה לשימוש.
לאחר שביצענו את כל ההגדרות הללו, אם נריץ את ה-API לעיל, תבוצע קריאה וכתיבה של קובץ הטקסט מהתיקייה הרלוונטית ב-SFTP למחשב האישי.