פתרון בעיות בזמן ריצה של JSON Threat Protection

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

ExecutionFailed

קוד שגיאה

steps.jsonthreatprotection.ExecutionFailed

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

{
    "fault": {
        "faultstring": "JSONThreatProtection[policy_name]:
          Execution failed. reason: JSONThreatProtection[policy_name]: error_description
          at line line_num",
        "detail": {
            "errorcode": "steps.jsonthreatprotection.ExecutionFailed"
        }
    }
}

סוגים של שגיאות וגורמים אפשריים

המדיניות JSONThreatProtection יכולה להוביל לסוגים רבים של שגיאות ExecutionFailed. בטבלה הבאה מפורטים סוגי השגיאות השונים והסיבות האפשריות שלהן:

סוג השגיאה סיבה
חרגת מאורך שם הערך של האובייקט חריגה מאורך המחרוזת המקסימלי המותר בשם הערך של אובייקט.
חריגה ממספר הרשומות של אובייקטים חרגתם ממספר הערכים המקסימלי שאפשר להוסיף לאובייקט.
חריגה ממספר הרכיבים במערך יש חריגה ממספר הרכיבים המקסימלי המותר במערך.
חריגה מעומקו של הקונטיינר חרגתם מהעומק המקסימלי המותר של עץ הקינון.
חריגה מהאורך של ערך המחרוזת האורך המקסימלי המותר לערך מחרוזת חורג.
אובייקט JSON לא תקין המטען הייעודי (payload) שהוזן ב-JSON לא חוקי.

חרגת מאורך השם של הרשומה של האובייקט

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

{
    "fault": {
        "faultstring": "JSONThreatProtection[policy_name]:
          Execution failed. reason: JSONThreatProtection[policy_name]:
          Exceeded object entry name length at line line_num",
        "detail": {
            "errorcode": "steps.jsonthreatprotection.ExecutionFailed"
        }
    }
}

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

{
    "fault": {
        "faultstring": "JSONThreatProtection[JSON-Threat-Protection-1]:
          Execution failed. reason: JSONThreatProtection[JSON-Threat-Protection-1]:
          Exceeded object entry name length at line 2",
        "detail": {
            "errorcode": "steps.jsonthreatprotection.ExecutionFailed"
        }
    }
}

סיבה

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

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

אבחון

  1. בודקים את הודעת השגיאה כדי לזהות את שם המדיניות JSONThreatProtection ואת מספר השורה שבה מופיע שם הרשומה הארוך. לדוגמה, בהודעת השגיאה הבאה, שם המדיניות של JSONThreatProtection הוא JSON-Threat-Protection-1 ומספר השורה במטען הייעודי הוא 2.

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded object entry name
    length at line 2
    
  2. בודקים את המדיניות שזיהיתם בשלב 1 ומציינים את הערך שצוין ברכיב <ObjectEntryNameLength>.

    לדוגמה, במדיניות JSONThreatProtection הבאה, הערך של <ObjectEntryNameLength> מוגדר כ-5:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1">
        <DisplayName>JSON Threat Protection-1</DisplayName>
        <Properties/>
        <ArrayElementCount>3</ArrayElementCount>
        <ContainerDepth>12</ContainerDepth>
        <ObjectEntryCount>5</ObjectEntryCount>
        <ObjectEntryNameLength>5</ObjectEntryNameLength>
        <Source>request</Source>
        <StringValueLength>50</StringValueLength>
    </JSONThreatProtection>
    
  3. בודקים את מספר השורה הספציפית (שזוהה בשלב 1) של המטען הייעודי (payload) של הקלט ובודקים אם האורך של שם האובייקט גדול מהערך שצוין ברכיב <ObjectEntryNameLength> (שזוהה בשלב 2). אם אורך שם האובייקט חורג מהמספר הזה, זו הסיבה לשגיאה.

    דוגמה למטען ייעודי (payload) של קלט:

    {
       "number" : 500,
       "string" : "text"
    }
    

    בעומס העבודה של ה-JSON שמוצג למעלה יש מאפיין בשם number בשורה 2, שמכיל 6 תווים (אורך השם הוא 6). מאחר שאורך שם האובייקט גדול מ-5 (הערך שצוין לאלמנט <ObjectEntryNameLength>), מתקבלת השגיאה הבאה:

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded object entry name
    length at line 2
    

