פתרון בעיות של שגיאות זמן ריצה במדיניות XML ל-JSON

הדף הזה רלוונטי ל-Apigee ול-Apigee Hybrid.

לעיון במסמכי התיעוד של Apigee Edge

SourceUnavailable

קוד שגיאה

steps.xml2json.SourceUnavailable

גוף התגובה לשגיאה

{
    "fault": {
        "faultstring": "XMLToJSON[policy_name]: Source [source_variable] is not available",
        "detail": {
            "errorcode": "steps.xmltojson.SourceUnavailable"
        }
    }
}

הודעת שגיאה לדוגמה

{
    "fault": {
        "faultstring": "XMLToJSON[Convert-XMLToJSON]: Source response is not available",
        "detail": {
            "errorcode": "steps.xml2json.SourceUnavailable"
        }
    }
}

מטרה

השגיאה הזו מתרחשת אם המשתנה message או מחרוזת שצוינו ברכיב <Source> של מדיניות XML ל-JSON הם:

  • מחוץ להיקף (לא זמין בתהליך הספציפי שבו המדיניות מופעלת) או
  • לא ניתן לפתור (לא מוגדר)

לדוגמה, השגיאה הזו מתרחשת אם מדיניות XML ל-JSON אמורה להתבצע בתהליך הבקשה, אבל הרכיב <Source> מוגדר למשתנה response, שלא קיים בתהליך הבקשה.

אבחון

  1. מזהים את מדיניות ה-XML ל-JSON שבה התרחשה השגיאה ואת שם המשתנה שלא זמין. אפשר למצוא את שני הפריטים האלה באלמנט faultstring של תגובת השגיאה. לדוגמה, ב-faultstring הבא, שם המדיניות הוא Convert-XMLToJSON והמשתנה הוא response:

    "faultstring": "XMLToJSON[Convert-XMLToJSON]: Source response is not available"
    
  2. ב-XML של מדיניות ה-XML ל-JSON שנכשלה, מוודאים שהשם של המשתנה שהוגדר ברכיב <Source> זהה לשם המשתנה שזוהה במחרוזת השגיאה (שלב 1 למעלה). לדוגמה, במדיניות הבאה של המרת XML ל-JSON מוגדר משתנה בשם response ברכיב <Source>, שתואם למה שמופיע ב-faultstring:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <XMLToJSON async="false" continueOnError="false" enabled="true" name="Convert-XMLToJSON">
        <DisplayName>Convert-XMLToJSON</DisplayName>
        <Properties/>
        <Format>google</Format>
        <OutputVariable>response</OutputVariable>
        <Source>response</Source>
    </XMLToJSON>
    
  3. בודקים אם המשתנה שמשמש ברכיב <Source> מוגדר וזמין בתהליך שבו מופעלת מדיניות ה-XML ל-JSON.

  4. אם המשתנה הוא:

    • מחוץ להיקף (לא זמין בתהליך הספציפי שבו המדיניות מופעלת) או
    • לא ניתן לפתור (לא מוגדר)

    אז זה הגורם לשגיאה.

    לדוגמה, נניח שמדיניות ה-XML ל-JSON שמוצגת למעלה אמורה להתבצע בתהליך הבקשה. נזכיר שהמשתנה response משמש ברכיב <Source> של מדיניות ה-XML ל-JSON. משתנה התגובה זמין רק בתהליך התגובה.

    מכיוון שמשתנה התגובה לא קיים בתהליך הבקשה, מוצג קוד השגיאה:

    steps.xml2json.SourceUnavailable
    

רזולוציה

מוודאים שהמשתנה שהוגדר ברכיב <Source> של מדיניות ה-XML ל-JSON שנכשלה מוגדר וקיים בתהליך שבו המדיניות מופעלת.

