מה תרצה/י לחפש?
שמירת PDF במחשב
כללי
EI כברירת מחדל לא נותן ל Response לא מורשה לחזר חזרה מקריאה שעשינו.
יש דברים ברורים שהוא מאשר כמו XML או JSON כמו גם txt וכמובן form-data ו x-www-form-urlencoded כדי שיהיה אפשר לתקשר אתנו.
אבל יש מצבים, כמו לדוגמה בעבודה מול Doxi, שאנחנו צריכים לפנות ל API שיחזיר לנו PDF.
במקרה כזה, כאשר נבצע קריאה ל API (או קריאה ישירה להורדת PDF) נקבל הודעת שגיאה:
DOCTYPE is not allowed
במקרה זה יש לאפשר גישה לסוג הקובץ הזה לעבור את EI
הגדרת EI על מנת לאפשר גישה
- יש לפתוח את הקובץ axis2.xml במצב עריכה.
הקובץ נמצא בנתיב:
wso2ei-6.6.0\conf\axis2\axis2.xml - יש להוסיף רשימה לתגית messageBuilders
<messageBuilder contentType="application/pdf" class="org.wso2.carbon.relay.BinaryRelayBuilder"/>
- יש להוסיף רשומה לתגית messageFormatters
<messageFormatter contentType="application/pdf" class="org.wso2.carbon.relay.ExpandingMessageFormatter"/>
הגדרות שמירת קובץ
לאחר הקריאה לקובץ (או ל API שיחזיר PDF), יש להוסיף שני מאפיינים (Properties):
- שם הקובץ – אפשר לשים אותו קבוע או כמובן לשנות אותו עם expression
<property name="transport.vfs.ReplyFileName" scope="transport" type="STRING" value="test.pdf"/>
- OUT_ONLY – מאפיין חובה עם הערך true כדי לומר ל EI שאין צפי ל Response אחרי שהפעולה הבאה תתבצע (במקרה שלנו אחרי שמירת קובץ אין תגובה)
<property name="OUT_ONLY" scope="default" type="STRING" value="true"/>
- ביצוע קריאה לקובץ מקומי – הוא תקיית היעד אליה אנחנו רוצים לשמור את הקובץ
דוגמת קוד
<?xml version="1.0" encoding="UTF-8"?>
<api context="/getFile" name="getFile" xmlns="http://ws.apache.org/ns/synapse">
<resource methods="GET">
<inSequence>
<call>
<endpoint>
<http method="get" uri-template="https://yossishalom.com/wp-content/uploads/2022/04/test.pdf">
</http>
</endpoint>
</call>
<property name="transport.vfs.ReplyFileName" scope="transport" type="STRING" value="test.pdf"/>
<property name="OUT_ONLY" scope="default" type="STRING" value="true"/>
<call>
<endpoint>
<address uri="vfs:file:///c:/WSO2Folder/OUTPUT/">
</address>
</endpoint>
</call>
<respond/>
</inSequence>
<outSequence/>
<faultSequence/>
</resource>
</api>