רזולוציה

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

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

לדוגמה, אם לדעתכם אתם יכולים לאפשר שמות של אובייקטים באורך של עד 10 תווים, עליכם לשנות את מדיניות JSONThreatProtection באופן הבא:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1">
    <DisplayName>JSON Threat Protection-1</DisplayName>
    <Properties/>
    <ArrayElementCount>3</ArrayElementCount>
    <ContainerDepth>12</ContainerDepth>
    <ObjectEntryCount>5</ObjectEntryCount>
    <ObjectEntryNameLength>10</ObjectEntryNameLength>
    <Source>request</Source>
    <StringValueLength>50</StringValueLength>
</JSONThreatProtection>

חרגת ממספר הרשומות של האובייקטים

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

{
    "fault": {
        "faultstring": "JSONThreatProtection[policy_name]:
          Execution failed. reason: JSONThreatProtection[policy_name]:
          Exceeded object entry count at line line_num",
        "detail": {
            "errorcode": "steps.jsonthreatprotection.ExecutionFailed"
        }
    }
}

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

{
    "fault": {
        "faultstring": "JSONThreatProtection[JSON-Threat-Protection-1]:
          Execution failed. reason: JSONThreatProtection[JSON-Threat-Protection-1]:
          Exceeded object entry count at line 7",
        "detail": {
            "errorcode": "steps.jsonthreatprotection.ExecutionFailed"
        }
    }
}

סיבה

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

לדוגמה, אם האלמנט <ObjectEntryCount> הוא 5, אבל למטען הייעודי (payload) של הקלט ב-JSON יש יותר מ-5 רשומות, מתקבלת השגיאה הזו.

אבחון

  1. בודקים את הודעת השגיאה כדי לזהות את השם של מדיניות JSONThreatProtection ואת מספר השורה שבה יש חריגה ממספר הרשומות. לדוגמה, בהודעת השגיאה הבאה, שם המדיניות הוא JSON-Threat-Protection-1 ומספר השורה בתוכן הייעודי הוא 7:

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded object entry count
    at line 7
    
  2. רושמים בצד את הערך שצוין ברכיב <ObjectEntryCount> של המדיניות (שזוהה בשלב 1).

    בדוגמה הבאה של מדיניות, הערך של <ObjectEntryCount> מוגדר כ-5:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1">
        <DisplayName>JSON Threat Protection-1</DisplayName>
        <Properties/>
        <ArrayElementCount>3</ArrayElementCount>
        <ContainerDepth>12</ContainerDepth>
        <ObjectEntryCount>5</ObjectEntryCount>
        <ObjectEntryNameLength>6</ObjectEntryNameLength>
        <Source>request</Source>
        <StringValueLength>50</StringValueLength>
    </JSONThreatProtection>
    
  3. בודקים את מספר השורה הספציפי (שזוהה בשלב 1) של עומס העבודה להזנה, ובודקים אם מספר הישויות בעומס העבודה גדול מהערך שצוין לרכיב <ObjectEntryCount> (שזוהה בשלב 2). אם מספר האובייקטים חורג ממספר הרשומות של האובייקטים, זו הסיבה לשגיאה.

    דוגמה למטען ייעודי (payload) של קלט:

    {
    "name" : "John",
    "id" : 234687,
    "age" : 31,
    "city" : "New York",
    "country" : "USA",
    "company" : "Google"
    }
    

    בעומס העבודה של ה-JSON שמוצג למעלה, הערך השישי מופיע בשורה 7 (company). מכיוון שמספר הרשומות של האובייקטים במטען הייעודי (payload) של ה-JSON בקלט גדול מ-5 (הערך שצוין לרכיב <ObjectEntryCount>), מתקבלת השגיאה הבאה:

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded object entry count at
    line 7
    

רזולוציה

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

