< All Topics
Print

שמירת PDF במחשב

כללי

EI כברירת מחדל לא נותן ל Response לא מורשה לחזר חזרה מקריאה שעשינו.

יש דברים ברורים שהוא מאשר כמו XML או JSON כמו גם txt וכמובן form-data ו x-www-form-urlencoded כדי שיהיה אפשר לתקשר אתנו.

אבל יש מצבים, כמו לדוגמה בעבודה מול Doxi, שאנחנו צריכים לפנות ל API שיחזיר לנו PDF.

במקרה כזה, כאשר נבצע קריאה ל API (או קריאה ישירה להורדת PDF) נקבל הודעת שגיאה:
DOCTYPE is not allowed

במקרה זה יש לאפשר גישה לסוג הקובץ הזה לעבור את EI

הגדרת EI על מנת לאפשר גישה

  1. יש לפתוח את הקובץ axis2.xml במצב עריכה.
    הקובץ נמצא בנתיב:
    wso2ei-6.6.0\conf\axis2\axis2.xml
  2. יש להוסיף רשימה לתגית messageBuilders
<messageBuilder contentType="application/pdf" class="org.wso2.carbon.relay.BinaryRelayBuilder"/>
  1. יש להוסיף רשומה לתגית messageFormatters
<messageFormatter contentType="application/pdf" class="org.wso2.carbon.relay.ExpandingMessageFormatter"/>

הגדרות שמירת קובץ

לאחר הקריאה לקובץ (או ל API שיחזיר PDF), יש להוסיף שני מאפיינים (Properties):

  1. שם הקובץ – אפשר לשים אותו קבוע או כמובן לשנות אותו עם expression
<property name="transport.vfs.ReplyFileName" scope="transport" type="STRING" value="test.pdf"/>
  1. OUT_ONLY – מאפיין חובה עם הערך true כדי לומר ל EI שאין צפי ל Response אחרי שהפעולה הבאה תתבצע (במקרה שלנו אחרי שמירת קובץ אין תגובה)
<property name="OUT_ONLY" scope="default" type="STRING" value="true"/>
  1. ביצוע קריאה לקובץ מקומי – הוא תקיית היעד אליה אנחנו רוצים לשמור את הקובץ

דוגמת קוד

<?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>
תוכן עיניינים