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.
informacje.

ExecutionFailed

Kod błędu

steps.jsonthreatprotection.ExecutionFailed

Treść odpowiedzi błędu

{
    "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. Poniższa tabela przedstawia różne typy błędów i ich możliwe przyczyny:

Typ błędu Przyczyna
Przekroczono długość nazwy wpisu obiektu Przekroczono maksymalną długość ciągu znaków w nazwie wpisu obiektu.
Przekroczona liczba wpisów obiektów 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żoną.
Przekroczona długość wartości ciągu Przekroczono maksymalną długość wartości ciągu znaków.
Nieprawidłowy obiekt JSON Wejściowy ładunek JSON jest nieprawidłowy.

Przekroczono długość nazwy wpisu obiektu

Treść odpowiedzi błędu

{
    "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 o błędzie

{
    "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, gdy ładunek komunikatu wejściowego określony przez element <Source> zawiera obiekt JSON o nazwie właściwości przekraczającej 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 nazwie większej niż 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 poniższym 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ść podaną 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) ładunku wejściowego i sprawdź, czy długość nazwy obiektu jest większa niż wartość określona w elemencie <ObjectEntryNameLength> (określonej 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"
    }
    

    Powyższy ładunek JSON ma w wierszu 2 właściwość o nazwie number, która ma 6 znaków (nazwa o długości 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ę przed ładunkami z nazwami wpisów obiektów przekraczającymi 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ślać dłuższe nazwy wpisów obiektów, zmień <ObjectEntryNameLength> na odpowiednią wartość zgodnie ze swoimi wymaganiami.

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 błędu

{
    "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 o błędzie

{
    "fault": {
        "faultstring": "JSONThreatProtection[JSON-Threat-Protection-1]:
          Execution failed. reason: JSONThreatProtection[JSON-Threat-Protection-1]:
          Exceeded object entry count at line 7",
        "detail": {
            "errorcode": "steps.jsonthreatprotection.ExecutionFailed"
        }
    }
}

Przyczyna

Ten błąd występuje, jeśli ładunek wiadomości wejściowej określony przez element <Source> zawiera obiekt JSON, który zawiera więcej pozycji (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 ma więcej niż 5 wpisów, zgłasza 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ść określoną w elemencie <ObjectEntryCount> zasady (określonej w kroku 1).

    W tej przykładowej zasadzie <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) ładunku wejściowego i sprawdź, czy liczba encji w ładunku jest większa niż wartość określona dla elementu <ObjectEntryCount> (zidentyfikowanego w kroku 2). Jeśli liczba obiektów przekracza liczbę wpisów obiektu, 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 widocznym 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ę 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ę przed ładunkami z liczbą wpisów obiektów przekraczających określony próg, komunikat o błędzie jest oczekiwany. W takim przypadku nie musisz podejmować żadnych dodatkowych działań.

Jeśli jednak stwierdzisz, że w ładunku można bez żadnych konsekwencji uwzględnić więcej wpisów obiektów, zmodyfikuj <ObjectEntryCount> do odpowiedniej wartości zgodnie z wymaganiami.

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>

Przekroczono liczbę elementów tablicy

Treść odpowiedzi błędu

{
    "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 o błędzie

{
    "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ściowy 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, zgłaszany jest ten błąd.

Diagnostyka

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

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded array element count at line 3
    
  2. Zanotuj wartość określoną w elemencie <ArrayElementCount> zasady (określonej 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 (zidentyfikowany w kroku 1) ładunku wejściowego i sprawdź, czy podana tablica zawiera liczbę wyższą niż liczba określona w elemencie <ArrayElementCount> (zidentyfikowanej 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"
     ]
    }
    

    Powyższy ładunek JSON ma 5 elementów w tablicy o nazwie models w wierszu 3. Ponieważ liczba elementów tablicy przekracza 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ę przed ładunkami o określonym progu liczby tablic, komunikat o błędzie jest oczekiwany. W takim przypadku nie musisz nic robić.

Jeśli jednak stwierdzisz, że w tablicy może być dozwolona większa liczba elementów, zmień <ArrayElementCount> na odpowiednią wartość do swoich potrzeb.

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

Przekroczono głębokość kontenera

Treść odpowiedzi błędu

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 o błędzie

{
    "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 z 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 w przypadku tablicy zawierającej obiekt zawierający obiekt głębokość izolacji wynosi 3.

Jeśli np. element <ContainerDepth> ma wartość 3, ale głębokość kontenera w ładunku wejściowym przekracza ten limit, błąd zostanie 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ślonego 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 (zidentyfikowanego w kroku 1) ładunku wejściowego i sprawdź, czy głębokość kontenera w ładunku jest większa niż wartość określona w elemencie <ContainerDepth> (zidentyfikowanej w kroku 2). Jeśli głębokość kontenera przekracza liczbę, to jest przyczyną błędu.

    Oto przykładowy ładunek wejściowy:

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

    Powyższy ładunek JSON w wierszu 5 ma głębokość kontenera równą 6. Ponieważ głębokość jest większa niż 5, wartość elementu <ContainerDepth> zasady JSONThreatProtection powoduje wystąpienie 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 na celu ochronę przed ładunkami z głębokościami kontenerów, które przekraczają podaną wartość, komunikat o błędzie jest oczekiwany. W takim przypadku nie musisz nic robić.

Jeśli jednak stwierdzisz, że większe głębokości kontenerów są akceptowalne, zmień <ContainerDepth> na odpowiednią wartość zgodnie ze swoimi wymaganiami.

Jeśli na przykład uważasz, że zezwalasz na głębokość kontenera do 10 kontenerów, zmodyfikuj zasady w ten sposób:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<JSONThreatProtection async="false" continueOnError="false" enabled="true" name="JSON-Threat-Protection-1">
    <DisplayName>JSON Threat Protection-1</DisplayName>
    <Properties/>
    <ArrayElementCount>3</ArrayElementCount>
    <ContainerDepth>10</ContainerDepth>
    <ObjectEntryCount>5</ObjectEntryCount>
    <ObjectEntryNameLength>20</ObjectEntryNameLength>
    <Source>request</Source>
    <StringValueLength>50</StringValueLength>
</JSONThreatProtection>

Przekroczono długość wartości ciągu

Treść odpowiedzi błędu

{
    "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 o błędzie

{
    "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 z wartościami przekraczającymi limit znaków w elemencie <StringValueLength>.

Jeśli na przykład element <StringValueLength> ma w zasadzie wartość 50, ale ładunek wejściowy zawiera co najmniej jeden element, którego wartości zawierają więcej niż 50 znaków, zostanie zgłoszony ten błąd.

Diagnostyka

  1. Sprawdź komunikat o błędzie, by zidentyfikować nazwę zasady i numer wiersza, w którym została przekroczona 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> w elemencie (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ź konkretny numer wiersza (zidentyfikowany 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> (określonego 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ższy ł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> powoduje wystąpienie tego błędu:

    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ę przed ładunkami 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ć dłuższą wartość, zmodyfikuj atrybut <StringValueLength> do odpowiedniej wartości.

Jeśli np. uważasz, że wartość nie może przekraczać 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 błędu

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

Przykładowa treść odpowiedzi o błędzie

{
    "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. Sprawdź komunikat o błędzie, by poznać 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 konkretnego wiersza (zidentyfikowanego w kroku 1) ładunku wejściowego i sprawdź, czy obiekt JSON przekazany w ładunku rzeczywiście jest prawidłowym obiektem JSON.

    Oto przykładowy ładunek wejściowy:

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

    W widocznym powyżej ładunku JSON wiersz 3 nie zawiera dwukropka (":"). Ponieważ nie jest to prawidłowy obiekt JSON, wystąpi 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 przesyłany 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 błędu

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

Przykładowa treść odpowiedzi o błędzie

{
    "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 występuje w procesie, w którym jest wykonywana.

Diagnostyka

  1. Wskaż nazwę zasady oraz nazwę zmiennej Źródło 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ść określoną dla elementu <Source> określonego 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. Żądania nie są prawidłową wartością i nie występują w procesie, w którym jest wykonywana zasada, więc pojawia się błąd:

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

Rozdzielczość

Upewnij się, że zmienna ustawiona w elemencie <Source> nieudanej zasady JSONThreatProtection jest ustawiona na request, response lub message i istnieje w procesie, w którym jest wykonywana.

Aby poprawić przykładową zasadę JSONThreatProtection widoczną powyżej, można 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 błędu

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

Przykładowa treść odpowiedzi o błędzie

{
    "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 przepływu Apigee Edge dotyczące żądań, odpowiedzi i komunikatu są typu komunikat. Więcej informacji o zmiennych wiadomości znajdziesz w dokumentacji zmiennych.

Diagnostyka

  1. Zidentyfikuj nazwę zasady JSONThreatProtection i nazwę zmiennej Source 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ło to message.content:

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

    W tym 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>
    

    Komunikat message.content nie jest typu, więc 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 przepływie, w którym jest wykonywana zasada.

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