עם זאת, אם אתם קובעים שאפשר לכלול יותר רשומות של אובייקטים בלי שום השלכה, תוכלו לשנות את <ObjectEntryCount> לערך מתאים בהתאם לדרישות שלכם.

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

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1">
    <DisplayName>JSON Threat Protection-1</DisplayName>
    <Properties/>
    <ArrayElementCount>3</ArrayElementCount>
    <ContainerDepth>12</ContainerDepth>
    <ObjectEntryCount>10</ObjectEntryCount>
    <ObjectEntryNameLength>6</ObjectEntryNameLength>
    <Source>request</Source>
    <StringValueLength>50</StringValueLength>
</JSONThreatProtection>

חרגת ממספר הרכיבים במערך

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

{
    "fault": {
        "faultstring": "JSONThreatProtection[policy_name]:
          Execution failed. reason: JSONThreatProtection[policy_name]:
          Exceeded array element count at line line-num",
        "detail": {
            "errorcode": "steps.jsonthreatprotection.ExecutionFailed"
        }
    }
}

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

{
    "fault": {
        "faultstring": "JSONThreatProtection[JSON-Threat-Protection-1]:
          Execution failed. reason: JSONThreatProtection[JSON-Threat-Protection-1]:
          Exceeded array element count at line 3",
        "detail": {
            "errorcode": "steps.jsonthreatprotection.ExecutionFailed"
        }
    }
}

סיבה

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

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

אבחון

  1. בודקים את הודעת השגיאה כדי לזהות את שם המדיניות ואת מספר השורה שבה חרגתם מאורך המערך. לדוגמה, בהודעת השגיאה הבאה, שם המדיניות הוא JSON-Threat-Protection-1 ומספר השורה במטען הייעודי (Payload) הוא 3:

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded array element count at line 3
    
  2. רושמים בצד את הערך שצוין לרכיב <ArrayElementCount> במדיניות (שזוהה בשלב 1).

    בדוגמה הבאה של מדיניות JSONThreatProtection, הערך של <ArrayElementCount> מוגדר כ-3:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1">
        <DisplayName>JSON Threat Protection-1</DisplayName>
        <Properties/>
        <ArrayElementCount>3</ArrayElementCount>
        <ContainerDepth>12</ContainerDepth>
        <ObjectEntryCount>5</ObjectEntryCount>
        <ObjectEntryNameLength>6</ObjectEntryNameLength>
        <Source>request</Source>
        <StringValueLength>50</StringValueLength>
    </JSONThreatProtection>
    
  3. בודקים את מספר השורה הספציפי (שזוהה בשלב 1) של עומס העבודה להזנה, ובודקים אם למספר שמופיע במערך שצוין יש ערך גבוה יותר מהמספר שצוין ברכיב <ArrayElementCount> (שזוהה בשלב 2). אם מספר רכיבי המערך חורג מהספירה, זו הסיבה לשגיאה.

    הנה דוגמה למטען ייעודי (payload) של קלט:

    {
     "name":"Ford",
     "models":[
        "Mustang",
        "Endeavour",
        "Fiesta",
        "EcoSport",
        "Focus"
     ]
    }
    

    למטען הייעודי (payload) של ה-JSON שמוצג למעלה יש 5 רכיבים במערך בשם models בשורה 3. מכיוון שמספר הרכיבים במערך גדול מ-3 (הערך שצוין לאלמנט <ArrayElementCount>), מתקבלת השגיאה הבאה:

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded array element count
    at line 3
    

רזולוציה

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

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

לדוגמה, אם אתם חושבים שאתם יכולים לאפשר עד 5 רכיבי מערך, עליכם לשנות את המדיניות באופן הבא:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1">
    <DisplayName>JSON Threat Protection-1</DisplayName>
    <Properties/>
    <ArrayElementCount>5</ArrayElementCount>
    <ContainerDepth>12</ContainerDepth>
    <ObjectEntryCount>5</ObjectEntryCount>
    <ObjectEntryNameLength>6</ObjectEntryNameLength>
    <Source>request</Source>
    <StringValueLength>50</StringValueLength>