כדי לתקן את מדיניות ה-XML לדוגמה שמוצגת למעלה ולהפוך אותה למדיניות JSON, אפשר לשנות את הרכיב <Source> כך שישתמש במשתנה request כפי שהוא קיים בתהליך הבקשה:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<XMLToJSON async="false" continueOnError="false" enabled="true" name="Convert-XMLToJSON">
    <DisplayName>Convert-XMLToJSON</DisplayName>
    <Properties/>
    <Format>google</Format>
    <OutputVariable>response</OutputVariable>
    <Source>request</Source>
</XMLToJSON>

ExecutionFailed

קוד שגיאה

steps.xml2json.ExecutionFailed

גוף התגובה לשגיאה

{
    "fault": {
        "faultstring": "XMLToJSON[policy_name]: Execution failed. reason: Premature end of document while parsing at line [line_number](possibly  around char [character_number])",
        "detail": {
            "errorcode": "steps.xml2json.ExecutionFailed"
        }
    }
}

סיבות אפשריות

הסיבות האפשריות לשגיאה הזו:

הסיבה תיאור
מטען ייעודי (payload) של קלט חסר מטען הייעודי (payload) של הקלט (XML) ריק.
קלט לא תקין או לא מעוצב הקלט (XML) שהועבר למדיניות XML ל-JSON לא תקין או פגום.

הסיבה: חסר מטען ייעודי (payload) של קלט

השגיאה הזו מתרחשת במדיניות XML ל-JSON אם התוכן (המטען הייעודי (payload)) של המשתנה שצוין ברכיב <Source> ריק.

לדוגמה, אם האלמנט <Source> במדיניות XML ל-JSON מוגדר כמשתנה request או response והוא אמור להכיל מטען ייעודי (payload) של XML, השגיאה הזו מתרחשת אם המטען הייעודי ריק.

אבחון

  1. מזהים את מדיניות ה-XML ל-JSON שבה אירעה השגיאה. אפשר למצוא את המידע הזה באלמנט faultstring של תגובת השגיאה. לדוגמה, בשורה faultstring הבאה, שם המדיניות הוא Convert-XMLToJSON:

    "faultstring": "XMLToJSON[Convert-XMLToJSON]: Execution failed. reason: Premature end of document while parsing at line 1(possibly  around char 0)"
    
  2. בודקים את הרכיב <Source> ב-XML של מדיניות ההמרה מ-XML ל-JSON שנכשלה, ומזהים את המשתנה שצוין. לדוגמה, במדיניות ההמרה מ-XML ל-JSON הבאה, הרכיב <Source> מוגדר כבקשה:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <XMLToJSON async="false" continueOnError="false" enabled="true" name="Convert-XMLToJSON">
        <DisplayName>Convert-XMLToJSON</DisplayName>
        <Properties/>
        <Options>
            <RecognizeNumber>true</RecognizeNumber>
            <RecognizeBoolean>true</RecognizeBoolean>
            <RecognizeNull>true</RecognizeNull>
        </Options>
        <OutputVariable>request</OutputVariable>
        <Source>request</Source>
    </XMLToJSON>
    
  3. בודקים אם המשתנה שצוין לרכיב <Source> במדיניות XMLToJSON ריק. אם הוא ריק, זו הסיבה לשגיאה.

    בדוגמה של מדיניות XML ל-JSON שמוצגת למעלה, מטען הייעודי (payload) של הבקשה (כלומר, גוף הבקשה) שנשלח על ידי הלקוח היה ריק.

    לדוגמה:

    curl -v "http://your_host_alias/v1/testxmltojson" -H "Content-Type: application/xml"
    

    your_host_alias הוא דומיין שפונה לציבור ומשמש לגישה לממשקי ה-API, כפי שהוגדר במאפיין virtualhosts.hostAliases בקובץ ההחלפות. מידע נוסף זמין במאמר בנושא ציון החלפות של הגדרות.

    מכיוון שמטען ה-XML של הבקשה ריק, קיבלת את קוד השגיאה:

    steps.xml2json.ExecutionFailed
    

    השגיאה הזו יכולה להופיע גם אם רכיב <Source> מוגדר כ-response, אבל השרת העורפי מעביר מטען ייעודי ריק.

רזולוציה

