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

כרגע מוצג התיעוד של Apigee Edge.
כניסה למסמכי התיעוד של Apigee X.
מידע

SourceMessageNotAvailable

קוד שגיאה

steps.extractvariables.SourceMessageNotAvailable

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

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

סיבה

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

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

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

אבחון

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

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

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

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

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

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

    לדוגמה, נניח שהמדיניות של 'חילוץ משתנים' שמוצגת למעלה מתבצעת בתהליך הבקשה. חשוב לזכור שהמשתנה response נמצא בשימוש ברכיב <Source> של המדיניות לחילוץ משתנים. המשתנה 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"
        }
    }
}

סיבה

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

אבחון

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

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

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

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

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

    מאחר שהמטען הייעודי (payload) של תגובת 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)

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

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

    steps.extractvariables.ExecutionFailed

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

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

סיבה

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

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

אבחון

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

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

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

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

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

    בדוגמה שלמעלה, אפשר לראות את המטען הייעודי (payload) של בקשת JSON:

    {
     "latitude":36.2312
    }
    

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

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

רזולוציה

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

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

<?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>