Rozwiązywanie problemów związanych z błędami w środowisku wykonawczym ochrony przed zagrożeniami JSON

Wyświetlasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X.
info

ExecutionFailed

Kod błędu

steps.jsonthreatprotection.ExecutionFailed

Treść odpowiedzi na błąd

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

Rodzaje błędów i możliwe przyczyny

Zasady JSONThreatProtection mogą zgłaszać wiele różnych typów błędów ExecutionFailed. W tabeli poniżej znajdziesz różne typy błędów i ich możliwe przyczyny:

Typ błędu Przyczyna
Przekroczono długość nazwy wpisu obiektu Przekroczono maksymalną długość ciągu znaków dozwoloną w nazwie wpisu obiektu.
Przekroczono liczbę wpisów obiektu Przekroczono maksymalną liczbę wpisów dozwolonych w obiekcie.
Przekroczono liczbę elementów tablicy Przekroczono maksymalną liczbę elementów dozwolonych w tablicy.
Przekroczono głębokość kontenera Przekroczono maksymalną dozwoloną głębokość zagnieżdżenia.
Przekroczono długość wartości ciągu znaków Przekroczono maksymalną dozwoloną długość wartości ciągu znaków.
Nieprawidłowy obiekt JSON Wejściowy ładunek JSON jest nieprawidłowy.

Przekroczono długość nazwy wpisu obiektu

Treść odpowiedzi na błąd

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

Przykładowa treść odpowiedzi na błąd

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

Przyczyna

Ten błąd występuje, jeśli ładunek wiadomości wejściowej określony przez element <Source> zawiera obiekt JSON z nazwą właściwości, która przekracza maksymalną długość określoną w elemencie <ObjectEntryNameLength>.

Jeśli na przykład element <ObjectEntryNameLength> jest określony w zasadach jako 5, ale ładunek wiadomości wejściowej zawiera właściwość JSON, której nazwa ma więcej niż 5 znaków, wystąpi ten błąd.

Diagnostyka

  1. Sprawdź komunikat o błędzie, aby zidentyfikować nazwę zasady JSONThreatProtection i numer wiersza, w którym występuje długa nazwa wpisu. Na przykład w tym komunikacie o błędzie nazwa zasady JSONThreatProtection to JSON-Threat-Protection-1, a numer wiersza w ładunku to 2.

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded object entry name
    length at line 2
    
  2. Sprawdź zasadę zidentyfikowaną w kroku 1 i zanotuj wartość podaną w elemencie <ObjectEntryNameLength>.

    Na przykład w tych zasadach JSONThreatProtection parametr <ObjectEntryNameLength> ma wartość 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. Sprawdź konkretny numer wiersza (określony w kroku 1) w ładunku wejściowym i zobacz, czy długość nazwy obiektu jest większa niż wartość określona w elemencie <ObjectEntryNameLength> (określonym w kroku 2). Jeśli długość nazwy obiektu przekracza tę liczbę, to jest to przyczyną błędu.

    Oto przykładowy ładunek wejściowy:

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

    W wyświetlonych powyżej danych JSON w wierszu 2 znajduje się właściwość o nazwie number, która ma 6 znaków (długość nazwy wynosi 6). Długość nazwy obiektu jest większa niż 5 (wartość określona dla elementu <ObjectEntryNameLength>), dlatego pojawia się ten błąd:

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

Rozdzielczość

Jeśli zasady JSONThreatProtection miały chronić przed ładunkami z nazwami wpisów obiektów, które przekraczają zdefiniowaną wartość, komunikat o błędzie jest oczekiwany. W takim przypadku nie musisz nic więcej robić.

Jeśli jednak stwierdzisz, że w ładunku można podać dłuższe nazwy wpisów obiektów bez żadnych konsekwencji, zmień wartość <ObjectEntryNameLength> na odpowiednią na podstawie swoich wymagań.

Jeśli na przykład uważasz, że możesz zezwolić na nazwy obiektów o długości do 10 znaków, zmodyfikuj zasadę JSONThreatProtection w ten sposób:

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

Przekroczono liczbę wpisów obiektów

Treść odpowiedzi na błąd

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

Przykładowa treść odpowiedzi na błąd

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

Przyczyna

Ten błąd występuje, jeśli ładunek wiadomości wejściowej określony przez element <Source> zawiera obiekt JSON, który zawiera więcej wpisów (właściwości) niż wartość określona w elemencie <ObjectEntryCount> zasad.

Jeśli na przykład element <ObjectEntryCount> ma wartość 5, ale wejściowy ładunek JSON zawiera więcej niż 5 wpisów, wystąpi ten błąd.

