Fehlerbehebung bei der JSON-Bedrohungsschutz-Laufzeitfehler

Sie sehen die Dokumentation zu Apigee Edge.
Gehen Sie zur Apigee X-Dokumentation.
Weitere Informationen

ExecutionFailed

Fehlercode

steps.jsonthreatprotection.ExecutionFailed

Fehlerantworttext

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

Arten von Fehlern und mögliche Ursachen

Die JSONThreatProtection-Richtlinie kann viele verschiedene Arten von ExecutionFailed-Fehlern auslösen. In der folgenden Tabelle sind die verschiedenen Fehlertypen und ihre möglichen Ursachen aufgeführt:

Fehlertyp Ursache
Länge des Namens eines Objekteintrags überschritten Die maximal zulässige Stringlänge im Eintragsnamen eines Objekts wurde überschritten.
Anzahl der Objekteinträge überschritten Die maximal zulässige Anzahl an Einträgen in einem Objekt wurde überschritten.
Anzahl der Array-Elemente überschritten Die zulässige Höchstzahl von Elementen in einem Array wurde überschritten.
Containertiefe wurde überschritten Die maximal zulässige verschachtelte Tiefe wurde überschritten.
Stringlänge überschritten Die maximal zulässige Länge für einen Stringwert wurde überschritten.
Ungültiges JSON-Objekt Die eingegebene JSON-Nutzlast ist ungültig.

Länge des Namens eines Objekteintrags überschritten

Fehlerantworttext

{
    "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"
        }
    }
}

Beispieltext für eine Fehlermeldung

{
    "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"
        }
    }
}

Ursache

Dieser Fehler tritt auf, wenn die vom Element <Source> angegebene Nutzlastnachricht ein JSON-Objekt mit einem Attributnamen enthält, der die im Element <ObjectEntryNameLength> angegebene maximale Länge überschreitet.

Wenn beispielsweise in der Richtlinie das Element <ObjectEntryNameLength> als 5 angegeben ist, die Nutzlast der Eingabenachricht jedoch ein JSON-Attribut hat, dessen Name 5 Zeichen überschreitet, wird dieser Fehler ausgegeben.

Diagnose

  1. Untersuchen Sie die Fehlermeldung, um den JSONThreatProtection-Richtliniennamen und die Zeilennummer zu ermitteln, in der der Name des langen Eintrags angegeben ist. In der folgenden Fehlermeldung lautet der Name der JSONThreatProtection-Richtlinie beispielsweise JSON-Threat-Protection-1 und die Zeilennummer in der Nutzlast 2.

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded object entry name
    length at line 2
    
  2. Untersuchen Sie die in Schritt 1 ermittelte Richtlinie und notieren Sie den im Element <ObjectEntryNameLength> angegebenen Wert.

    Zum Beispiel ist in der folgenden JSONThreatProtection-Richtlinie <ObjectEntryNameLength> auf 5 gesetzt:

    <?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. Prüfen Sie die spezifische Zeilennummer (in Schritt 1) der Eingabenutzlast und prüfen Sie, ob die Objektname größer als der im <ObjectEntryNameLength> -Element (in Schritt 2 identifiziert). Wenn die Länge des Objektnamens diese Zahl überschreitet, ist dies die Ursache des Fehlers.

    Hier ist ein Beispiel für eine Eingabenutzlast:

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

    Die oben angezeigte JSON-Nutzlast hat ein Attribut namens number in Zeile 2 mit sechs Zeichen (die Namenslänge ist 6). Da die Länge des Objektnamens größer als 5 (der für das Element <ObjectEntryNameLength> angegebene Wert) ist, wird der folgende Fehler angezeigt:

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

Lösung

Wenn die JSONThreatProtection-Richtlinie vor Nutzlasten mit Objekteintragsnamen schützen soll, die den definierten Wert überschreiten, wird die Fehlermeldung erwartet. In diesem Fall sind keine weiteren Maßnahmen erforderlich.

Wenn Sie jedoch feststellen, dass in der Nutzlast längere Objekteintragsnamen angegeben werden, ändern Sie <ObjectEntryNameLength> entsprechend Ihren Anforderungen auf einen geeigneten Wert.

Wenn Sie beispielsweise Objektnamen mit einer Länge von bis zu 10 Zeichen zulassen, ändern Sie die JSONThreatProtection-Richtlinie so:

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