מוודאים שהקלט שמועבר למדיניות XML ל-JSON דרך הרכיב <Source> הוא מטען ייעודי (payload) חוקי של XML ולא ריק.

כדי לפתור את הבעיה במדיניות לדוגמה של XML ל-JSON, צריך להעביר מטען ייעודי (payload) תקין של XML. לדוגמה:

  1. יוצרים קובץ בשם city.xml עם התוכן הבא:

    <?xml version="1.0" encoding="UTF-8"?>
    <root>
       <City>Bengaluru</City>
       <Name>Apigee</Name>
       <Pincode>560016</Pincode>
    </root>
    
  2. מבצעים את הקריאה ל-API באמצעות פקודת cURL באופן הבא:

    curl -v "http://your_host_alias/v1/testxmltojson" -H "Content-Type: application/xml" -X POST -d @company.xml
    

    your_host_alias הוא דומיין שפונה לציבור ומשמש לגישה לממשקי ה-API, כפי שהוגדר במאפיין virtualhosts.hostAliases בקובץ ההחלפות. מידע נוסף זמין במאמר בנושא ציון החלפות של הגדרות.

הסיבה: קלט לא תקין או בפורמט שגוי

אם המדיניות של XML ל-JSON מנתחת קלט לא תקין או פגום, השגיאה הזו תוצג.

לדוגמה, אם קובץ ה-XML הלא תקין הבא מסופק כקלט למדיניות XML ל-JSON,

<?xml version="1.0" encoding="UTF-8"?>
<root>
   <City>Bengaluru</City>
   <Name>Apigee</Name>
   <Pincode>560016</Pincode>

תופיע השגיאה:

"faultstring": "XMLToJSON[Convert-XMLToJSON]: Execution failed. reason: Premature end of document while parsing at line 6(possibly  around char 0)"

אבחון

  1. מזהים את מדיניות ה-XML ל-JSON שבה אירעה השגיאה. אפשר למצוא את המידע הזה באלמנט faultstring של תגובת השגיאה. לדוגמה, בשורה faultstring הבאה, שם המדיניות הוא Convert-XMLToJSON:

    "faultstring": "XMLToJSON[Convert-XMLToJSON]: Execution failed. reason: Premature end of document while parsing at line 6(possibly  around char 0)"
    
  2. בודקים את רכיב <Source> שצוין במדיניות XML ל-JSON שנכשלה. לדוגמה, במדיניות XML ל-JSON הבאה, רכיב <Source> מוגדר למשתנה request:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <XMLToJSON async="false" continueOnError="false" enabled="true" name="Convert-XMLToJSON">
        <DisplayName>Convert-XMLToJSON</DisplayName>
        <Properties/>
        <Options>
            <RecognizeNumber>true</RecognizeNumber>
            <RecognizeBoolean>true</RecognizeBoolean>
            <RecognizeNull>true</RecognizeNull>
        </Options>
        <OutputVariable>request</OutputVariable>
        <Source>request</Source>
    </XMLToJSON>
    
  3. צריך לוודא שהקלט שצוין באלמנט <Source> במדיניות XML To JSON הוא מטען ייעודי (payload) תקין בפורמט XML. אם הקלט לא תקין או פגום, זו הסיבה לשגיאה.

    בדוגמה של מדיניות XML ל-JSON שמוצגת למעלה, קובץ ה-XML הלא תקין הבא הועבר למדיניות Extract Variables דרך הקובץ city.xml:

    <?xml version="1.0" encoding="UTF-8"?>
    <root>
       <City>Bengaluru</City>
       <Name>Apigee</Name>
       <Pincode>560016</Pincode>
    

    זוהי דוגמה לקריאה ל-API שבה מוצג איך הבקשה הועברה:

    curl -v "http://your_host_alias/v1/testxmltpjson" -H "Content-Type: application/xml" -X POST -d @city.xml
    

    your_host_alias הוא דומיין שפונה לציבור ומשמש לגישה לממשקי ה-API, כפי שהוגדר במאפיין virtualhosts.hostAliases בקובץ ההחלפות. מידע נוסף זמין במאמר בנושא ציון החלפות של הגדרות.

    מטען ה-XML שעבר אל ה-API לא תקין, כי ל-XML אין תג סיום לרכיב <root>. לכן, קוד השגיאה שמתקבל הוא:

    steps.xml2json.ExecutionFailed
    

    השגיאה הזו יכולה להתרחש גם אם רכיב <Source> הוגדר כ-response, אבל מטען ה-XML של התגובה משרת הקצה העורפי לא תקין או שהוא שגוי.