Diagnostyka

  1. Sprawdź komunikat o błędzie, aby zidentyfikować nazwę zasady JSONThreatProtection i numer wiersza, w którym przekroczono liczbę wpisów. Na przykład w tym komunikacie o błędzie nazwa zasady to JSON-Threat-Protection-1, a numer wiersza w ładunku to 7:

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded object entry count
    at line 7
    
  2. Zanotuj wartość podaną w elemencie <ObjectEntryCount> zasady (określonej w kroku 1).

    W tym przykładzie zasady <ObjectEntryCount> są ustawione na 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. Sprawdź konkretny numer wiersza (określony w kroku 1) w ładunku wejściowym i sprawdź, czy liczba jednostek w ładunku jest większa niż wartość określona dla elementu <ObjectEntryCount> (określonego w kroku 2). Jeśli liczba obiektów przekracza liczbę wpisów obiektów, to jest to przyczyną błędu.

    Oto przykładowy ładunek wejściowy:

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

    W pokazanym powyżej ładunku JSON 6 wpis znajduje się w wierszu 7 (company). Ponieważ liczba wpisów w obiekcie w wejściowym ładunku JSON jest większa niż 5 (wartość podana dla elementu <ObjectEntryCount>), otrzymasz ten błąd:

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

Rozdzielczość

Jeśli zasada JSONThreatProtection miała chronić przed ładunkami z liczbą wpisów w obiekcie przekraczającą określony próg, komunikat o błędzie jest oczekiwany. W takim przypadku nie musisz podejmować żadnych dodatkowych działań.

Jeśli jednak stwierdzisz, że w ładunku można umieścić więcej wpisów obiektów bez żadnych konsekwencji, zmień wartość <ObjectEntryCount> na odpowiednią wartość na podstawie swoich wymagań.

Jeśli na przykład uważasz, że możesz zezwolić na maksymalnie 10 wpisów obiektów, zmodyfikuj zasady JSONThreatProtection w ten sposób:

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

Przekroczono liczbę elementów tablicy

Treść odpowiedzi na błąd

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

Przykładowa treść odpowiedzi na błąd

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

Przyczyna

Ten błąd występuje, jeśli ładunek wiadomości wejściowej określony przez element <Source> zawiera tablicę JSON z liczbą elementów większą niż liczba określona w elemencie <ArrayElementCount> zasad.

Jeśli na przykład element <ArrayElementCount> jest określony jako 3, ale ładunek wejściowy zawiera tablicę JSON z więcej niż 3 elementami, wystąpi ten błąd.

Diagnostyka

  1. Sprawdź komunikat o błędzie, aby zidentyfikować nazwę zasady i numer wiersza, w którym przekroczono długość tablicy. Na przykład w tym komunikacie o błędzie nazwa zasady to JSON-Threat-Protection-1, a numer wiersza w ładunku to 3:

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded array element count at line 3
    
  2. Zanotuj wartość określoną dla elementu <ArrayElementCount> zasady (zidentyfikowanego w kroku 1).

    W tym przykładzie zasady JSONThreatProtection parametr <ArrayElementCount> ma wartość 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. Sprawdź konkretny numer wiersza (określony w kroku 1) w ładunku wejściowym i zobacz, czy tablica w nim określona ma większą liczbę elementów niż liczba podana w elemencie <ArrayElementCount> (określonym w kroku 2). Jeśli liczba elementów tablicy przekracza liczbę, jest to przyczyną błędu.

    Oto przykładowy ładunek wejściowy:

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

    Ładunek JSON pokazany powyżej zawiera 5 elementów w tablicy o nazwie models w wierszu 3. Ponieważ liczba elementów tablicy jest większa niż 3 (wartość podana w elemencie <ArrayElementCount>), pojawia się ten błąd:

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

Rozdzielczość

Jeśli zasady JSONThreatProtection miały chronić przed ładunkami o określonym progu liczby tablic, komunikat o błędzie jest oczekiwany. W takim przypadku nie musisz nic więcej robić.

Jeśli jednak stwierdzisz, że można zezwolić na większą liczbę elementów w tablicy, zmień wartość <ArrayElementCount> na odpowiednią wartość zgodnie z Twoimi wymaganiami.

Jeśli na przykład uważasz, że możesz zezwolić na maksymalnie 5 elementów tablicy, zmodyfikuj zasadę w ten sposób:

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

Przekroczono głębokość kontenera

Treść odpowiedzi na błąd

Ruch w czasie działania zwraca kod odpowiedzi 500 z tym błędem:

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

Przykładowa treść odpowiedzi na błąd

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

Przyczyna

Ten błąd występuje, jeśli ładunek wiadomości wejściowej określony przez element <Source> zawiera obiekt JSON, który zawiera elementy JSON o głębokości kontenera przekraczającej maksymalną głębokość kontenera określoną w elemencie <ContainerDepth> zasad. Głębokość kontenera to maksymalna dozwolona głębokość zagnieżdżenia elementów JSON. Na przykład tablica zawierająca obiekt, który zawiera obiekt, będzie miała głębokość zawierania równą 3.