</JSONThreatProtection>

חרגת מעומקו של המאגר

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

תעבורת נתונים בזמן ריצה מחזירה קוד תגובה 500 עם השגיאה הבאה:

{
    "fault": {
        "faultstring": "JSONThreatProtection[policy_name]:
          Execution failed. reason: JSONThreatProtection[policy_name]:
          Exceeded container depth at line line-num",
        "detail": {
            "errorcode": "steps.jsonthreatprotection.ExecutionFailed"
        }
    }
}

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

{
    "fault": {
        "faultstring": "JSONThreatProtection[JSON-Threat-Protection-1]:
          Execution failed. reason: JSONThreatProtection[JSON-Threat-Protection-1]:
          Exceeded container depth at line 5",
        "detail": {
            "errorcode": "steps.jsonthreatprotection.ExecutionFailed"
        }
    }
}

סיבה

השגיאה הזו מתרחשת אם מטען הייעודי (payload) של הודעת הקלט שצוין על ידי הרכיב <Source> מכיל אובייקט JSON שמכיל רכיבי JSON עם עומק מאגר (container) שחורג מעומק המאגר המקסימלי שצוין ברכיב <ContainerDepth> של המדיניות. עומק הקונטיינר הוא עומק ההטמעה המקסימלי המותר לרכיבי JSON. לדוגמה, מערך שמכיל אובייקט שמכיל אובייקט יביא לעומק הכליאה של 3.

לדוגמה, אם האלמנט <ContainerDepth> הוא 3, אבל עומק הקונטיינר של המטען הייעודי (payload) של הקלט חורג מהמגבלה הזו, מתרחשת הטלת השגיאה הזו.

אבחון

  1. בודקים את הודעת השגיאה כדי לזהות את שם המדיניות JSONThreatProtection ואת מספר השורה שבה חרגתם מהעומק של הקונטיינר. לדוגמה, בהודעת השגיאה הבאה, שם המדיניות הוא JSON-Threat-Protection-1 ומספר השורה בתוכן הייעודי הוא 5.

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded container depth at
    line 5
    
  2. חשוב לשים לב לערך שצוין לאלמנט <ContainerDepth> (שזוהה בשלב 1).

    בדוגמה הבאה של מדיניות JSONThreatProtection, הערך של <ContainerDepth> מוגדר כ-5:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1">
        <DisplayName>JSON Threat Protection-1</DisplayName>
        <Properties/>
        <ArrayElementCount>3</ArrayElementCount>
        <ContainerDepth>5</ContainerDepth>
        <ObjectEntryCount>5</ObjectEntryCount>
        <ObjectEntryNameLength>20</ObjectEntryNameLength>
        <Source>request</Source>
        <StringValueLength>50</StringValueLength>
    </JSONThreatProtection>
    
  3. בודקים את מספר השורה הספציפי (שזוהה בשלב 1) של עומס העבודה להזנה, ובודקים אם עומק הקונטיינר בעומס העבודה גבוה מהערך שצוין ברכיב <ContainerDepth> (שזוהה בשלב 2). אם עומק המאגר חורג מהמספר הזה, זו הסיבה לשגיאה.

    דוגמה למטען ייעודי (payload) של קלט:

    {
     "ContainerDepth2":[ {
           "ContainerDepth4":[
              {
                 "ContainerDepth6":[
                    "1",
                    "2"
                 ]
              }
           ]
        }
     ]
    }
    

    למטען הייעודי (payload) של ה-JSON שמוצג למעלה יש עומק של 6 קונטיינרים בשורה 5. מכיוון שהעומק גדול מ-5, הערך שצוין לרכיב <ContainerDepth> של מדיניות JSONThreatProtection מקבל את השגיאה הבאה:

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded container depth at
    line 5
    

רזולוציה

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