רזולוציה

מוודאים שהקלט שמועבר למדיניות XML ל-JSON דרך הרכיב <Source> הוא תקין ולא פגום.

כדי לפתור את הבעיה במדיניות לדוגמה של XML ל-JSON שצוינה למעלה, צריך להעביר בקשה של מטען ייעודי (payload) בפורמט XML תקין באופן הבא:

<?xml version="1.0" encoding="UTF-8"?>
<root>
   <City>Bengaluru</City>
   <Name>Apigee</Name>
   <Pincode>560016</Pincode>
</root>

OutputVariableIsNotAvailable

קוד שגיאה

steps.xml2json.OutputVariableIsNotAvailable

גוף התגובה לשגיאה

{
    "fault": {
        "faultstring": "XMLToJSON[policy_name]: Output variable is not available.",
        "detail": {
            "errorcode": "steps.xml2json.OutputVariableIsNotAvailable"
        }
    }
}

הודעת שגיאה לדוגמה

{
    "fault": {
        "faultstring": "XMLToJSON[Convert-XMLToJSON]: Output variable is not available.",
        "detail": {
            "errorcode": "steps.xml2json.OutputVariableIsNotAvailable"
        }
    }
}

מטרה

השגיאה הזו מתרחשת אם המשתנה שצוין ברכיב <Source> של מדיניות XML ל-JSON הוא מסוג מחרוזת, והרכיב <OutputVariable> לא מוגדר. הרכיב <OutputVariable> הוא חובה כשהמשתנה שמוגדר ברכיב <Source> הוא מסוג string.

אבחון

  1. מזהים את מדיניות ה-XML ל-JSON שבה התרחשה השגיאה. אפשר למצוא אותה ברכיב faultstring של תגובת השגיאה. לדוגמה, ברכיב faultstring הבא, שם המדיניות הוא Convert-XMLToJSON:

    "faultstring": "XMLToJSON[Convert-XMLToJSON]: Output variable is not available."
    
  2. באימות המדיניות של המרת XML ל-JSON, בודקים אם התג <OutputVariable> חסר.

    זוהי דוגמה למדיניות XML ל-JSON שחסר בה רכיב <OutputVariable>.

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <XMLToJSON async="false" continueOnError="false" enabled="true" name="Convert-XMLToJSON">
        <DisplayName>Convert-XMLToJSON</DisplayName>
        <Properties/>
        <Format>google</Format>
        <Source>TrackingNumber</Source>
    </XMLToJSON>
    
    
  3. קובעים את סוג המשתנה שצוין ברכיב <Source>:

    1. מאתרים את הקוד בחבילת ה-API Proxy, שבו המשתנה הוגדר לראשונה.
    2. אחרי שמגלים באיזו מדיניות המשתנה מוגדר ומאוכלס קודם, צריך לקבוע את סוג המשתנה באופן הבא:
      1. בודקים את הערך של מאפיין הסוג (אם הוא קיים).
      2. אם מאפיין הסוג לא קיים, המשתנה נחשב למחרוזת.
    3. אם סוג המשתנה הוא string, זו הסיבה לשגיאה. במאמר הפניה למשתנים אפשר לקרוא על משתנים נפוצים ועל הסוגים שלהם.

    לדוגמה, נסתכל על המשתנה TrackingNumber במדיניות XML ל-JSON שלמעלה. סוג המשתנה הוא string. עכשיו, נסתכל על מדיניות Assign Message שמשמשת להגדרת ערך למשתנה שנקרא TrackingNumber, כמו שמוצג בהמשך:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <AssignMessage async="false" continueOnError="false" enabled="true" name="Assign_TrackingNumber">
        <DisplayName>Assign_TrackingNumber</DisplayName>
        <Properties/>
        <AssignVariable>
            <Name>TrackingNumber</Name>
            <Value><![CDATA[<Code>560075393539898</Code>]]></Value>
            <Ref/>
        </AssignVariable>
        <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
        <AssignTo createNew="false" transport="http" type="request"/>
    </AssignMessage>
    

    שימו לב שסוג המשתנה שמוגדר באמצעות <AssignVariable> הוא מחרוזת. לכן המשתנה TrackingNumber הוא מסוג מחרוזת.

    עכשיו, נזכיר שהמשתנה TrackingNumber משמש ברכיב <Source> של המדיניות XML To JSON:

    <Source>TrackingNumber</Source>
    

    מכיוון ש-TrackingNumber הוא מסוג מחרוזת והמאפיין <OutputVariable> חסר במדיניות, מוצג קוד השגיאה:

    steps.xml2json.OutputVariableIsNotAvailable
    