Jeśli na przykład element <ContainerDepth> ma wartość 3, ale głębokość kontenera w ładunku wejściowym przekracza ten limit, zostanie zgłoszony ten błąd.

Diagnostyka

  1. Sprawdź komunikat o błędzie, aby znaleźć nazwę zasady JSONThreatProtection i numer wiersza, w którym przekroczono głębokość kontenera. Na przykład w tym komunikacie o błędzie nazwa zasady to JSON-Threat-Protection-1, a numer wiersza w ładunku to 5.

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded container depth at
    line 5
    
  2. Zanotuj wartość określoną dla elementu <ContainerDepth> (zidentyfikowanego w kroku 1).

    W tym przykładzie zasady JSONThreatProtection parametr <ContainerDepth> ma wartość 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. Sprawdź konkretny numer wiersza (określony w kroku 1) w ładunku wejściowym i zobacz, czy głębokość kontenera w ładunku jest większa niż wartość określona w elemencie <ContainerDepth> (określonym w kroku 2). Jeśli głębokość kontenera przekracza liczbę, to jest to przyczyną błędu.

    Oto przykładowy ładunek wejściowy:

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

    W pokazanym powyżej ładunku JSON na linii 5 głębokość kontenera wynosi 6. Ponieważ wartość depth jest większa niż 5, w przypadku elementu <ContainerDepth> zasady JSONThreatProtection otrzymasz ten błąd:

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

Rozdzielczość

Jeśli zasady JSONThreatProtection miały chronić przed ładunkami o głębokości kontenera przekraczającej określoną wartość, komunikat o błędzie jest oczekiwany. W takim przypadku nie musisz nic więcej robić.

Jeśli jednak uznasz, że większa głębokość kontenera jest dopuszczalna, zmień wartość <ContainerDepth> na odpowiednią na podstawie swoich wymagań.

Jeśli na przykład uważasz, że możesz zezwolić na głębokość kontenera do 10, zmień zasadę w ten sposób:

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

Przekroczono długość wartości ciągu znaków

Treść odpowiedzi na błąd

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

Przykładowa treść odpowiedzi na błąd

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

Przyczyna

Ten błąd występuje, jeśli ładunek wiadomości wejściowej określony przez element <Source> zawiera elementy JSON, których wartości mają więcej znaków niż dozwolona liczba określona przez element <StringValueLength>.

Jeśli na przykład element <StringValueLength> jest ustawiony w zasadach na 50, ale ładunek wejściowy zawiera co najmniej 1 element, którego wartości mają więcej niż 50 znaków, wystąpi ten błąd.

Diagnostyka

  1. Sprawdź komunikat o błędzie, aby zidentyfikować nazwę zasady i numer wiersza, w którym przekroczono długość ciągu znaków. W tym przykładzie nazwa zasady to 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. Zanotuj wartość określoną dla elementu <StringValueLength> w pliku (zidentyfikowanym w kroku 1).

    W tym przykładzie zasady JSONThreatProtection parametr <StringValueLength> ma wartość 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. Sprawdź konkretny numer wiersza (określony w kroku 1) w ładunku wejściowym i zobacz, czy długość wartości jest większa niż liczba znaków określona dla elementu <StringValueLength> (określonego w kroku 2). Jeśli długość wartości przekracza limit, to jest to przyczyną błędu.

    Oto przykładowy ładunek wejściowy:

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

    Dane JSON pokazane powyżej zawierają obiekt o nazwie Place Name, którego wartość Taumatawhakatangihangakoauauotamateaturipukakapikimaungahoronukupokaiwhenuakitanatahu ma 85 znaków w wierszu 3. Długość wartości jest większa niż 50, czyli wartość podana w elemencie <StringValueLength>. W związku z tym otrzymasz ten błąd:

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

Rozdzielczość

Jeśli zasady JSONThreatProtection miały chronić przed ładunkami o wartościach przekraczających określoną długość ciągu znaków, komunikat o błędzie jest oczekiwany. W takim przypadku nie musisz nic więcej robić.

Jeśli jednak stwierdzisz, że w ładunku można podać dłuższą wartość, zmień <StringValueLength> na odpowiednią wartość zgodnie z wymaganiami.

Jeśli na przykład uważasz, że możesz zezwolić na wartość o długości do 90 znaków, zmień zasady w ten sposób:

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

Nieprawidłowy obiekt JSON

Treść odpowiedzi na błąd

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

Przykładowa treść odpowiedzi na błąd

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

Przyczyna

Ten błąd występuje, jeśli ładunek wiadomości wejściowej określony przez element <Source> w zasadach JSONThreatProtection nie jest prawidłowym obiektem JSON.