עם זאת, אם אתם קובעים שעומק קונטיינר גבוה יותר מקובל, צריך לשנות את הערך של <ContainerDepth> לערך מתאים בהתאם לדרישות שלכם.

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

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1">
    <DisplayName>JSON Threat Protection-1</DisplayName>
    <Properties/>
    <ArrayElementCount>3</ArrayElementCount>
    <ContainerDepth>10</ContainerDepth>
    <ObjectEntryCount>5</ObjectEntryCount>
    <ObjectEntryNameLength>20</ObjectEntryNameLength>
    <Source>request</Source>
    <StringValueLength>50</StringValueLength>
</JSONThreatProtection>

חרגת מאורך ערך המחרוזת

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

{
    "fault": {
        "faultstring": "JSONThreatProtection[policy_name]:
          Execution failed. reason: JSONThreatProtection[policy_name]:
          Exceeded string value length at line line-num",
        "detail": {
            "errorcode": "steps.jsonthreatprotection.ExecutionFailed"
        }
    }
}

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

{
    "fault": {
        "faultstring": "JSONThreatProtection[JSON-Threat-Protection-1]:
          Execution failed. reason: JSONThreatProtection[JSON-Threat-Protection-1]:
          Exceeded string value length at line 3",
        "detail": {
            "errorcode": "steps.jsonthreatprotection.ExecutionFailed"
        }
    }
}

סיבה

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

לדוגמה, אם הרכיב <StringValueLength> מוגדר ל-50 במדיניות, אבל בעומס העבודה של הקלט יש רכיב אחד או יותר שהערכים שלהם מכילים יותר מ-50 תווים, מתרחשת השגיאה הזו.

אבחון

  1. בודקים את הודעת השגיאה כדי לזהות את שם המדיניות ואת מספר השורה שבה יש חריגה מאורך המחרוזת. בדוגמה הבאה, שם המדיניות הוא JSON-Threat-Protection-1 andline in the payload 3.

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded string value length at line 3
    
  2. רושמים בצד את הערך שצוין לרכיב <StringValueLength> (שזוהה בשלב 1).

    בדוגמה הבאה של מדיניות JSONThreatProtection, הערך <StringValueLength> מוגדר כ-50:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1">
        <DisplayName>JSON Threat Protection-1</DisplayName>
        <Properties/>
        <ArrayElementCount>3</ArrayElementCount>
        <ContainerDepth>5</ContainerDepth>
        <ObjectEntryCount>5</ObjectEntryCount>
        <ObjectEntryNameLength>20</ObjectEntryNameLength>
        <Source>request</Source>
        <StringValueLength>50</StringValueLength>
    </JSONThreatProtection>
    
  3. בודקים את מספר השורה הספציפי (שזוהה בשלב 1) של עומס העבודה להזנה, ובודקים אם אורך הערך גדול ממספר התווים שצוין לאלמנט <StringValueLength> (שזוהה בשלב 2). אם אורך הערך חורג מהמגבלה, זו הסיבה לשגיאה.

    דוגמה למטען ייעודי (payload) של קלט:

    {
      "Country": "New Zealand",
      "Place Name": "Taumatawhakatangihangakoauauotamateaturipukakapikimaungahoronukupokaiwhenuakitanatahu"
    }
    

    במטען הייעודי (payload) של ה-JSON שמוצג למעלה יש אובייקט בשם Place Name, שהערך שלו Taumatawhakatangihangakoauauotamateaturipukakapikimaungahoronukupokaiwhenuakitanatahu מכיל 85 תווים בשורה 3. מכיוון שהאורך של הערך גדול מ-50, הערך שצוין ברכיב <StringValueLength>, תופיע השגיאה הבאה:

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded string value length
    at line 3
    

רזולוציה

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

עם זאת, אם אתם קובעים שאפשר לציין אורך ערך ארוך יותר בתוכן הייעודי, צריך לשנות את <StringValueLength> לערך מתאים על סמך הדרישות שלכם.

לדוגמה, אם אתם חושבים שתוכלו לאפשר ערך באורך של עד 90, עליכם לשנות את המדיניות באופן הבא:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1">
    <DisplayName>JSON Threat Protection-1</DisplayName>
    <Properties/>
    <ArrayElementCount>3</ArrayElementCount>
    <ContainerDepth>5</ContainerDepth>
    <ObjectEntryCount>5</ObjectEntryCount>
    <ObjectEntryNameLength>20</ObjectEntryNameLength>
    <Source>request</Source>
    <StringValueLength>90</StringValueLength>