רזולוציה

אם המשתנה שצוין ברכיב <Source> של מדיניות XMLToJSON הוא מסוג מחרוזת, הרכיב <OutputVariable> הוא חובה במקרה הזה.

כדי לתקן את מדיניות ה-XML ל-JSON שמתוארת למעלה, צריך לכלול את הרכיב <OutputVariable> כמו שמוצג בהמשך.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<XMLToJSON async="false" continueOnError="false" enabled="true" name="Convert-XMLToJSON">
    <DisplayName>Convert-XMLToJSON</DisplayName>
    <Properties/>
    <Format>google</Format>
    <OutputVariable>response</OutputVariable>
    <Source>TrackingNumber</Source>
</XMLToJSON>

InCompatibleTypes

קוד שגיאה

steps.xml2json.InCompatibleTypes

גוף התגובה לשגיאה

{
    "fault": {
        "faultstring": "XMLToJSON[policy_name]: String can not be assigned to message type.",
        "detail": {
            "errorcode": "steps.xml2json.InCompatibleTypes"
        }
    }
}

הודעת שגיאה לדוגמה

{
    "fault": {
        "faultstring": "XMLToJSON[XMLToJSON_CheckType]: String can not be assigned to message type.",
        "detail": {
            "errorcode": "steps.xml2json.InCompatibleTypes"
        }
    }
}

מטרה

השגיאה הזו מתרחשת אם הסוג של המשתנה שמוגדר ברכיב <Source> וברכיב <OutputVariable> לא זהה. חובה שסוג המשתנים שמופיעים ברכיב <Source> וברכיב <OutputVariable> יהיה זהה.

The valid types are message and string.

