פתרון בעיות של שגיאות בזמן ריצה של Extract Variables

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

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

SourceMessageNotAvailable

קוד שגיאה

steps.extractvariables.SourceMessageNotAvailable

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

{
  "fault": {
      "faultstring": "[variable_name] message is not available for ExtractVariable: [policy_name]",
      "detail": {
          "errorcode": "steps.extractvariables.SourceMessageNotAvailable"
      }
  }
}

מטרה

השגיאה הזו מתרחשת אם המשתנה message שצוין ברכיב<Source> של מדיניות Extract Variables (חילוץ משתנים) הוא אחד מהבאים:

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

לדוגמה, השגיאה הזו מתרחשת אם המדיניות Extract Variables (חילוץ משתנים) מופעלת בתהליך הבקשה, אבל הרכיב <Source> מוגדר למשתנה response או error, שלא קיים בתהליך הבקשה.

אבחון

  1. מזהים את מדיניות Extract Variables (חילוץ משתנים) שבה התרחשה השגיאה ואת שם המשתנה שלא זמין. אפשר למצוא את שני הפריטים האלה ברכיב faultstring של תגובת השגיאה. לדוגמה, במחרוזת השגיאה הבאה, שם המדיניות הוא ExtractVariables-1 והמשתנה הוא response:

    "faultstring": "response message is not available for ExtractVariable: ExtractVariables-1"

  2. ב-XML של מדיניות Extract Variables שנכשלה, מוודאים שהשם של המשתנה שמוגדר ברכיב זהה לשם המשתנה שזוהה במחרוזת השגיאה (שלב 1 למעלה). לדוגמה, במדיניות Extract Variables הבאה מוגדר משתנה בשם response ברכיב, שתואם למה שמופיע במחרוזת השגיאה:

    <ExtractVariables name="ExtractVariables-1">
        <Source>response</Source>
        <URIPath>
            <Pattern ignoreCase="true">/a/{pathSeg}</Pattern>
        </URIPath>
        <VariablePrefix>urirequest</VariablePrefix>
    </ExtractVariables>
    
  3. בודקים אם המשתנה שמשמש ברכיב <Source> מוגדר וזמין בתהליך העבודה שבו מופעלת מדיניות Extract Variables.

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

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

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

    לדוגמה, נניח שמדיניות Extract Variables (חילוץ משתנים) שמוצגת למעלה מופעלת בתהליך הבקשה. נזכיר שהמשתנה response משמש ברכיב <Source> של מדיניות Extract Variables. המשתנה response זמין רק בתהליך התגובה.

    מכיוון שהמשתנה response לא קיים בתהליך הבקשה, קוד השגיאה שמתקבל הוא steps.extractvariables.SourceMessageNotAvailable.

רזולוציה

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

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

<ExtractVariables name="ExtractVariables-1">
    <Source>request</Source>
    <URIPath>
        <Pattern ignoreCase="true">/a/{pathSeg}</Pattern>
    </URIPath>
    <VariablePrefix>urirequest</VariablePrefix>
</ExtractVariables>

SetVariableFailed

קוד שגיאה

steps.extractvariables.SetVariableFailed

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

{
    "fault": {
        "faultstring": "Failed to set variable [variable_name] value [variable_value] from ExtractVariables: [policy_name]",
        "detail": {
            "errorcode": "steps.extractvariables.SetVariableFailed"
        }
    }
}

מטרה

השגיאה הזו מתרחשת אם מדיניות Extract Variables לא הצליחה להגדיר את הערך למשתנה. זה קורה בדרך כלל אם מנסים להקצות ערכים לכמה משתנים שהשמות שלהם מתחילים באותן מילים בפורמט מקונן שמופרד באמצעות נקודות.

לדוגמה, נניח שאתם יוצרים משתנה var.color או מקצים לו ערך. במקרה הזה, color מוקצה כצומת אובייקט. אם תנסו להקצות ערך למשתנה אחר var.color.next, הפעולה תיכשל כי color כבר הוקצה, ואסור להקצות לו משתנה אחר.