Anzahl der Objekteinträge überschritten

Fehlerantworttext

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

Beispieltext für eine Fehlermeldung

{
    "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"
        }
    }
}

Ursache

Dieser Fehler tritt auf, wenn die vom <Source> - Element angegebene Nutzlastnachricht ein JSON-Objekt enthält, das mehr Einträge (Properties) als den im Element <ObjectEntryCount> der Richtlinie angegebenen Wert enthält.

Wenn das <ObjectEntryCount>-Element beispielsweise 5 ist, die JSON-Nutzlast jedoch mehr als fünf Einträge enthält, wird dieser Fehler ausgegeben.

Diagnose

  1. Untersuchen Sie die Fehlermeldung, um den JSONThreatProtection-Richtliniennamen und die Zeilennummer zu ermitteln, in der die Eingabeanzahl überschritten wurde. In der folgenden Fehlermeldung lautet der Richtlinienname beispielsweise JSON-Threat-Protection-1 und die Zeilennummer in der Nutzlast 7:

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded object entry count
    at line 7
    
  2. Notieren Sie sich den im Element <ObjectEntryCount> der Richtlinie (in Schritt 1) identifizierten Wert.

    Im folgenden Richtlinienbeispiel ist <ObjectEntryCount> auf 5 festgelegt:

    <?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. Untersuchen Sie die in Schritt 1 ermittelte spezifische Zeilennummer der Nutzlast und prüfen Sie, ob die Anzahl der Entitäten in der Nutzlast größer ist als der Wert, der für das Element <ObjectEntryCount> (in Schritt 2 ermittelt) angegeben wurde. Wenn die Anzahl der Objekte die Anzahl der Objekteinträge überschreitet, ist dies die Fehlerursache.

    Hier ist ein Beispiel für eine Eingabenutzlast:

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

    In der oben gezeigten JSON-Nutzlast erfolgt der sechste Eintrag in Zeile 7 (Unternehmen). Da die Anzahl der Objekteinträge in der JSON-Nutzlast größer als 5 ist (der für das Element <ObjectEntryCount> angegebene Wert), erhalten Sie folgenden Fehler:

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

Lösung

Wenn die JSONThreatProtection-Richtlinie vor Nutzlasten mit einer Reihe von Objekteinträgen geschützt werden soll, die einen bestimmten Grenzwert überschreiten, ist die Fehlermeldung zu erwarten. In diesem Fall müssen Sie keine weiteren Maßnahmen ergreifen.

Wenn Sie jedoch feststellen, dass mehr Objekteinträge in die Nutzlast eingefügt werden können, ändern Sie <ObjectEntryCount> entsprechend Ihren Anforderungen in einen geeigneten Wert.

Wenn Sie beispielsweise bis zu zehn Objekteinträge zulassen, können Sie die JSONThreatProtection-Richtlinie so ändern:

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

Anzahl der Array-Elemente überschritten

Fehlerantworttext

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

Beispieltext für eine Fehlermeldung

{
    "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"
        }
    }
}

Ursache

Dieser Fehler tritt auf, wenn die im Element <Source> angegebene Nutzlast der Eingabenachricht ein JSON-Array mit einer Anzahl von Elementen enthält, als die im Element <ArrayElementCount> der Richtlinie angegebene Anzahl angegeben sind.

Wenn beispielsweise das Element <ArrayElementCount> als 3 angegeben wird, die Eingabenutzlast aber ein JSON-Array mit mehr als drei Elementen hat, wird dieser Fehler ausgegeben.

Diagnose

  1. Suchen Sie in der Fehlermeldung nach dem Richtliniennamen und der Zeilennummer, in der die Arraylänge überschritten wurde. In der folgenden Fehlermeldung lautet der Richtlinienname beispielsweise JSON-Threat-Protection-1 und die Zeilennummer in der Nutzlast 3:

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded array element count at line 3
    
  2. Notieren Sie sich den Wert, der für das Element <ArrayElementCount> der Richtlinie angegeben ist (siehe Schritt 1).

    Im folgenden Beispiel für die JSONThreatProtection-Richtlinie ist <ArrayElementCount> auf 3 festgelegt:

    <?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. Untersuchen Sie die spezifische Zeilennummer (in Schritt 1 identifiziert) der Eingabenutzlast und prüfen Sie, ob das dort angegebene Array eine höhere Anzahl aufweist als die im Element <ArrayElementCount> angegebene Zahl (in Schritt 2 identifiziert). Wenn die Anzahl der Array-Elemente die Anzahl überschreitet, ist dies die Fehlerursache.

    Hier ist ein Beispiel für eine Eingabenutzlast:

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

    Die oben gezeigte JSON-Nutzlast enthält fünf Elemente im Array models in Zeile 3. Da die Anzahl der Arrayelemente größer als 3 ist (der für das Element <ArrayElementCount> angegebene Wert), erhalten Sie den folgenden Fehler:

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