אבחון

  1. מזהים את מדיניות ה-XML ל-JSON שבה התרחשה השגיאה. אפשר למצוא אותה ברכיב faultstring של תגובת השגיאה. לדוגמה, ברכיב faultstring הבא, שם המדיניות הוא XMLToJSON_CheckType:

    "faultstring": "XMLToJSON[XMLToJSON_CheckType]: String can not be assigned to message type."
    
  2. בהערה של מדיניות XML To JSON שנכשלה, מציינים את הערכים שמופיעים ב-<OutputVariable>.

    לדוגמה, מדיניות XMLToJSON שחסר בה רכיב <OutputVariable>

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <XMLToJSON async="false" continueOnError="false" enabled="true" name="XMLToJSON_CheckType">
        <DisplayName>XMLToJSON_CheckType</DisplayName>
        <Properties/>
        <Format>google</Format>
        <OutputVariable>request</OutputVariable>
        <Source>TrackingNumber</Source>
    </XMLToJSON>
    
  3. קביעת סוג המשתנה שצוין ברכיבי <Source> ו-<OutputVariable>:

    1. מאתרים את הקוד בחבילת ה-API Proxy, שבו כל אחד מהמשתנים האלה הוגדר לראשונה.
    2. אחרי שמגלים באיזו מדיניות המשתנה מוגדר ומאוכלס קודם, צריך לקבוע את סוג המשתנה באופן הבא:
      1. בודקים את הערך של מאפיין הסוג (אם הוא קיים).
      2. אם מאפיין הסוג לא קיים, המשתנה נחשב למחרוזת.
    3. אם סוג המשתנה שצוין ב-<Source> הוא string וסוג המשתנה שצוין ב-<OutputVariable> הוא message, או להיפך, זו הסיבה לשגיאה. במאמר הפניה למשתנים אפשר לקרוא על משתנים נפוצים ועל הסוגים שלהם.

    לדוגמה, נניח שיש מדיניות Assign Message שמשמשת להגדרת ערך למשתנה שנקרא TrackingNumber, כמו שמוצג בהמשך:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <AssignMessage async="false" continueOnError="false" enabled="true" name="Assign_TrackingNumber">
        <DisplayName>Assign_TrackingNumber</DisplayName>
        <Properties/>
        <AssignVariable>
            <Name>TrackingNumber</Name>
            <Value><![CDATA[<Code>560075393539898</Code>]]></Value>
            <Ref/>
        </AssignVariable>
        <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
        <AssignTo createNew="false" transport="http" type="request"/>
    </AssignMessage>
    

    שימו לב שסוג המשתנה שמוגדר באמצעות <AssignVariable> הוא מחרוזת. לכן המשתנה TrackingNumber הוא מסוג מחרוזת.

    נזכיר שהמשתנה TrackingNumber משמש ברכיב <Source> של מדיניות XMLToJSON:

    <Source>TrackingNumber</Source>
    

    באופן דומה, נזכיר שהמשתנה request משמש ברכיב <OutputVariable> של מדיניות XML ל-JSON:

    <OutputVariable>request</OutputVariable>
    

    כי TrackingNumber הוא מסוג string, והמשתנה response הוא מסוג message. אלה סוגים לא תואמים, ולכן מוצג קוד השגיאה:

    steps.xml2json.InCompatibleTypes
    

    השגיאה שלמעלה יכולה להתרחש גם אם המשתנה ברכיב <Source> הוא מסוג message, אבל המשתנה ברכיב <OutputVariable> הוא מסוג מחרוזת.

רזולוציה

חשוב לוודא שסוג המשתנה שמוגדר ברכיב <Source> זהה לסוג המשתנה שמוגדר ברכיב <OutputVariable>. חובה שסוג המשתנים שמופיעים ברכיב <Source> יהיה זהה לסוג המשתנים שמופיעים ברכיב <OutputVariable>.

כדי לתקן את מדיניות ה-XML ל-JSON שמוסברת למעלה, אפשר להצהיר על משתנה נוסף TrackingNumber_output מסוג string באמצעות מדיניות הקצאת ההודעה, ולהשתמש במשתנה הזה ברכיב <OutputVariable> של מדיניות ה-XML ל-JSON.

שינוי במדיניות בנושא הקצאת הודעות:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AssignMessage async="false" continueOnError="false" enabled="true" name="Assign_TrackingNumber">
    <DisplayName>Assign_TrackingNumber</DisplayName>
    <Properties/>
    <AssignVariable>
        <Name>TrackingNumber</Name>
        <Value><![CDATA[<Code>560098</Code>]]></Value>
        <Ref/>
    </AssignVariable>
    <AssignVariable>
        <Name>TrackingNumber_output</Name>
        <Ref/>
    </AssignVariable>
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
    <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

מדיניות XMLToJSON ששונו:

  <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
  <XMLToJSON async="false" continueOnError="false" enabled="true" name="XMLToJSON_CheckType">
      <DisplayName>XMLToJSON_CheckType</DisplayName>
      <Properties/>
      <Format>google</Format>
      <OutputVariable>TrackingNumber_output</OutputVariable>
      <Source>TrackingNumber</Source>
  </XMLToJSON>

InvalidSourceType

קוד שגיאה

steps.xml2json.InvalidSourceType

גוף התגובה לשגיאה

