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

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

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 עלולה לגרום להרבה סוגים שונים של שגיאות Executionנכשל. בטבלה הבאה מפורטים סוגי השגיאות השונים והסיבות האפשריות לכך:

סוג השגיאה סיבה
חרגת מהאורך של שם הערך של האובייקט קיימת חריגה מאורך המחרוזת המקסימלי המותר בשם ערך של אובייקט.
חרגת ממספר הכניסות של האובייקטים יש חריגה מהמספר המקסימלי של הערכים המותרים באובייקט.
חריגה ממספר רכיבי המערך קיימת חריגה ממספר הרכיבים המקסימלי המותר במערך.
חריגה מעומק המאגר חרגת מעומק הקינון המקסימלי המותר.
חריגה מהאורך של ערך המחרוזת חרגת מהאורך המקסימלי המותר של ערך מחרוזת.
אובייקט 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"
        }
    }
}

סיבה

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

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

אבחון

  1. בודקים את הודעת השגיאה כדי לזהות את שם המדיניות JSONThreatProtection ואת מספר השורה שבה מופיע השם הארוך של הרשומה. לדוגמה, בהודעת השגיאה הבאה, שם המדיניות JSONThreatProtection הוא JSON-Threat-Protection-1 ומספר השורה במטען הייעודי (payload) הוא 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"
    }
    

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

עם זאת, אם קובעים שאפשר לציין במטען הייעודי (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"
        }
    }
}

סיבה

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

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

אבחון

  1. בודקים את הודעת השגיאה כדי לזהות את שם המדיניות JSONThreatProtection ואת מספר השורה שבה יש חריגה ממספר הרשומות. לדוגמה, בהודעת השגיאה הבאה, שם המדיניות הוא JSON-Threat-Protection-1 ומספר השורה במטען הייעודי (payload) הוא 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) של המטען הייעודי (payload) של הקלט, ולבדוק אם מספר הישויות במטען הייעודי (payload) גדול מהערך שצוין עבור הרכיב <ObjectEntryCount> (שזוהה בשלב 2). אם מספר האובייקטים חורג ממספר הכניסות של האובייקטים, זו הסיבה לשגיאה.

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

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

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

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

סיבה

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

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

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

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

אבחון

  1. בודקים את הודעת השגיאה כדי לזהות את שם המדיניות JSONThreatProtection ואת מספר השורה שבה יש חריגה מעומק הקונטיינר. לדוגמה, בהודעת השגיאה הבאה, שם המדיניות הוא JSON-Threat-Protection-1 ומספר השורה במטען הייעודי (payload) הוא 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) של המטען הייעודי (payload) של הקלט, ובודקים אם עומק הקונטיינר במטען הייעודי (payload) גבוה מהערך שצוין ברכיב <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 נועדה להגן מפני מטענים ייעודיים (payloads) עם עומקי קונטיינרים שחורגים מהערך שצוין, הודעת השגיאה צפויה. במקרה כזה לא נדרשת כל פעולה נוספת.

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

עם זאת, אם אפשר לציין אורך ערך ארוך יותר במטען הייעודי (payload), צריך לשנות את <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"
        }
    }
}

סיבה

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

אבחון

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

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

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

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

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

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

רזולוציה

יש לוודא שמטען ייעודי (payload) חוקי של JSON מועבר לכל שרת proxy של API שכולל את מדיניות JSONThreatProtection.

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

    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. הבקשות, התגובות וההודעה של משתני הזרימה המובנים ב-Apigee Edge הן מסוג הודעות. מידע נוסף על משתני הודעות זמין בחומר העזר בנושא משתנים.

אבחון

  1. בהודעת השגיאה צריך לציין את שם המדיניות JSONThreatProtection ואת השם של משתנה Source. לדוגמה, בהודעת השגיאה הבאה, שם המדיניות הוא 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 אינו מסוג הודעות, מופיעה הודעת השגיאה:

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

רזולוציה

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

כדי לתקן את המדיניות, אפשר לשנות את הרכיב <Source> כך שיציין משתנה מסוג הודעה. לדוגמה, ב-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>