אבחון

  1. מזהים את מדיניות Extract Variables (חילוץ משתנים) שבה התרחשה השגיאה ואת שם המשתנה שלא ניתן להגדיר לו ערך. אפשר למצוא את שני הפריטים האלה ברכיב faultstring של תגובת השגיאה. לדוגמה, במחרוזת השגיאה הבאה, שם המדיניות הוא ExtractColors והמשתנה הוא var.color.next:

    "faultstring": "Failed to set variable var.color.next value red from ExtractVariables: ExtractColors"

  2. ב-XML של מדיניות Extract Variables שנכשלה, מוודאים שהשם של המשתנה זהה לשם המשתנה שצוין במחרוזת השגיאה (שלב 1 למעלה). לדוגמה, במדיניות הבאה נעשה ניסיון להקצות ערך מפרמטר של שאילתת בקשה למשתנה בשם var.color.next (הערך שמופיע במחרוזת השגיאה):

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <ExtractVariables name="ExtractColors">
        <DisplayName>ExtractColors</DisplayName>
        <Source>request</Source>
        <QueryParam name="color">
            <Pattern ignoreCase="true">{color}</Pattern>
        </QueryParam>
        <QueryParam name="nextcolor">
            <Pattern ignoreCase="true">{color.next}</Pattern>
        </QueryParam>
        <VariablePrefix>var</VariablePrefix>
    </ExtractVariables>
    
  3. בודקים את כל שמות המשתנים שנעשה בהם שימוש במדיניות Extract Variables שנכשלה. אם הקציתם ערך למשתנה אחר שהשם שלו מתחיל באותו שם כמו שם המשתנה שזוהה במחרוזת השגיאה (שלב 1 למעלה), אז זו הסיבה לשגיאה.

    בדוגמה של מדיניות Extract Variables שמוצגת למעלה, אפשר לראות ש:

    • הערך של פרמטר השאילתה שנקרא color מוקצה קודם למשתנה var.color (הערה: var הוא הקידומת של כל המשתנים כפי שהוגדרו ברכיב <VariablePrefix>)
    • בהקצאה הבאה, הערך של פרמטר השאילתה nextcolor מוקצה למשתנה אחר var.color.next.
    • מכיוון שהמשתנה var.color כבר הוקצה, מדיניות Extract Variables לא יכולה להקצות משתנה מקונן נוסף var.color.next. לכן מופיע קוד השגיאה: steps.extractvariables.SetVariableFailed

רזולוציה

חשוב לוודא שאין לכם כמה שמות של משתנים שמתחילים באותן מילים, שמוטמעים בפורמט מופרד בנקודות.

כדי לתקן את מדיניות Extract Variables שמוצגת למעלה, אפשר לשנות את שם המשתנה var.color.next לשם המשתנה var.nextcolor.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ExtractVariables name="ExtractColors">
    <DisplayName>ExtractColors</DisplayName>
    <Source>request</Source>
    <QueryParam name="color">
        <Pattern ignoreCase="true">{color}</Pattern>
    </QueryParam>
    <QueryParam name="nextcolor">
        <Pattern ignoreCase="true">{nextcolor}</Pattern>
    </QueryParam>
    <VariablePrefix>var</VariablePrefix>
</ExtractVariables>

מידע נוסף

פרטים נוספים זמינים בפוסט הזה לקהילה.

InvalidJSONPath

קוד שגיאה

steps.extractvariables.InvalidJSONPath

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

{
    "fault": {
        "faultstring": "Invalid JSON path [path_name] in policy [policy_name].",
        "detail": {
            "errorcode": "steps.extractvariables.InvalidJSONPath"
        }
    }
}

מטרה

השגיאה הזו מתרחשת אם נעשה שימוש בנתיב JSON לא תקין ברכיב <JSONPath> של מדיניות Extract Variables. לדוגמה, אם מטען ייעודי (payload) של JSON לא מכיל את האובייקט Name, אבל מציינים את Name כנתיב במדיניות Extract Variables, השגיאה הזו תופיע.