{
    "fault": {
        "faultstring": "XMLToJSON[class invalid_class]: Invalid source type class invalid_class. Valid source types are [message, string].",
        "detail": {
            "errorcode": "steps.xml2json.InvalidSourceType"
        }
    }
}

הודעת שגיאה לדוגמה

{
    "fault": {
        "faultstring": "XMLToJSON[class java.lang.Integer]: Invalid source type class java.lang.Integer. Valid source types are [message, string].",
        "detail": {
            "errorcode": "steps.xml2json.InvalidSourceType"
        }
    }
}

מטרה

השגיאה הזו מתרחשת אם הסוג של המשתנה שמשמש להגדרת הרכיב <Source> לא תקין.הסוגים התקינים של משתנים הם message ו-string.

אבחון

  1. מזהים את סוג המקור הלא תקין שנעשה בו שימוש במדיניות XML ל-JSON. אפשר למצוא את המידע הזה בהודעת השגיאה. לדוגמה, בשגיאה הבאה, הסוג הלא תקין הוא integer.

    "faultstring": "XMLToJSON[class java.lang.Integer]: Invalid source type class java.lang.Integer. Valid source types are [message, string]."
    
  2. בודקים את כל כללי המדיניות של XML ל-JSON ב-API Proxy הספציפי שבו התרחשה הכשל. בהערה של המדיניות 'XML To JSON' שנכשלה, מציינים את שם המשתנה שצוין ב-<Source>.

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <XMLToJSON async="false" continueOnError="false" enabled="true" name="XMLToJSON_CheckType">
        <DisplayName>XMLToJSON_CheckType</DisplayName>
        <Properties/>
        <Format>google</Format>
        <OutputVariable>response</OutputVariable>
        <Source>BookCode</Source>
    </XMLToJSON>
    
  3. קובעים את סוג המשתנה שצוין ברכיב <Source>:

    1. מאתרים את הקוד בחבילת ה-API Proxy, שבה הוגדר המשתנה הזה לראשונה.
    2. אחרי שמגלים באיזו מדיניות המשתנה מוגדר ומאוכלס קודם, צריך לקבוע את סוג המשתנה באופן הבא:
      1. בודקים את הערך של מאפיין הסוג (אם הוא קיים).
      2. אם מאפיין הסוג לא קיים, המשתנה נחשב למחרוזת.
    3. אם סוג המשתנה שצוין ב-<Source> הוא לא message ולא string, זו הסיבה לשגיאה. אפשר לקרוא על משתנים נפוצים ועל הסוגים שלהם בהפניה למשתנים.

    לדוגמה, נניח שיש מדיניות ExtractVariables שמשמשת לחילוץ ערך ממטען ייעודי (payload) של XML, והערך מוגדר למשתנה BookCode מסוג integer, כמו שמוצג בהמשך:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <ExtractVariables async="false" continueOnError="false" enabled="true" name="Extract_BookCode">
        <DisplayName>Extract_BookCode</DisplayName>
        <Properties/>
        <Source>request</Source>
        <XMLPayload stopPayloadProcessing="false">
            <Variable name="BookCode" type="integer">
                <XPath>/root/BookCode</XPath>
            </Variable>
        </XMLPayload>
    </ExtractVariables>
    

    עכשיו, נזכיר שהמשתנה BookCode משמש ברכיב <Source> של המדיניות XML To JSON:

    <Source>BookCode</Source>
    

    מכיוון שהסוג של המשתנה הזה הוא Integer, שהוא לא סוג <Source> תקין, ה-API Proxy נכשל עם השגיאה:

    steps.xml2json.InvalidSourceType
    

רזולוציה

מוודאים שסוג המשתנה שמשמש לציון הרכיב <Source> הוא תקין. הסוגים התקינים של <Source> הם message ו-string.

כדי להימנע מהשגיאה שלמעלה במדיניות XML To JSON, אפשר להשתמש במשתנה request שהוא מסוג message או בכל מחרוזת אחרת שהיא מטען ייעודי חוקי של XML.