Lösung

Wenn die JSONThreatProtection-Richtlinie vor Nutzlasten mit einem bestimmten Schwellenwert für die Arrayanzahl geschützt ist, wird die Fehlermeldung erwartet. In diesem Fall sind keine weiteren Maßnahmen erforderlich.

Wenn Sie jedoch feststellen, dass eine größere Anzahl von Elementen in einem Array zulässig ist, ändern Sie <ArrayElementCount> entsprechend Ihren Anforderungen in einen geeigneten Wert.

Wenn Sie beispielsweise bis zu fünf Array-Elemente zulassen, können Sie die Richtlinie so ändern:

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

Containertiefe wurde überschritten

Fehlerantworttext

Laufzeittraffic gibt einen 500-Antwortcode mit dem folgenden Fehler zurück:

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

Beispiel für einen Fehlerantworttext

{
    "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"
        }
    }
}

Ursache

Dieser Fehler tritt auf, wenn die Nutzlast der Eingabenachricht, die durch das Element <Source> angegeben wird, ein JSON-Objekt enthält, das JSON-Elemente mit einer Containertiefe enthält, die die maximale Containertiefe überschreitet, die im Element <ContainerDepth> der Richtlinie angegeben ist. Die Containertiefe ist die maximal zulässige verschachtelte Tiefe für JSON-Elemente. Zum Beispiel würde ein Array mit einem Objekt, das ein Objekt enthält, eine Tiefetiefe von 3 enthalten.

Wenn das <ContainerDepth>-Element beispielsweise 3 ist, die Eingabenutzlast jedoch eine Containertiefe überschreitet, die diesen Grenzwert überschreitet, wird dieser Fehler ausgegeben.

Diagnose

  1. Untersuchen Sie die Fehlermeldung, um den Namen der JSONThreatProtection-Richtlinie und die Zeilennummer zu ermitteln, in der die Containertiefe überschritten wurde. In der folgenden Fehlermeldung lautet der Richtlinienname beispielsweise JSON-Threat-Protection-1 und die Zeilennummer in der Nutzlast 5.

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded container depth at
    line 5
    
  2. Notieren Sie sich den für das Element <ContainerDepth> angegebenen Wert (identifiziert in Schritt 1).

    Im folgenden Beispiel für die JSONThreatProtection-Richtlinie ist <ContainerDepth> auf 5 festgelegt:

    <?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. Untersuchen Sie die spezifische Zeilennummer (in Schritt 1 identifiziert) der Eingabenutzlast und prüfen Sie, ob die Containertiefe in der Nutzlast höher ist als der im Element <ContainerDepth> angegebene Wert (in Schritt 2 identifiziert). Wenn die Containertiefe die Anzahl überschreitet, ist dies die Fehlerursache.

    Hier ist ein Beispiel für eine Eingabenutzlast:

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

    Die oben gezeigte JSON-Nutzlast hat in Zeile 5 eine Containertiefe von 6. Da die Tiefe größer als 5 ist, wird für den Wert <ContainerDepth> der JSONThreatProtection-Richtlinie der folgende Fehler ausgegeben:

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

Lösung

Wenn die JSONThreatProtection-Richtlinie vor Nutzlasten mit Containertiefen geschützt wurde, die den angegebenen Wert überschreiten, wird die Fehlermeldung erwartet. In diesem Fall sind keine weiteren Maßnahmen erforderlich.

Wenn Sie jedoch feststellen, dass eine höhere Containertiefe akzeptabel ist, ändern Sie <ContainerDepth> entsprechend den Anforderungen.

