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

Przeglądasz dokumentację Apigee Edge.
Przejdź do Dokumentacja Apigee X.
informacje.

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 Przekroczona została maksymalna dozwolona długość ciągu w nazwie wpisu obiektu.
Przekroczono liczbę wpisów obiektu Przekroczono maksymalną dozwoloną liczbę wpisów w obiekcie.
Przekroczona liczba elementów tablicy Przekroczono maksymalną dozwoloną liczbę elementów w tablicy.
Przekroczona głębokość kontenera Przekroczono maksymalną dozwoloną głębokość zagnieżdżenia.
Przekroczona długość wartości ciągu Przekroczono maksymalną dozwoloną długość wartości ciągu.
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 wejściowy ładunek komunikatu 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 nazwa długiego wpisu. Na przykład w tym 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ź zasady zidentyfikowane w kroku 1 i zapisz 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ź 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 nazwa obiektu przekracza tę liczbę, to właśnie jest przyczyną błędu.

    Oto przykładowy ładunek wejściowy:

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

    Powyższy ładunek JSON ma właściwość o nazwie number w wierszu 2, która składa się z 6 znaków (długość nazwy wynosi 6). Długość nazwy obiektu przekracza 5 (wartość określona dla elementu <ObjectEntryNameLength>), więc 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ę przed ładunkami z nazwami wpisów obiektów przekraczającymi zdefiniowaną wartość, powinien pojawić się komunikat o błędzie. W takim przypadku nie musisz nic więcej 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 dozwolone są nazwy obiektów o długości do 10 znaków, zmień 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 ich więcej, zgłaszany jest 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 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ź konkretny numer wiersza (określony w kroku 1) ładunku wejściowego i sprawdź, czy liczba elementów w ładunku nie 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, 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 przedstawionym powyżej ładunku JSON szósty wpis występuje w wierszu 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ę następujący 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 robić nic więcej.

Jeśli jednak stwierdzisz, że ładunek może zawierać więcej wpisów obiektów bez żadnych konsekwencji, zmień <ObjectEntryCount> na odpowiednią wartość zgodnie z potrzebami.

Jeśli na przykład uważasz, że możesz zezwolić na maksymalnie 10 wpisów 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>

Przekroczona liczba 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> jest określony jako 3, a ładunek wejściowy zawiera tablicę JSON z więcej niż 3 elementami, 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 została przekroczona 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 (podaną 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ź konkretny numer wiersza (określony w kroku 1) ładunku wejściowego i sprawdź, czy podana w tablicy liczba jest większa od liczby określonej 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 danych wejściowych:

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

    Powyższy ładunek JSON ma 5 elementów w tablicy o nazwie models na stronie wiersz 3. Ponieważ liczba elementów tablicy jest większa niż 3 (wartość określony dla elementu <ArrayElementCount>) pojawia się następujący 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ć ładunki o określonym progu liczby tablic, powinien pojawić się komunikat o błędzie. W takim przypadku nie musisz nic więcej robić.

Jeśli jednak stwierdzisz, że dopuszczalna jest większa liczba elementów w tablicy, zmień <ArrayElementCount> na odpowiednią wartość zgodnie z 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 środowisku wykonawczym 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żona w elementach JSON. Na przykład tablica zawierająca obiekt, który zawiera obiekt, pozwoliłaby określić głębokość przechowywania wynoszącą 3.

Jeśli na przykład element <ContainerDepth> ma wartość 3, a głębokość kontenera w ładunku wejściowym przekracza ten limit, komunikat o błędzie jest zgłaszany.

Diagnostyka

  1. Sprawdź komunikat o błędzie, aby zidentyfikować nazwę zasady JSONThreatProtection i numer wiersza, w którym została przekroczona 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 <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 wiersza (określony w kroku 1) ładunku wejściowego i sprawdź, czy głębokość kontenera w ładunku nie jest większa niż wartość określona w elemencie <ContainerDepth> (określona w kroku 2). Jeśli głębokość kontenera przekracza liczbę, to jest to przyczyna błędu.

    Oto przykładowy ładunek wejściowy:

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

    Ładunek JSON pokazany powyżej ma na linii 5 głębokość kontenera 6. Od głębokości jest większa niż 5, wartość określona dla elementu <ContainerDepth> argumentu w zasadach JSONThreatProtection pojawia się 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 zasada JSONThreatProtection miała na celu ochronę przed ładunkami, których głębokość kontenera przekracza określoną wartość, powinien pojawić się komunikat o błędzie. W takim przypadku nie musisz nic więcej robić.

Jeśli jednak stwierdzisz, że dopuszczalna jest większa głębokość kontenera, zmień <ContainerDepth> na odpowiednią wartość zgodnie z wymaganiami.

Jeśli na przykład uważasz, że możesz stosować kontenery z głębokością do 10 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>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 wejściowy ładunek komunikatu określony przez element <Source> zawiera elementy JSON, które mają wartości z większą liczbą znaków niż dozwolona w elemencie <StringValueLength>.

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

Diagnostyka

  1. Zapoznaj się z komunikatem o błędzie, aby zidentyfikować nazwę zasady i numer wiersza, w którym została przekroczona długość ciągu znaków. 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ść określoną dla elementu <StringValueLength> w (określonym 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 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 dla elementu <StringValueLength> (podana w kroku 2). Jeśli długość wartości przekracza limit, jest to przyczyną błędu.

    Oto przykładowy ładunek wejściowy:

    {
      "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, wartość określona w elemencie <StringValueLength>, 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 zasada JSONThreatProtection miała chronić ładunki z wartościami przekraczającymi określoną długość ciągu znaków, powinien pojawić się komunikat o błędzie. W takim przypadku nie musisz nic więcej robić.

Jeśli jednak uznasz, że w danych możesz podać dłuższą wartość, zmień wartość <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, jeśli wejściowy ładunek komunikatu określony przez element <Source> w zasadzie 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 andline w ładunku 2.

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason: Expecting : at line 3
    
  2. Sprawdź numer wiersza (określony 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 powyższym ładunku JSON wiersz 3 nie zawiera 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ść

Sprawdź, czy do każdego serwera proxy interfejsu API zawierającego zasadę JSONThreatProtection przekazywany jest prawidłowy wejściowy ładunek JSON.

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> zasady JSONThreatProtection to:

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

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

Diagnostyka

  1. Wskaż 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 ź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> 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 i message. Ponieważ żądania nie mają prawidłowej wartości i nie występują w przepływie, w którym zasada jest wykonywany, 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 widoczną powyżej, możesz zmodyfikować element <Source> tak, 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 to jest ustawiona 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 wiadomości znajdziesz w artykule Informacje o zmiennych.

Diagnostyka

  1. Identyfikowanie nazwy zasady JSONThreatProtection i nazwy 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 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ść

Sprawdź, czy element <Source> w nieudanej zasadzie JSONThreatProtection jest jest ustawiona na zmienną przepływu typu message istniejącą w przepływie, w którym jest wykonywana zasada.

Aby poprawić zasadę, możesz zmodyfikować element <Source> i określić zmienną który jest typem komunikatu. 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>