Diagnostyka

  1. Sprawdź komunikat o błędzie, aby zidentyfikować nazwę zasady i numer wiersza, w którym wystąpił błąd. W tym przykładzie nazwa zasady to JSON-Threat-Protection-1 andline in the payload 2.

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason: Expecting : at line 3
    
  2. Sprawdź konkretny numer wiersza (określony w kroku 1) ładunku wejściowego i upewnij się, że obiekt JSON przekazany w ładunku jest prawidłowym obiektem JSON.

    Oto przykładowy ładunek wejściowy:

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

    W pokazanym powyżej ładunku JSON w wierszu 3 nie ma znaku ":" (dwukropka). Ponieważ nie jest to prawidłowy obiekt JSON, otrzymasz błąd:

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

Rozdzielczość

Sprawdź, czy do każdego serwera proxy interfejsu API, który zawiera zasadę JSONThreatProtection, przekazywany jest prawidłowy ładunek JSON.

W przypadku opisanego powyżej przykładu zmodyfikuj ładunek JSON w ten sposób:

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

SourceUnavailable

Kod błędu

steps.jsonthreatprotection.SourceUnavailable

Treść odpowiedzi na błąd

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

Przykładowa treść odpowiedzi na błąd

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

Przyczyna

Ten błąd występuje, jeśli zmienna message określona w elemencie <Source> zasady JSONThreatProtection:

  • Poza zakresem (niedostępne w określonym procesie, w którym są wykonywane zasady)
  • nie jest jedną z prawidłowych wartości request, response ani message;

Ten błąd występuje na przykład, jeśli element <Source> w zasadzie jest ustawiony na zmienną, która nie istnieje w przepływie, w którym zasada jest wykonywana.

Diagnostyka

  1. Zidentyfikuj nazwę zasady i nazwę zmiennej źródłowej z komunikatu o błędzie. Na przykład w tym komunikacie o błędzie nazwa zasady to JSON-Threat-Protection-1, a zmienna Source to requests:

    JSONThreatProtection[JSON-Threat-Protection-1]:: Source requests is not available
    
  2. Sprawdź wartość określoną dla elementu <Source> zidentyfikowanego w kroku 1.

    W tym przykładzie zasad JSONThreatProtection element <Source> ma wartość 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>
    

    Prawidłowe wartości elementu <Source> to request, response lub message. Ponieważ wartość „requests” jest nieprawidłowa i nie występuje w procesie, w którym wykonywana jest zasada, pojawia się błąd:

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

Rozdzielczość

Sprawdź, czy zmienna ustawiona w elemencie <Source> nieudanej zasady JSONThreatProtection ma wartość request, response lub message i czy występuje w przepływie, w którym jest wykonywana zasada.

Aby poprawić przykładowe zasady JSONThreatProtection pokazane powyżej, możesz zmodyfikować element <Source>, aby używał zmiennej request, ponieważ występuje ona w przepływie żądania:

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

Kod błędu

steps.jsonthreatprotection.NonMessageVariable

Treść odpowiedzi na błąd

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

Przykładowa treść odpowiedzi na błąd

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

Przyczyna

Ten błąd występuje, jeśli element <Source> w zasadach JSONThreatProtection jest ustawiony na zmienną, która nie jest typu message.

Zmienne typu wiadomości reprezentują całe żądania i odpowiedzi HTTP. Wbudowane zmienne przepływu Apigee Edge request, response i message są typu message. Więcej informacji o zmiennych w wiadomościach znajdziesz w dokumentacji zmiennych.

Diagnostyka

  1. Zidentyfikuj nazwę zasady JSONThreatProtection i nazwę zmiennej źródłowej z komunikatu o błędzie. Na przykład w tym komunikacie o błędzie nazwa zasady to JSON-Threat-Protection-1, a zmienna źródłowa to message.content:

    JSONThreatProtection[JSON-Threat-Protection-1]: Variable message.content does not resolve to a Message
    
  2. Sprawdź element <Source> w zasadach JSONThreatProtection (zidentyfikowanych w kroku 1).

    W tym przykładzie zasady JSONThreatProtection parametr <Source> ma wartość message.content zamiast 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>
    

    Ponieważ message.content nie jest typu message, pojawia się błąd:

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

Rozdzielczość

Sprawdź, czy element <Source> w zasadach JSONThreatProtection, które nie zostały zastosowane, jest ustawiony na zmienną przepływu typu message, która występuje w przepływie, w którym są wykonywane zasady.

Aby poprawić zasadę, możesz zmodyfikować element <Source>, aby określić zmienną typu message. Na przykład w przypadku nieudanej ochrony JSONThreatProtection możesz określić element <Source> jako 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>