</JSONThreatProtection>

אובייקט JSON לא חוקי

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

{
    "fault": {
        "faultstring": "JSONThreatProtection[policy_name]:
          Execution failed. reason: string: at line line-num",
        "detail": {
            "errorcode": "steps.jsonthreatprotection.ExecutionFailed"
        }
    }
}

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

{
    "fault": {
        "faultstring": "JSONThreatProtection[JSON-Threat-Protection-1]:
          Execution failed. reason: Expecting : at line 3",
        "detail": {
            "errorcode": "steps.jsonthreatprotection.ExecutionFailed"
        }
    }
}

סיבה

השגיאה הזו מתרחשת אם עומס העבודה של הודעת הקלט שצוין על ידי הרכיב <Source> במדיניות JSONThreatProtection הוא לא אובייקט JSON חוקי.

אבחון

  1. בודקים את הודעת השגיאה כדי לזהות את שם המדיניות ואת מספר השורה שבה השגיאה התרחשה. בדוגמה הבאה, שם המדיניות הוא JSON-Threat-Protection-1 andline in the payload 2.

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason: Expecting : at line 3
    
  2. בודקים את מספר השורה הספציפי (שזוהה בשלב 1) של עומס העבודה (payload) של הקלט, ובודקים אם אובייקט ה-JSON שהוענק בעומס העבודה הוא אכן אובייקט JSON חוקי.

    דוגמה למטען ייעודי (payload) של קלט:

    {
      "Longitude": 6.11499,
      "Latitude"  50.76891
    }
    

    בעומס העבודה של ה-JSON שמוצג למעלה, בשורה 3 אין ":" (נקודה-פסיק). מכיוון שזה לא אובייקט JSON חוקי, תופיע השגיאה הבאה:

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    Expecting : at line 3
    

רזולוציה

צריך לוודא שמטען ייעודי (payload) תקין של JSON עם קלט מועבר לכל שרת Proxy ל-API שכולל את מדיניות JSONThreatProtection.

בדוגמה שמתוארת למעלה, משנים את מטען ה-JSON באופן הבא:

{
    "Longitude": 6.11499,
  "Latitude" : 50.76891
}

SourceUnavailable

קוד שגיאה

steps.jsonthreatprotection.SourceUnavailable

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

{
    "fault": {
        "faultstring": "JSONThreatProtection[policy_name]::
          Source[var_name] is not available"
        "detail": {
            "errorcode": "steps.jsonthreatprotection.SourceUnavailable"
        }
    }
}

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

{
    "fault": {
        "faultstring": "JSONThreatProtection[JSON-Threat-Protection-1]::
          Source requests is not available",
        "detail": {
            "errorcode": "steps.jsonthreatprotection.SourceUnavailable"
        }
    }
}

סיבה

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

  • מחוץ להיקף (לא זמין בתהליך הספציפי שבו המדיניות מתבצעת)
  • לא אחד מהערכים החוקיים request,‏ response או message

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

אבחון

  1. מזהים את שם המדיניות ואת השם של משתנה המקור בהודעת השגיאה. לדוגמה, בהודעת השגיאה הבאה, שם המדיניות הוא JSON-Threat-Protection-1 והמשתנה Source הוא requests:

    JSONThreatProtection[JSON-Threat-Protection-1]:: Source requests is not available
    
  2. בודקים את הערך שצוין עבור הרכיב <Source> שזוהה בשלב 1.

    בדוגמה הבאה של מדיניות JSONThreatProtection, הרכיב <Source> מוגדר להיות requests.

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1">
        <DisplayName>JSON Threat Protection-1</DisplayName>
        <Properties/>
        <ArrayElementCount>3</ArrayElementCount>
        <ContainerDepth>5</ContainerDepth>
        <ObjectEntryCount>5</ObjectEntryCount>
        <ObjectEntryNameLength>20</ObjectEntryNameLength>
        <Source>requests</Source>
        <StringValueLength>50</StringValueLength>
    </JSONThreatProtection>
    

    הערכים התקינים לרכיב <Source> הם request,‏ response או message. מאחר שהערך requests לא חוקי ולא קיים בתהליך שבו המדיניות מתבצעת, תופיע השגיאה הבאה:

    JSONThreatProtection[JSON-Threat-Protection-1]:: Source requests is not available
    