Wenn Sie beispielsweise der Meinung sind, dass eine Containertiefe bis zu 10 möglich sind, ändern Sie die Richtlinie so:

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

Stringlänge überschritten

Fehlerantworttext

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

Beispieltext für eine Fehlermeldung

{
    "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"
        }
    }
}

Ursache

Dieser Fehler tritt auf, wenn die Nutzlast der Eingabenachricht, die durch das <Source>-Element angegeben wird, JSON-Elemente mit mehr Zeichen als die im Element <StringValueLength> zulässigen Elemente enthält.

Wenn beispielsweise das Element <StringValueLength> in der Richtlinie auf 50 gesetzt wird, die Eingabenutzlast jedoch mindestens ein Element enthält, dessen Werte mehr als 50 Zeichen enthalten, wird dieser Fehler ausgegeben.

Diagnose

  1. Suchen Sie in der Fehlermeldung nach dem Richtliniennamen und der Zeilennummer, in der die Stringlänge überschritten wurde. Im folgenden Beispiel lautet der Richtlinienname JSON-Threat-Protection-1 and Zeile in der Nutzlast 3.

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded string value length at line 3
    
  2. Notieren Sie sich den für das <StringValueLength>-Element angegebenen Wert in "(Schritt 1)".

    Im folgenden Beispiel für die JSONThreatProtection-Richtlinie ist <StringValueLength> auf 50 festgelegt:

    <?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. Untersuchen Sie die in Schritt 1 ermittelte spezifische Zeilennummer der Eingabenutzlast und prüfen Sie, ob die Länge des Werts größer ist als die Anzahl der Zeichen, die für das Element <StringValueLength> (in Schritt 2 ermittelt) angegeben wurden. Wenn die Länge des Werts das Limit überschreitet, ist dies die Ursache des Fehlers.

    Hier ist ein Beispiel für eine Eingabenutzlast:

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

    Die oben angezeigte JSON-Nutzlast enthält ein Objekt namens Place Name, dessen Wert Taumatawhakatangihangakoauauotamateaturipukakapikimaungahoronukupokaiwhenuakitanatahu 85 Zeichen in Zeile 3 hat. Da die Länge des Werts größer als 50 ist, wird der im Element <StringValueLength> angegebene Wert ausgegeben:

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

Lösung

Wenn die JSONThreatProtection-Richtlinie vor Nutzlasten mit Werten geschützt werden soll, die eine bestimmte Stringlänge überschreiten, ist die Fehlermeldung zu erwarten. In diesem Fall sind keine weiteren Maßnahmen erforderlich.

Wenn Sie jedoch feststellen, dass eine längere Wertlänge in der Nutzlast angegeben werden kann, müssen Sie das <StringValueLength> Ihren Anforderungen entsprechend anpassen.

Wenn Sie beispielsweise den Wert bis zu einer Länge von 90 zulassen möchten, ändern Sie die Richtlinie so:

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

Kein gültiges JSON-Objekt

Fehlerantworttext

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

Beispieltext für eine Fehlermeldung

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

Ursache

Dieser Fehler tritt auf, wenn die Nutzlast der Eingabenachricht, die vom <Source>-Element in der JSONThreatProtection-Richtlinie angegeben wurde, kein gültiges JSON-Objekt ist.

Diagnose

  1. Prüfen Sie die Fehlermeldung, um den Richtliniennamen und die Zeilennummer zu ermitteln, in der der Fehler aufgetreten ist. Im folgenden Beispiel lautet der Richtlinienname JSON-Threat-Protection-1 and Zeile in der Nutzlast 2.

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason: Expecting : at line 3
    
  2. Untersuchen Sie die in Schritt 1 identifizierte Zeilennummer der Eingabenutzlast und prüfen Sie, ob das in der Nutzlast übergebene JSON-Objekt tatsächlich ein gültiges JSON-Objekt ist.

    Hier ist ein Beispiel für eine Eingabenutzlast:

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

    In der oben gezeigten JSON-Nutzlast enthält die Zeile 3 keinen ":" (Doppelpunkt). Da es sich nicht um ein gültiges JSON-Objekt handelt, erhalten Sie folgende Fehlermeldung:

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

Lösung

Prüfen Sie, ob eine gültige Eingabe im JSON-Nutzlast an einen API-Proxy übergeben wird, der die JSONThreatProtection-Richtlinie enthält.

