פתרון בעיות בזמן ריצה לגבי חילוץ משתנים

אתם צופים במסמכי התיעוד של Apigee Edge.
כניסה למסמכי העזרה של Apigee X.
info

SourceMessageNotAvailable

קוד שגיאה

steps.extractvariables.SourceMessageNotAvailable

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

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

סיבה

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

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

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

אבחון

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

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

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

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

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

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

    זאת הסיבה לשגיאה.

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

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

רזולוציה

צריך לוודא שהמשתנה שמוגדר ברכיב <Source> של מדיניות חילוץ משתני חילוץ שנכשל, מוגדר וקיים בתהליך שבו המדיניות מופעלת.

כדי לתקן את מדיניות חילוץ המשתנים שמוצגת למעלה, אפשר לשנות את הרכיב <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"
        }
    }
}

סיבה

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

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

אבחון

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

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

  2. ב-XML של המדיניות בנושא חילוץ משתנים שנכשלו, צריך לוודא ששם המשתנה תואם לשם המשתנה שזוהה במחרוזת השגיאה (שלב 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. צריך לבדוק את כל שמות המשתנים שנעשה בהם שימוש במדיניות חילוץ משתנים שנכשלו. אם הקציתם ערך למשתנה אחר ששמו מתחיל באותו שם כמו שם המשתנה המזוהה במחרוזת השגיאה (שלב 1 למעלה), זו הסיבה לשגיאה.

    במדיניות לדוגמה בנושא חילוץ משתנים, מוצגת למעלה, שימו לב לדברים הבאים:

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

רזולוציה

  1. מוודאים שאין לכם כמה שמות של משתנים שהשמות שלהם מתחילים ב- מילים שהוצבו בתוך קובץ בפורמט שמופרד באמצעות נקודות.

    כדי לתקן את מדיניות חילוץ המשתנים שמוצגת למעלה, אפשר לשנות את שם המשתנה 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"
        }
    }
}

סיבה

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

אבחון

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

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

  2. ב-XML של המדיניות בנושא חילוץ משתנים שנכשלו, צריך לוודא שנתיב ה-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, המדיניות מחלצת את המטען הייעודי (payload) של JSON מאובייקט הבקשה. אם הוא מוגדר לערך response, הוא יהיה אובייקט תשובה.

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

    <Source>response</Source>

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

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

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

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

רזולוציה

  1. צריך לוודא שרק אובייקטים שהם חלק מהמטען הייעודי (Payload) של JSON שממנו נשלפים את המשתנים מצוינים ברכיב <JSONPath> של המדיניות בנושא חילוץ משתנים.

    כדי לתקן את המדיניות לדוגמה של חילוץ משתנים, מוצגת למעלה, אפשר לשנות את הרכיב <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) של קלט

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

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

אבחון

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

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

  2. יש לבדוק את הרכיב <Source> ב-XML של משתני חילוץ שנכשלו, ולקבוע את סוג הקלט שממנו המשתנים נשלפים. לדוגמה, במדיניות הבאה של חילוץ משתנים, הרכיב <Source> מוגדר כ-response והיא מחלצת את המשתנים ממטען הייעודי (payload) של ה-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. צריך לבדוק אם הקלט שמנתח במדיניות חילוץ משתנים ריק. אם הקלט ריק, זו הסיבה לשגיאה.

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

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

    steps.extractvariables.ExecutionFailed

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

    curl -v "http://<org>-<env>.apigee.net/v1/testevexecutionfailed" -H "Content-Type: application/xml"
    

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

רזולוציה

צריך לוודא שהקלט שמועבר למדיניות חילוץ משתנים תקין ולא ריק.

כדי לפתור את הבעיה במדיניות לדוגמה של חילוץ משתנים שמוצגת למעלה, צריך להעביר עומס נתונים תקין בפורמט XML. לדוגמה:

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

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

    curl -v "http://<org>-<env>.apigee.net/v1/testevexecutionfailed" -H "Content-Type: application/xml" -X POST -d @city.xml
    
    

הסיבה: קלט לא תקין או פגום

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

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

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

אבחון

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

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

  2. בודקים את הרכיב <Source> בקובץ ה-XML של משתני החילוץ שנכשל, ומגדירים את סוג הקלט שממנו מופקים המשתנים. לדוגמה, במדיניות הבאה של Variable Variables (משתנים לחילוץ), הרכיב <Source> מוגדר כ-request ומחלץ את המשתנים מהמטען הייעודי (payload) של 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. בודקים אם הקלט שעבר ניתוח לפי המדיניות של חילוץ המשתנים תקין. אם הקלט לא חוקי או שגוי, זו הסיבה לשגיאה.

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

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

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

    curl -v "http://<org>-<env>.apigee.net/v1/testevexecutionfailed" -H "Content-Type: application/json" -X POST -d '[ "args" : ["name" : "amar" ]]'
    

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

    steps.extractvariables.ExecutionFailed
    

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

רזולוציה

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

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

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

UnableToCast

קוד שגיאה

steps.extractvariables.UnableToCast

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

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

סיבה

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

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

אבחון

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

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

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

    לדוגמה, המדיניות הבאה של חילוץ משתנים מחלצת את הערך מ- קובץ 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, מטענים ייעודיים של JSON/XML, פרמטרים של טפסים ופרמטרים של שאילתות.

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

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

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

    {
     "latitude":36.2312
    }
    

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

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

רזולוציה

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

כדי לתקן את מדיניות הדוגמה של משתני חילוץ, צריך לשנות את הסוג של המשתנה ל-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 flow variables [variable_name]",
        "detail": {
            "errorcode": "steps.extractvariables.JsonPathParsingFailure"
        }
    }
}

סיבה

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

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

אבחון

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

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

  2. ב-XML של מדיניות חילוץ משתנים שנכשלו, מוודאים ששם המשתנה שמוגדר ברכיב <Source> תואם לשם המשתנה שזוהה מחרוזת שגיאה (שלב 1 למעלה). לדוגמה, משתני החילוץ הבאים המדיניות הזו מציינת משתנה בשם 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. צריך לבדוק אם משתנה הזרימה שבו נעשה שימוש ברכיב <Source> מוגדר וזמין בתהליך שבו מופעלת המדיניות חילוץ משתנים.

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

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

    זאת הסיבה לשגיאה.

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

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

רזולוציה

מוודאים שמשתנה הזרימה שבו נעשה שימוש ברכיב <Source>של החילוץ המדיניות בנושא משתנים זמינה בתהליך שבו המדיניות בנושא חילוץ משתנים מבצע.

לדוגמה, נניח שיש בתשובה משתנה בשם response.content ולמעשה מכיל את ה-JSON שרוצים לחלץ. כדי לתקן את החֶלֶץ מדיניות המשתנים שמוצגת למעלה, אפשר לשנות את הרכיב <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>