אבחון

  1. מזהים את מדיניות Extract Variables (חילוץ משתנים) שבה אירעה השגיאה ואת נתיב ה-JSON הלא תקין. אפשר למצוא את שני הפריטים האלה ברכיב faultstring של תגובת השגיאה. לדוגמה, במחרוזת השגיאה הבאה, שם המדיניות הוא ExtractJSONVariables ונתיב ה-JSON הלא תקין הוא $.Name:

    "faultstring": "Invalid JSON path $.Name in policy ExtractJSONVariables."

  2. ב-XML של מדיניות Extract Variables שנכשלה, מוודאים שנתיב ה-JSON שמוגדר ברכיב <JSONPath> זהה לנתיב שזוהה במחרוזת השגיאה (שלב 1 למעלה). לדוגמה, במדיניות Extract Variables (חילוץ משתנים) הבאה מוגדר נתיב ה-JSON‏ $.Name, שתואם למה שמופיע במחרוזת השגיאה:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <ExtractVariables name="ExtractJSONVariables">
        <Source>response</Source>
        <JSONPayload>
            <Variable name="name" type="string">
                <JSONPath>$.Name</JSONPath>
            </Variable>
        </JSONPayload>
       <VariablePrefix>employee</VariablePrefix>
    </ExtractVariables>
    
  3. בודקים את רכיב <Source> ומנסים להבין מאיזה מטען ייעודי (payload) של JSON אתם מנסים לחלץ את המשתנה. לדוגמה, אם הרכיב <Source> מוגדר ל-request, המדיניות מחלצת את מטען ה-JSON הייעודי (payload) מאובייקט הבקשה. אם היא מוגדרת ל-response, היא תהיה אובייקט התגובה.

    בדוגמה של מדיניות Extract Variables שמוצגת למעלה, הרכיב <Source> מוגדר ל-response, ולכן המשתנים מחולצים ממטען ה-JSON של התגובה.

    <Source>response</Source>

  4. בודקים את מטען ה-JSON הייעודי (שנקבע בשלב 3) ומוודאים שהוא מכיל את האובייקט שצוין ברכיב <JSONPath>. אם מטען ה-JSON הייעודי לא מכיל את האובייקט הזה, זו הסיבה לשגיאה.

    לדוגמה, נניח שאתם מנסים לחלץ משתנים ממטען ייעודי (payload) של תגובת JSON:

    {
      "firstName":"John",
      "lastName":"Doe",
      "city":"San Jose",
      "state":"CA"
    }
    

    מכיוון שמטען הייעודי (payload) של תגובת ה-JSON לא כולל את האובייקט Name, המדיניות Extract Variables (חילוץ משתנים) נכשלת עם השגיאה שקוד השגיאה שלה הוא steps.extractvariables.InvalidJSONPath.

רזולוציה

מוודאים שרק אובייקטים שמהווים חלק ממטען ה-JSON שממנו נשלפים המשתנים מצוינים ברכיב <JSONPath> של מדיניות Extract Variables.

כדי לתקן את המדיניות לדוגמה Extract Variables שמוצגת למעלה, אפשר לשנות את הרכיב <JSONPath> כדי לציין אחד מהאובייקטים שזמינים במטען הייעודי (payload) של תגובת ה-JSON לדוגמה (לדוגמה, האובייקטים firstName ו-lastName הם תקינים):

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ExtractVariables name="ExtractJSONVariables">
    <Source>response</Source>
    <JSONPayload>
        <Variable name="name" type="string">
           <JSONPath>$.firstName</JSONPath>
        </Variable>
    </JSONPayload>
    <VariablePrefix>employee</VariablePrefix>
</ExtractVariables>

ExecutionFailed

קוד שגיאה

steps.extractvariables.ExecutionFailed

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

{
    "fault": {
        "faultstring": "Failed to execute the ExtractVariables: [policy_name]",
        "detail": {
            "errorcode": "steps.extractvariables.ExecutionFailed"
        }
    }
}

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

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

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

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

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

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