רזולוציה

מוודאים שהמשתנה שמוגדר ברכיב <Source> של מדיניות JSONThreatProtection שנכשלה מוגדר לערך request, response או message, ושהוא קיים בתהליך שבו המדיניות מופעלת.

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

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1">
    <DisplayName>JSON Threat Protection-1</DisplayName>
    <Properties/>
    <ArrayElementCount>3</ArrayElementCount>
    <ContainerDepth>5</ContainerDepth>
    <ObjectEntryCount>5</ObjectEntryCount>
    <ObjectEntryNameLength>20</ObjectEntryNameLength>
    <Source>request</Source>
    <StringValueLength>50</StringValueLength>
</JSONThreatProtection>

NonMessageVariable

קוד שגיאה

steps.jsonthreatprotection.NonMessageVariable

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

{
    "fault": {
        "faultstring": "JSONThreatProtection[policy_name]:
          Variable var_name does not resolve to a Message"
        "detail": {
            "errorcode": "steps.jsonthreatprotection.NonMessageVariable"
        }
    }
}

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

{
    "fault": {
        "faultstring": "JSONThreatProtection[JSON-Threat-Protection-1]:
          Variable message.content does not resolve to a Message",
        "detail": {
            "errorcode": "steps.jsonthreatprotection.NonMessageVariable"
        }
    }
}

סיבה

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

משתני סוג ההודעה מייצגים בקשות HTTP ותגובות HTTP שלמות. המשתנים המובנים של תהליך Apigee Edge, request, ‏ response ו-message הם מסוג message. למידע נוסף על משתני הודעות, קראו את חומר העזר בנושא משתנים.

אבחון

  1. מזהים את השם של מדיניות JSONThreatProtection ואת השם של משתנה המקור בהודעת השגיאה. לדוגמה, בהודעת השגיאה הבאה, שם המדיניות הוא JSON-Threat-Protection-1 והמשתנה Source הוא message.content:

    JSONThreatProtection[JSON-Threat-Protection-1]: Variable message.content does not resolve to a Message
    
  2. בודקים את הרכיב <Source> במדיניות JSONThreatProtection (שזוהה בשלב 1).

    בדוגמה הבאה של מדיניות JSONThreatProtection, הערך של <Source> מוגדר כ-message.content במקום כ-message:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1">
        <DisplayName>JSON Threat Protection-1</DisplayName>
        <Properties/>
        <ArrayElementCount>3</ArrayElementCount>
        <ContainerDepth>5</ContainerDepth>
        <ObjectEntryCount>5</ObjectEntryCount>
        <ObjectEntryNameLength>20</ObjectEntryNameLength>
        <Source>message.content</Source>
        <StringValueLength>50</StringValueLength>
    </JSONThreatProtection>
    

    מכיוון ש-message.content הוא לא מסוג message, מתקבלת השגיאה:

    JSONThreatProtection[JSON-Threat-Protection-1]: Variable message.content does
    not resolve to a Message
    

רזולוציה

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

כדי לתקן את המדיניות, אפשר לשנות את האלמנט <Source> כך שיציין משתנה מסוג message. לדוגמה, בקובץ JSONThreatProtection שנכשל, אפשר לציין את הרכיב <Source> בתור message:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1">
    <DisplayName>JSON Threat Protection-1</DisplayName>
    <Properties/>
    <ArrayElementCount>3</ArrayElementCount>
    <ContainerDepth>5</ContainerDepth>
    <ObjectEntryCount>5</ObjectEntryCount>
    <ObjectEntryNameLength>20</ObjectEntryNameLength>
    <Source>message</Source>
    <StringValueLength>50</StringValueLength>
</JSONThreatProtection>