Ändern Sie für das obige Beispiel die JSON-Nutzlast so:

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

SourceUnavailable

Fehlercode

steps.jsonthreatprotection.SourceUnavailable

Fehlerantworttext

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

Beispieltext für eine Fehlermeldung

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

Ursache

Dieser Fehler tritt auf, wenn die Variable message, die im <Source>-Element der JSONThreatProtection-Richtlinie angegeben ist, entweder:

  • Außerhalb des Zuständigkeitsbereichs (nicht in dem spezifischen Ablauf verfügbar, in dem die Richtlinie ausgeführt wird)
  • Ist keiner der gültigen Werte request, response oder message.

Dieser Fehler tritt beispielsweise auf, wenn für das Element <Source> in der Richtlinie eine Variable festgelegt ist, die in dem Ablauf, in dem die Richtlinie ausgeführt wird, nicht vorhanden ist.

Diagnose

  1. Geben Sie den Richtliniennamen und den Namen der Quellvariable aus der Fehlermeldung an. In der folgenden Fehlermeldung lautet der Richtlinienname beispielsweise JSON-Threat-Protection-1 und die Quellvariable requests:

    JSONThreatProtection[JSON-Threat-Protection-1]:: Source requests is not available
    
  2. Prüfe den Wert, der für das in Schritt 1 angegebene Element <Source> angegeben ist.

    Im folgenden JSONThreatProtection-Richtlinienbeispiel ist für das Element <Source> der Wert requests festgelegt.

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

    Gültige Werte für das Element <Source> sind request, response oder message. Da Anfragen kein gültiger Wert sind und nicht in dem Ablauf vorhanden sind, in dem die Richtlinie ausgeführt wird, erhalten Sie folgende Fehlermeldung:

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

Lösung

Achten Sie darauf, dass die Variable im <Source>-Element der fehlgeschlagenen JSONThreatProtection-Richtlinie entweder auf request, response oder message und in dem Ablauf festgelegt ist, in dem die Richtlinie ausgeführt wird.

Um die oben gezeigte JSONThreatProtection-Beispielrichtlinie zu korrigieren, können Sie das Element <Source> so ändern, dass die Variable request verwendet wird, da sie im Anfrageablauf vorhanden ist:

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

Fehlercode

steps.jsonthreatprotection.NonMessageVariable

Fehlerantworttext

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

Beispieltext für eine Fehlermeldung

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

Ursache

Dieser Fehler tritt auf, wenn für das Element <Source> in der JSONThreatProtection-Richtlinie eine Variable festgelegt ist, die nicht vom Typ message ist.

Nachrichtentypvariablen stellen ganze HTTP-Anfragen und -Antworten dar. Die integrierte Die Anfrage, Antwort und Nachricht der Apigee Edge-Flussvariablen hat den Typ Nachricht. Weitere Informationen zu Nachrichtenvariablen finden Sie in der Variablenreferenz.

Diagnose

  1. Ermitteln Sie den Namen der JSONThreatProtection-Richtlinien und den Namen der Quellvariablen aus der Fehlermeldung. In der folgenden Fehlermeldung lautet der Richtlinienname beispielsweise JSON-Threat-Protection-1 und die Quellvariable message.content:

    JSONThreatProtection[JSON-Threat-Protection-1]: Variable message.content does not resolve to a Message
    
  2. Untersuchen Sie das Element <Source> der JSONThreatProtection-Richtlinie (in Schritt 1 erkannt).

    Im folgenden Beispiel für die JSONThreatProtection-Richtlinie ist <Source> auf message.content statt auf message festgelegt:

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

    Da message.content keine Typnachricht ist, wird der folgende Fehler angezeigt:

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

Lösung

Sorgen Sie dafür, dass das <Source>-Element in der fehlgeschlagenen JSONThreatProtection-Richtlinie auf eine Ablaufvariable für die Nachricht festgelegt ist, die in dem Ablauf vorhanden ist, in dem die Richtlinie ausgeführt wird.

Um die Richtlinie zu korrigieren, können Sie das Element <Source> so ändern, dass eine Variable vom Typ "Message" angegeben wird. Im fehlgeschlagenen JSONThreatProtection-Objekt können Sie beispielsweise das Element <Source> als message angeben:

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