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 ich możliwe przyczyny

Zasada JSONThreatProtection może 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ą dozwoloną długość ciągu znaków w nazwie wpisu obiektu.
Przekroczono liczbę wpisów obiektów 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 Maksymalna dozwolona głębokość umieszczania została przekroczona.
Przekroczona długość wartości ciągu Przekroczona maksymalna dopuszczalna długość ciągu.
Nieprawidłowy obiekt JSON Dane wejściowe w formacie JSON są nieprawidłowe.

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 w zasadzie określony jako 5, ale wejściowy ładunek wiadomości zawiera właściwość JSON, której nazwa przekracza 5 znaków, jest zgłaszany 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 następującym komunikacie o błędzie nazwa zasady JSONThreatProtection to JSON-Threat-Protection-1, a numer wiersza w pliku danych 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ść określoną w elemencie <ObjectEntryNameLength>.

    Na przykład w tych zasadach JSONThreatProtection wartość <ObjectEntryNameLength> jest ustawiona 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>5</ObjectEntryNameLength>
        <Source>request</Source>
        <StringValueLength>50</StringValueLength>
    </JSONThreatProtection>
    
  3. Sprawdź konkretny numer wiersza (zidentyfikowany w kroku 1) w danych wejściowych i sprawdź, czy długość nazwy obiektu jest większa niż wartość określona w elemencie <ObjectEntryNameLength> (zidentyfikowanym w kroku 2). Jeśli długość nazwy obiektu przekracza tę liczbę, jest to przyczyną błędu.

    Oto przykładowy ładunek:

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

    Dane w formacie JSON pokazane powyżej zawierają w wierszu 2 właściwość o nazwie number, która ma 6 znaków (długość nazwy to 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 chronić przed ładunkami z nazwami wpisów obiektów, które przekraczają zdefiniowaną wartość, to komunikat o błędzie jest oczekiwany. W takim przypadku nie musisz nic robić.

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

Jeśli na przykład uważasz, że można 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 obiektu

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 wejściowy ładunek komunikatu 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, pojawia się ten błąd.

Diagnostyka

  1. Sprawdź komunikat o błędzie, aby znaleźć 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ść określoną w elemencie <ObjectEntryCount> zasady (zidentyfikowanym w kroku 1).

    W tym przykładzie zasad <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ź konkretny numer wiersza (zidentyfikowany w kroku 1) w danych wejściowych i sprawdź, czy liczba elementów w danych jest większa niż wartość określona dla elementu <ObjectEntryCount> (zidentyfikowanego w kroku 2). Jeśli liczba obiektów przekracza liczbę wpisów obiektów, jest to przyczyną błędu.

    Oto przykładowy ładunek:

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

    W pokazanym powyżej ładunku JSON 6. element znajduje się w wierszu 7 (firma). Ponieważ liczba wpisów obiektów w danych wejściowych 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 chronić przed ładunkami z większą liczbą wpisów obiektów niż 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 pliku danych można uwzględnić więcej wpisów obiektów bez żadnych konsekwencji, zmień wartość <ObjectEntryCount> na odpowiednią wartość zgodnie ze swoimi wymaganiami.

Jeśli na przykład uważasz, że możesz zezwolić na maksymalnie 10 wejść obiektu, zmień 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, gdy ładunek wiadomości wejściowej określony przez element <Source> zawiera tablicę JSON z większą liczbą elementów niż określona w elemencie <ArrayElementCount> w zasadach.

Jeśli na przykład element <ArrayElementCount> ma wartość 3, ale ładunek wejściowy zawiera tablicę JSON z większą liczbą niż 3 elementy, pojawia się ten błąd.

Diagnostyka

  1. W komunikacie o błędzie sprawdź nazwę zasady i numer wiersza, w którym długość tablicy została przekroczona. Na przykład w tym komunikacie o błędzie nazwa zasady to JSON-Threat-Protection-1, a numer wiersza w pliku danych 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ść elementu <ArrayElementCount> w zasadzie (zidentyfikowanego w kroku 1).

    W tym przykładzie zasad JSONThreatProtection wartość <ArrayElementCount> jest ustawiona na 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) z danymi wejściowymi i sprawdź, czy tablica określona w tym miejscu ma większą liczbę niż liczba określona w elemencie <ArrayElementCount> (określonym w kroku 2). Jeśli liczba elementów tablicy przekracza liczbę, to jest to przyczyna błędu.

    Oto przykładowy ładunek:

    {
     "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ść określona dla elementu <ArrayElementCount>), występuje 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 chronić przed ładunkami z określonym progiem liczby tablic, to komunikat o błędzie jest oczekiwany. W tym przypadku nie musisz nic robić.

Jeśli jednak uznasz, że w tablicy może być większa liczba elementów, zmień wartość parametru <ArrayElementCount> na odpowiednią wartość zgodnie ze swoimi wymaganiami.

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>

Przekroczona głębokość kontenera

Treść odpowiedzi na błąd

Ruch w czasie wykonywania 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, gdy ł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> w zasadach. Głębokość kontenera to maksymalna dozwolona głębokość zagnieżdżania elementów JSON. Na przykład tablica zawierająca obiekt, który zawiera obiekt, spowoduje, że głębokość zawierania wyniesie 3.

Jeśli na przykład element <ContainerDepth> ma wartość 3, ale głębokość kontenera w danych wejściowych przekracza ten limit, pojawia się 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 pliku danych 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 zasad JSONThreatProtection wartość <ContainerDepth> jest ustawiona 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>5</ContainerDepth>
        <ObjectEntryCount>5</ObjectEntryCount>
        <ObjectEntryNameLength>20</ObjectEntryNameLength>
        <Source>request</Source>
        <StringValueLength>50</StringValueLength>
    </JSONThreatProtection>
    
  3. Sprawdź konkretny numer wiersza (zidentyfikowany w kroku 1) ładunku wejściowego i sprawdź, czy głębokość kontenera w tym ładunku jest większa niż wartość określona w elemencie <ContainerDepth> (zidentyfikowanym w kroku 2). Jeśli głębokość kontenera przekracza liczbę, to jest to przyczyna błędu.

    Oto przykładowy ładunek:

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

    Ładunek JSON pokazany powyżej ma na linii 5 głębokość kontenera 6. Ponieważ głębokość jest większa niż 5, wartość określona dla elementu <ContainerDepth> zasady JSONThreatProtection powoduje wyświetlenie tego błędu:

    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 chronić przed ładunkami o głębokości kontenera przekraczającej określoną wartość, należy spodziewać się komunikatu o błędzie. W tym przypadku nie musisz nic robić.

Jeśli jednak uznasz, że akceptowalne są większe głębokości kontenera, zmień wartość parametru <ContainerDepth> na odpowiednią, biorąc pod uwagę swoje wymagania.

Jeśli np. uważasz, że możesz zezwolić na głębokość kontenera do 10, 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>3</ArrayElementCount>
    <ContainerDepth>10</ContainerDepth>
    <ObjectEntryCount>5</ObjectEntryCount>
    <ObjectEntryNameLength>20</ObjectEntryNameLength>
    <Source>request</Source>
    <StringValueLength>50</StringValueLength>
</JSONThreatProtection>

Przekroczono długość 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ż dozwolone przez element <StringValueLength>.

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

Diagnostyka

  1. W komunikacie o błędzie sprawdź nazwę zasady i numer wiersza, w którym długość ciągu została przekroczona. W tym przykładzie nazwa zasady to JSON-Threat-Protection-1 andline 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ść elementu <StringValueLength> (zidentyfikowanego w kroku 1).

    W tym przykładzie zasad JSONThreatProtection wartość <StringValueLength> jest ustawiona na 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 (zidentyfikowany w kroku 1) z danymi wejściowymi i sprawdź, czy długość wartości jest większa niż liczba znaków określona dla elementu <StringValueLength> (zidentyfikowanego w kroku 2). Jeśli długość wartości przekracza limit, to właśnie jest przyczyną błędu.

    Oto przykładowy ładunek:

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

    Pokazany powyżej ładunek JSON zawiera obiekt o nazwie Place Name, którego wartość Taumatawhakatangihangakoauauotamateaturipukakapikimaungahoronukupokaiwhenuakitanatahu ma 85 znaków w wierszu 3. Ponieważ długość wartości jest większa niż 50, czyli 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 chronić przed ładunkami o wartościach przekraczających określony ciąg znaków, to komunikat o błędzie jest oczekiwany. W takim przypadku nie musisz nic więcej robić.

Jeśli jednak uznasz, że w danych możesz podać dłuższą wartość, zmień parametr <StringValueLength> na odpowiednią wartość zgodnie z potrzebami.

Jeśli na przykład uważasz, że możesz używać wartości o długości do 90 znaków, 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>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, gdy ł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 znaleźć nazwę zasady i numer wiersza, w którym wystąpił błąd. W tym przykładzie nazwa zasady to JSON-Threat-Protection-1 and w pliku danych 2.

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

    Oto przykładowy ładunek:

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

    W pokazanym powyżej ładunku JSON wiersz 3 nie zawiera znaku ":" (dwukropka). Nie jest to prawidłowy obiekt JSON, więc pojawia się błąd:

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

Rozdzielczość

Upewnij się, że prawidłowy ładunek danych JSON jest przekazywany do każdego interfejsu API, który zawiera zasadę JSONThreatProtection.

W przykładzie powyżej 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> w zasadach JSONThreatProtection jest:

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

Ten błąd może wystąpić na przykład, gdy element <Source> w zasadzie ma wartość zmiennej, która nie istnieje w przepływie, w którym jest wykonywana zasada.

Diagnostyka

  1. W komunikacie o błędzie odszukaj nazwę zasady i nazwę zmiennej Source. Na przykład w tym komunikacie o błędzie nazwa zasady to JSON-Threat-Protection-1, a zmienne 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 reguły 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ż requests nie jest prawidłową wartością i nie występuje w przepływie, 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> w nieprawidłowej zasadzie JSONThreatProtection jest ustawiona na request, response lub message i istnieje w przepływie, w którym jest wykonywana zasada.

Aby poprawić przykładową zasadę JSONThreatProtection pokazaną 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 zasadzie JSONThreatProtection jest ustawiony na zmienną, która nie jest typu message.

Zmienne typu wiadomości reprezentują całe żądania i odpowiedzi HTTP. Wbudowane zmienne procesu Apigee Edge żądania, odpowiedzi i wiadomości mają typ „komunikat”. Więcej informacji o zmiennych wiadomości znajdziesz w artykule o zmiennych.

Diagnostyka

  1. Z komunikatu o błędzie ustal nazwę zasady JSONThreatProtection i nazwę zmiennej Source. Na przykład w tym komunikacie o błędzie nazwa zasady to JSON-Threat-Protection-1, a zmienne Source 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 zasad JSONThreatProtection wartość <Source> jest ustawiona na 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 typem komunikatu, pojawia się błąd:

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

Rozdzielczość

Upewnij się, że element <Source> w nieudanej regule JSONThreatProtection jest ustawiony jako zmienna przepływu typu message, która istnieje w przepływie, w którym działa zasada.

Aby poprawić zasady, możesz zmodyfikować element <Source>, aby określić zmienną typu message. Na przykład w przypadku nieudanej ochrony przed zagrożeniami w formacie JSON 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>