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

Przeglądasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X.
Informacje

ExecutionFailed

Kod błędu

steps.jsonthreatprotection.ExecutionFailed

Treść odpowiedzi o błędzie

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

Typy błędów i ich możliwe przyczyny

Zasada JSONThreatProtection może zgłaszać wiele różnych typów błędów ExecutionFailed. Tabela poniżej zawiera opis różnych typów błędów i ich możliwych przyczyn:

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

Przekroczono długość nazwy wpisu obiektu

Treść odpowiedzi o błędzie

{
    "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 dotyczącej błędu

{
    "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 o nazwie 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 zasadzie jako 5, ale wejściowy ładunek wiadomości zawiera właściwość JSON o długości przekraczającej 5 znaków, ten błąd zostanie zgłoszony.

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ę określoną w kroku 1 i zanotuj wartość określoną w elemencie <ObjectEntryNameLength>.

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

    Oto przykładowy ładunek wejściowy:

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

    Przedstawiony powyżej ładunek JSON ma w wierszu 2 właściwość o nazwie number, która ma 6 znaków (długość nazwy wynosi 6). Ponieważ długość nazwy obiektu przekracza 5 (wartość określona dla elementu <ObjectEntryNameLength>), 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 zasada JSONThreatProtection miała na celu ochronę ładunków z nazwami wpisów obiektów, które przekraczają zdefiniowaną wartość, komunikat o błędzie jest oczekiwany. W takim przypadku nie musisz nic robić.

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

Jeśli na przykład uważasz, że możesz zezwalać 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 o błędzie

{
    "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 dotyczącej błędu

{
    "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ściowy określony przez element <Source> zawiera obiekt JSON zawierający więcej wpisów (właściwości) niż wartość określona w elemencie <ObjectEntryCount> zasady.

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

Diagnostyka

  1. Sprawdź komunikat o błędzie, aby zidentyfikować nazwę zasady JSONThreatProtection i numer wiersza, w którym została przekroczona liczba 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> 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>6</ObjectEntryNameLength>
        <Source>request</Source>
        <StringValueLength>50</StringValueLength>
    </JSONThreatProtection>
    
  3. Sprawdź numer konkretnego wiersza (zidentyfikowany w kroku 1) ładunku wejściowego i sprawdź, czy liczba encji w ładunku jest większa niż wartość określona dla elementu <ObjectEntryCount> (określona w kroku 2). Jeśli liczba obiektów przekracza liczbę wpisów obiektów, to jest 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 szósty wpis występuje w wierszu nr 7 (firma). Ponieważ liczba wpisów obiektów w wejściowym ładunku JSON jest większa niż 5 (wartość określona dla elementu <ObjectEntryCount>), pojawia się 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 na celu ochronę ładunków z liczbą wpisów obiektów przekraczających określony próg, komunikat o błędzie jest oczekiwany. W takim przypadku nie musisz nic robić.

Jeśli jednak stwierdzisz, że ładunek może zawierać więcej wpisów obiektów bez żadnych konsekwencji, zmodyfikuj <ObjectEntryCount> do odpowiedniej wartości zgodnie ze swoimi wymaganiami.

Jeśli na przykład uważasz, że możesz zezwolić na maksymalnie 10 wpisów dotyczących obiektó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>10</ObjectEntryCount>
    <ObjectEntryNameLength>6</ObjectEntryNameLength>
    <Source>request</Source>
    <StringValueLength>50</StringValueLength>
</JSONThreatProtection>

Przekroczono liczbę elementów tablicy

Treść odpowiedzi o błędzie

{
    "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 dotyczącej błędu

{
    "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> zasady.

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

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ą w elemencie <ArrayElementCount> zasady (określoną w kroku 1).

    W tym przykładzie zasady JSONThreatProtection <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ź numer konkretnego wiersza (określony w kroku 1) ładunku wejściowego i sprawdź, czy podana w nim tablica ma wyższą liczbę niż liczba określona w elemencie <ArrayElementCount> (określona w kroku 2). Jeśli liczba elementów tablicy przekracza liczbę, to jest przyczyną błędu.

    Oto przykładowy ładunek wejściowy:

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

    Ładunek JSON przedstawiony powyżej ma 5 elementów w tablicy o nazwie models w wierszu 3. Ponieważ liczba elementów tablicy jest większa niż 3 (wartość określona dla elementu <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 zasada JSONThreatProtection miała na celu ochronę ładunków z określonym progiem liczby tablic, komunikat o błędzie jest oczekiwany. W takim przypadku nie musisz nic robić.

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

Jeśli na przykład uważasz, że możesz zezwolić na maksymalnie 5 elementów tablicy, 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>5</ArrayElementCount>
    <ContainerDepth>12</ContainerDepth>
    <ObjectEntryCount>5</ObjectEntryCount>
    <ObjectEntryNameLength>6</ObjectEntryNameLength>
    <Source>request</Source>
    <StringValueLength>50</StringValueLength>
</JSONThreatProtection>

Przekroczono głębokość kontenera

Treść odpowiedzi o błędzie

Ruch środowiska wykonawczego 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 dotyczącej błędu

{
    "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 komunikatu wejściowego określony przez element <Source> zawiera obiekt JSON zawierający elementy JSON o głębokości kontenera, która przekracza maksymalną głębokość kontenera określoną w elemencie <ContainerDepth> zasady. Głębokość kontenera to maksymalna dozwolona głębokość zagnieżdżenia elementów JSON. Na przykład tablica zawierająca obiekt zawierający obiekt ograniczyłaby głębokość izolacji do 3.

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

Diagnostyka

  1. Sprawdź komunikat o błędzie, aby zidentyfikować nazwę zasady JSONThreatProtection i numer wiersza, w którym przekroczona jest głębokość kontenera. Na przykład w poniższym 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> (określonej w kroku 1).

    W tym przykładzie zasady JSONThreatProtection <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ź numer konkretnego wiersza (określony w kroku 1) ładunku wejściowego i sprawdź, czy głębokość kontenera w ładunku jest większa niż wartość określona w elemencie <ContainerDepth> (określona w kroku 2). Jeśli głębokość kontenera przekracza ten limit, to właśnie jest przyczyną błędu.

    Oto przykładowy ładunek wejściowy:

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

    W widocznym powyżej ładunku JSON głębokość kontenera w wierszu 5 wynosi 6. Ponieważ głębokość jest większa niż 5, wartość określona dla elementu <ContainerDepth> zasady JSONThreatProtection powoduje następujący błąd:

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

Rozdzielczość

Jeśli zasada JSONThreatProtection miała na celu ochronę ładunków z głębokością kontenerów przekraczającą określoną wartość, komunikat o błędzie jest oczekiwany. W takim przypadku nie musisz nic robić.

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

Jeśli na przykład uważasz, że zezwalasz na głębokość kontenerów do 10 kontenerów, 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

Treść odpowiedzi o błędzie

{
    "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 dotyczącej błędu

{
    "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ściowy określony przez element <Source> zawiera elementy JSON z wartościami zawierającymi więcej znaków niż jest to dozwolone w elemencie <StringValueLength>.

Jeśli na przykład element <StringValueLength> ma w zasadzie wartość 50, ale ładunek wejściowy zawiera co najmniej 1 element, którego wartości zawierają ponad 50 znaków, ten błąd jest zgłaszany.

Diagnostyka

  1. Zapoznaj się z komunikatem o błędzie, aby zidentyfikować nazwę zasady i numer wiersza, w którym przekroczono długość ciągu znaków. W poniższym przykładzie nazwa zasady to JSON-Threat-Protection-1 andwiersz w ładunku 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> (określonego w kroku 1).

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

    Oto przykładowy ładunek wejściowy:

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

    Powyższa ładunek JSON zawiera obiekt o nazwie Place Name, którego wartość Taumatawhakatangihangakoauauotamateaturipukakapikimaungahoronukupokaiwhenuakitanatahu w wierszu 3 zawiera 85 znaków. Ponieważ długość wartości przekracza 50, wartość określona w elemencie <StringValueLength> pojawia się 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 zasada JSONThreatProtection miała na celu ochronę ładunków z wartościami przekraczającymi określoną długość ciągu znaków, komunikat o błędzie jest oczekiwany. W takim przypadku nie musisz nic robić.

Jeśli jednak stwierdzisz, że w ładunku można podać większą długość wartości, zmodyfikuj <StringValueLength> do odpowiedniej wartości na podstawie swoich wymagań.

Jeśli np. uważasz, że wartość nie może być większa niż 90 znaków, zmodyfikuj tę 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>5</ContainerDepth>
    <ObjectEntryCount>5</ObjectEntryCount>
    <ObjectEntryNameLength>20</ObjectEntryNameLength>
    <Source>request</Source>
    <StringValueLength>90</StringValueLength>
</JSONThreatProtection>

Nieprawidłowy obiekt JSON

Treść odpowiedzi o błędzie

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

Przykładowa treść odpowiedzi dotyczącej błędu

{
    "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 zasadzie JSONThreatProtection nie jest prawidłowym obiektem JSON.

Diagnostyka

  1. Zapoznaj się z komunikatem o błędzie, aby zidentyfikować nazwę zasady i numer wiersza, w którym wystąpił błąd. W poniższym przykładzie nazwa zasady to JSON-Threat-Protection-1 andwiersz w ładunku 2.

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason: Expecting : at line 3
    
  2. Sprawdź numer wiersza (zidentyfikowany w kroku 1) ładunku wejściowego i sprawdź, czy obiekt JSON przekazany w ładunku jest rzeczywiście poprawnym obiektem JSON.

    Oto przykładowy ładunek wejściowy:

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

    W przedstawionym powyżej ładunku JSON wiersz 3 nie zawiera dwukropka ":". Ponieważ nie jest to prawidłowy obiekt JSON, pojawi się 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 wejściowy ładunek JSON.

W przykładzie opisanym powyżej zmodyfikuj ładunek JSON w ten sposób:

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

SourceUnavailable

Kod błędu

steps.jsonthreatprotection.SourceUnavailable

Treść odpowiedzi o błędzie

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

Przykładowa treść odpowiedzi dotyczącej błędu

{
    "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 ma wartość:

  • Poza zakresem (niedostępne w konkretnym procesie, w którym jest wykonywana zasada)
  • Nie jest jedną z prawidłowych wartości request, response lub message

Ten błąd występuje np. wtedy, gdy element <Source> w zasadzie jest ustawiony na zmienną, która nie istnieje w procesie, w którym jest wykonywana.

Diagnostyka

  1. Wskaż nazwę zasady oraz 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 requests:

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

    W poniższym przykładzie zasady JSONThreatProtection element <Source> jest ustawiony na 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ż żądania nie są prawidłową wartością i nie występują w procesie, w którym jest wykonywana 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 jest ustawiona na request, response lub message i istnieje w procesie, w którym jest uruchamiana.

Aby poprawić przykładową zasadę JSONThreatProtection widoczną powyżej, możesz zmodyfikować element <Source> tak, aby używał zmiennej request, ponieważ występuje on 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 o błędzie

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

Przykładowa treść odpowiedzi dotyczącej błędu

{
    "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 zasadzie JSONThreatProtection jest ustawiony na zmienną, która nie jest typu message.

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

Diagnostyka

  1. Znajdź 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> zasady JSONThreatProtection (określony w kroku 1).

    W poniższym przykładzie zasady JSONThreatProtection <Source> ma wartość message.content, a nie 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 typem komunikatu, pojawia się błąd:

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

Rozdzielczość

Sprawdź, czy element <Source> w nieudanej zasadzie JSONThreatProtection jest ustawiony na zmienną przepływu typu message, która istnieje w procesie, w którym jest wykonywana zasada.

Aby poprawić zasadę, możesz zmodyfikować element <Source> tak, by zawierał zmienną typu komunikat. Na przykład w nieudanej próbie JSONThreatProtection można 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>