אבחון

  1. מזהים את מדיניות Extract Variables (חילוץ משתנים) שבה התרחשה השגיאה. אפשר למצוא את המידע הזה ברכיב faultstring של תגובת השגיאה. לדוגמה, במחרוזת faultstring הבאה, שם המדיניות הוא ExtractJSONVariables:

    "faultstring": "Failed to execute the ExtractVariables: ExtractXMLVariables"

  2. בודקים את רכיב <Source> ב-XML של Extract Variables שנכשל, ומזהים את סוג הקלט שממנו מופקים המשתנים. לדוגמה, במדיניות Extract Variables (חילוץ משתנים) הבאה, הרכיב <Source> מוגדר כ-response, והמשתנים מחולצים ממטען ה-XML:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <ExtractVariables name="ExtractXMLVariables" async="false" continueOnError="false" enabled="true">
        <XMLPayload>
            <Namespaces/>
            <Variable name="City" type="string">
                <XPath>/city</XPath>
            </Variable>
        </XMLPayload>
        <Source clearPayload="false">response</Source>
    </ExtractVariables>
    
    
  3. בודקים אם הקלט שמנותח על ידי מדיניות Extract Variables (חילוץ משתנים) הוא ריק. אם הקלט ריק, זו הסיבה לשגיאה.

    בדוגמה של מדיניות Extract Variables (חילוץ משתנים) שמוצגת למעלה, מטען הייעודי (payload) של התגובה (כלומר, גוף התגובה) שנשלח על ידי שרת הקצה העורפי היה ריק.

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

    steps.extractvariables.ExecutionFailed

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

    curl -v "http://$EXTERNAL_IP/v1/testevexecutionfailed" -H "Content-Type: application/xml"
    

    כאשר $EXTERNAL_IP היא כתובת ה-IP של מאזן העומסים החיצוני. כתובת ה-IP הזו חשופה לאינטרנט. מידע נוסף זמין במאמר בנושא התאמה אישית של ניתוב הגישה.

    המדיניות Extract Variables (חילוץ משתנים) מבצעת חילוץ של XML רק אם הכותרת Content-Type של ההודעה היא application/xml,‏ text/xml או application/*+xml. כדי שהמדיניות Extract Variables תנתח מטען ייעודי (payload) של בקשת XML, צריך להעביר את הכותרת Content-Type (סוג תוכן) כ-application/xml,‏ text/xml או application/*+xml.

רזולוציה

מוודאים שהקלט שמועבר למדיניות Extract Variables (חילוץ משתנים) הוא תקין ולא ריק.

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

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

    <city>Bengaluru</city>
    <area>Sanjaynagar</area>
    
  2. מבצעים את הקריאה ל-API באמצעות פקודת cURL באופן הבא:

    curl -v "http://$EXTERNAL_IP/v1/testevexecutionfailed" -H "Content-Type: application/xml" -X POST -d @city.xml
    
    

    כאשר $EXTERNAL_IP היא כתובת ה-IP של מאזן העומסים החיצוני. כתובת ה-IP הזו חשופה לאינטרנט. מידע נוסף זמין במאמר בנושא התאמה אישית של ניתוב הגישה.

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

אם המדיניות Extract Variables (חילוץ משתנים) מנתחת קלט לא תקין או קלט בפורמט שגוי, השגיאה הזו תוצג.

לדוגמה, אם קובץ ה-JSON הבא לא תקין ומוגדר כקלט למדיניות Extract Variables (חילוץ משתנים), תוצג השגיאה הזו.

[
    "args": ["name" : "amar" ]
]

אבחון

  1. מזהים את מדיניות Extract Variables (חילוץ משתנים) שבה התרחשה השגיאה. אפשר למצוא את המידע הזה ברכיב faultstring של תגובת השגיאה. לדוגמה, ברכיב faultstring הבא, שם המדיניות הוא ExtractJSONVariables:

    "faultstring": "Failed to execute the ExtractVariables: ExtractJSONVariables"

  2. בודקים את רכיב <Source> ב-XML של Extract Variables שנכשל, ומזהים את סוג הקלט שממנו מופקים המשתנים. לדוגמה, במדיניות Extract Variables (חילוץ משתנים) הבאה, הרכיב <Source> מוגדר ל-request, והמשתנים מחולצים ממטען ה-JSON:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <ExtractVariables name="ExtractJSONVariables" async="false" continueOnError="false" enabled="true">
        <JSONPayload>
            <Variable name="Name" type="string">
                <JSONPath>$.args.name</JSONPath>
            </Variable>
        </JSONPayload>
        <Source clearPayload="false">request</Source>
    </ExtractVariables>
    
    
  3. בודקים אם הקלט שמנותח על ידי מדיניות Extract Variables (חילוץ משתנים) הוא תקין. אם הקלט לא תקין או שהפורמט שלו שגוי, זו הסיבה לשגיאה.

    בדוגמה של מדיניות Extract Variables שמוצגת למעלה, קובץ ה-JSON הלא תקין הבא הועבר למדיניות Extract Variables

    [
        "args": ["name" : "amar" ]
    ]
    

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

    curl -v "http://<$EXTERNAL_IP/v1/testevexecutionfailed" -H "Content-Type: application/json" -X POST -d '[ "args" : ["name" : "amar" ]]'
    

    כאשר $EXTERNAL_IP היא כתובת ה-IP של מאזן העומסים החיצוני. כתובת ה-IP הזו חשופה לאינטרנט. מידע נוסף זמין במאמר בנושא התאמה אישית של ניתוב הגישה.

    המטען הייעודי (payload) בפורמט JSON שמועבר ל-API לא תקין כי הוא מכיל מערך עם סוגריים מרובעים ([ ]) , ולכן מתקבל קוד השגיאה:

    steps.extractvariables.ExecutionFailed
    

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

רזולוציה

מוודאים שהקלט שמועבר למדיניות Extract Variables (חילוץ משתנים) תקין ולא בפורמט שגוי.

כדי לפתור את הבעיה במדיניות Extract Variables (חילוץ משתנים) שמוסברת למעלה, צריך להעביר בקשה עם מטען ייעודי (payload) תקין בפורמט JSON באופן הבא:

{
   "args":{
      "name":"amar"
   }
}

UnableToCast

קוד שגיאה

steps.extractvariables.UnableToCast

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

{
    "fault": {
        "faultstring": "Unable to cast value [value] as [type].",
        "detail": {
            "errorcode": "steps.extractvariables.UnableToCast"
        }
    }
}

מטרה

השגיאה הזו מתרחשת אם המדיניות Extract Variables לא הצליחה להמיר את הערך שחולץ למשתנה. בדרך כלל זה קורה כשמנסים להגדיר את הערך של סוג נתונים אחד למשתנה של סוג נתונים אחר.

לדוגמה, אם מדיניות Extract Variable (חילוץ משתנה) מנסה להגדיר ערך שחולץ ממשתנה String (מחרוזת) למשתנה Integer (מספר שלם), תופיע השגיאה הזו.

אבחון

  1. מזהים את סוג הנתונים של המשתנה שאליו המדיניות Extract Variables (חילוץ משתנים) מנסה להמיר ונכשלת. אפשר למצוא את המידע הזה ברכיב faultstring של תגובת השגיאה. לדוגמה, ב-faultstring הבא, סוג האובייקט הוא BOOLEAN:

    "faultstring":"Unable to cast value 36.231 as BOOLEAN."

  2. מזהים את מדיניות Extract Variables (חילוץ משתנים) שבה מנסים להגדיר את הערך למשתנה מהסוג שנקבע בשלב 1.

    לדוגמה, מדיניות Extract Variables (חילוץ משתנים) הבאה מחלצת את הערך מ-JSONPath‏ $.latitude למשתנה מסוג boolean, שתואם למה שמופיע במחרוזת השגיאה:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <ExtractVariables name="EV-XML-Name" async="false" continueOnError="false" enabled="true">
        <JSONPayload>
          <Variable name="latitude" type="boolean">
              <JSONPath>$.latitude</JSONPath>
          </Variable>
        </JSONPayload>
        <Source clearPayload="false">response</Source>
    </ExtractVariables>
    
    
  3. בודקים את סוג הנתונים של הערך שמחולץ. הנתונים יכולים להיות בצורה של כותרות, נתיבי URI, מטען ייעודי (payload) של JSON/XML, פרמטרים של טופס ופרמטרים של שאילתה.

  4. בודקים אם סוג הנתונים שנקבע בשלב 3 וסוג הנתונים של המשתנה שאליו מוקצים הנתונים (שנקבע בשלב 2) זהים.

  5. אם סוג הנתונים של משתני המקור והיעד לא זהה, זו הסיבה לשגיאה.

    בדוגמה של מדיניות Extract Variables שמוצגת למעלה, נניח שמטען ה-JSON של הבקשה הוא כדלקמן:

    {
     "latitude":36.2312
    }
    

    סוג הנתונים של הערך שמחולץ מהתא <JSONPath>, '$.latitude', הוא מספר שלם, שמוקצה למשתנה מסוג נתונים בוליאני.

    מכיוון שסוג הנתונים של הערך שחולץ וסוג הנתונים של המשתנה שאליו הערך מוקצה לא זהים, מוצג קוד השגיאה: steps.extractvariables.UnableToCast.

רזולוציה

מוודאים שסוג הנתונים של הערך שחולץ ושל המשתנה שאליו התוכן מוקצה זהה.

כדי לתקן את המדיניות לדוגמה Extract Variables, צריך לשנות את סוג המשתנה ל-Integer:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ExtractVariables name="EV-XML-Name" async="false" continueOnError="false" enabled="true">
    <JSONPayload>
        <Variable name="latitude" type="integer">
            <JSONPath>$.latitude</JSONPath>
        </Variable>
    </JSONPayload>
    <Source clearPayload="false">response</Source>
</ExtractVariables>

JsonPathParsingFailure

קוד שגיאה

steps.extractvariables.JsonPathParsingFailure

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

{
    "fault": {
        "faultstring": "ExtractVariables [policy_name]: Json path parsing failed for for flow variables [variable_name]",
        "detail": {
            "errorcode": "steps.extractvariables.JsonPathParsingFailure"
        }
    }
}

מטרה

השגיאה הזו מתרחשת כשמדיניות Extract Variables לא מצליחה לנתח נתיב JSON ולחלץ נתונים ממשתנה הזרימה שצוין ברכיב <Source>. בדרך כלל זה קורה אם משתנה הזרימה שצוין ברכיב <Source> לא קיים בזרימה הנוכחית.

לדוגמה, השגיאה הזו מתרחשת אם המדיניות Extract Variables מופעלת בתהליך response וצפוי לנתח נתיב JSON, אבל הרכיב <Source> מציין את משתנה התהליך request.content, שלא קיים בתהליך response.

אבחון

  1. מזהים את מדיניות Extract Variables (חילוץ משתנים) שבה התרחשה השגיאה ואת השם של משתנה הזרימה שלא ניתן לחלץ ממנו נתונים. אפשר למצוא את שני הפריטים האלה ברכיב faultstring של תגובת השגיאה. לדוגמה, במחרוזת השגיאה הבאה, שם המדיניות הוא ExtractVariables-1 והמשתנה הוא request.content:

    "faultstring": "ExtractVariables ExtractJSONVariabes: Json path parsing failed for for flow variables request.content"

  2. ב-XML של מדיניות Extract Variables שנכשלה, מוודאים שהשם של המשתנה שמוגדר ברכיב <Source> זהה לשם המשתנה שצוין במחרוזת השגיאה (שלב 1 למעלה). לדוגמה, במדיניות Extract Variables (חילוץ משתנים) הבאה מצוין משתנה בשם request.content, שתואם למה שמופיע ב-faultstring:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <ExtractVariables name="ExtractJSONVariables" async="false" continueOnError="false" enabled="true">
        <JSONPayload>
            <Variable name="Name" type="string">
                <JSONPath>$.args.name</JSONPath>
            </Variable>
        </JSONPayload>
        <Source clearPayload="false">request.content</Source>
    </ExtractVariables>
    
    
  3. בודקים אם משתנה ה-Flow שמשמש ברכיב <Source>מוגדר וזמין ב-Flow שבו מופעלת מדיניות Extract Variables.

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

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

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

    לדוגמה, נניח שמדיניות ExtractVariables שמוצגת למעלה אמורה לפעול בתהליך התגובה. תזכורת: משתנה הזרימה request.content משמש ברכיב <Source> של מדיניות Extract Variables. משתנה ה-Flow‏ request.content זמין רק ב-Flow של הבקשה.

    מכיוון שהמשתנה response לא קיים בתהליך הבקשה, קוד השגיאה שמתקבל הוא steps.extractvariables.JsonPathParsingFailure.

רזולוציה

מוודאים שמשתנה הזרימה שמשמש ברכיב <Source> של מדיניות Extract Variables זמין בזרימה שבה מדיניות Extract Variables מופעלת.

לדוגמה, נניח שמשתנה בשם response.content קיים בתגובה של זרימת העבודה, והוא מכיל את ה-JSON שרוצים לחלץ. כדי לתקן את מדיניות Extract Variables שמוצגת למעלה, אפשר לשנות את הרכיב <Source> כך:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ExtractVariables name="ExtractJSONVariables" async="false" continueOnError="false" enabled="true">
    <JSONPayload>
        <Variable name="Name" type="string">
            <JSONPath>$.args.name</JSONPath>
        </Variable>
    </JSONPayload>
    <Source clearPayload="false">response.content</Source>
</ExtractVariables>