JSON Tehdit Koruması çalışma zamanı hatasını giderme

Apigee Edge belgelerini görüntülüyorsunuz.
Apigee X belgelerine gidin.
bilgi

ExecutionFailed

Hata Kodu

steps.jsonthreatprotection.ExecutionFailed

Hata yanıtı gövdesi

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

Hata türleri ve olası nedenleri

JSONThreatProtection politikası birçok farklı türde ExecutionFailed hatası verebilir. Aşağıdaki tabloda, farklı hata türleri ve olası nedenleri listelenmektedir:

Hata türü Neden
Nesne girişi adı uzunluğu aşıldı Bir nesnenin giriş adında izin verilen maksimum dize uzunluğu aşıldı.
Aşılan nesne girişi sayısı Bir nesnede izin verilen maksimum giriş sayısı aşıldı.
Dizi öğesi sayısı aşıldı Bir dizide izin verilen maksimum öğe sayısı aşıldı.
Kapsayıcı derinliği aşıldı İzin verilen maksimum iç içe yerleştirme derinliği aşıldı.
Dize değeri uzunluğu aşıldı Dize değeri için izin verilen maksimum uzunluk aşıldı.
Geçersiz JSON nesnesi Giriş JSON yükü geçersiz.

Nesne girişi adı uzunluğu aşıldı

Hata yanıtı gövdesi

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

Örnek hata yanıtı gövdesi

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

Neden

Bu hata, <Source> öğesi tarafından belirtilen giriş mesajı yükü, <ObjectEntryNameLength> öğesinde belirtilen maksimum uzunluğu aşan bir özellik adına sahip bir JSON nesnesi içeriyorsa oluşur.

Örneğin, politikada <ObjectEntryNameLength> öğesi 5 olarak belirtilmişse ancak giriş mesajı yükünde adı 5 karakteri aşan bir JSON özelliği varsa bu hata verilir.

Teşhis

  1. JSONThreatProtection politika adını ve uzun giriş adının bulunduğu satır numarasını belirlemek için hata mesajını inceleyin. Örneğin, aşağıdaki hata mesajında JSONThreatProtection politika adı JSON-Threat-Protection-1 ve yükteki satır numarası 2'dir.

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded object entry name
    length at line 2
    
  2. 1. adımda belirlediğiniz politikayı inceleyin ve <ObjectEntryNameLength> öğesinde belirtilen değeri not edin.

    Örneğin, aşağıdaki JSONThreatProtection politikasında <ObjectEntryNameLength>, 5 olarak ayarlanmıştır:

    <?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. Giriş yükünün belirli satır numarasını (1. adımda tanımlanmıştır) inceleyin ve nesne adının uzunluğunun <ObjectEntryNameLength> öğesinde (2. adımda tanımlanmıştır) belirtilen değerden büyük olup olmadığını kontrol edin. Nesne adının uzunluğu bu sayıyı aşıyorsa hatanın nedeni budur.

    Aşağıda örnek bir giriş yükü verilmiştir:

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

    Yukarıda gösterilen JSON yükünde, 2. satırda number adlı bir özellik var. Bu özellik 6 karakter uzunluğunda (ad uzunluğu 6). Nesne adının uzunluğu 5'ten (<ObjectEntryNameLength> öğesi için belirtilen değer) büyük olduğundan şu hatayı alırsınız:

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

Çözünürlük

JSONThreatProtection politikası, tanımlanan değeri aşan nesne girişi adlarına sahip yüklerden korunmak için tasarlanmışsa hata mesajı beklenir. Bu durumda başka bir işlem yapmanız gerekmez.

Ancak daha uzun nesne girişi adlarının, yükte herhangi bir sonuç olmadan belirtilebileceğini belirlerseniz <ObjectEntryNameLength> değerini gereksinimlerinize göre uygun bir değerle değiştirin.

Örneğin, nesne adlarının 10 karaktere kadar uzun olmasına izin verebileceğinizi düşünüyorsanız JSONThreatProtection politikasını aşağıdaki gibi değiştirin:

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

Nesne girişi sayısı aşıldı

Hata yanıtı gövdesi

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

Örnek hata yanıtı gövdesi

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

Neden

Bu hata, <Source> öğesi tarafından belirtilen giriş mesajı yükü, politikadaki <ObjectEntryCount> öğesinde belirtilen değerden daha fazla giriş (özellik) içeren bir JSON nesnesi içeriyorsa oluşur.

Örneğin, <ObjectEntryCount> öğesi 5 ise ancak giriş JSON yükünde 5'ten fazla giriş varsa bu hata verilir.

Teşhis

  1. JSONThreatProtection politika adını ve giriş sayısının aşıldığı satır numarasını belirlemek için hata mesajını inceleyin. Örneğin, aşağıdaki hata mesajında politika adı JSON-Threat-Protection-1 ve yükteki satır numarası 7'dir:

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded object entry count
    at line 7
    
  2. Politikanın <ObjectEntryCount> öğesinde belirtilen değeri (1. adımda tanımlanmıştır) not edin.

    Aşağıdaki politika örneğinde, <ObjectEntryCount> değeri 5 olarak ayarlanmıştır:

    <?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. Giriş yükünün belirli satır numarasını (1. adımda tanımlanmıştır) inceleyin ve yükteki varlık sayısının, <ObjectEntryCount> öğesi için belirtilen değerden (2. adımda tanımlanmıştır) büyük olup olmadığını kontrol edin. Nesne sayısı, nesne girişi sayısını aşıyorsa hatanın nedeni budur.

    Aşağıda örnek bir giriş yükü verilmiştir:

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

    Yukarıda gösterilen JSON yükünde 6. giriş 7. satırda (şirket) gerçekleşir. Giriş JSON yükündeki nesne girişlerinin sayısı 5'ten (<ObjectEntryCount> öğesi için belirtilen değer) büyük olduğundan şu hatayı alırsınız:

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

Çözünürlük

JSONThreatProtection politikası, belirli bir eşiği aşan sayıda nesne girişi içeren yüklerden korunmak için tasarlanmışsa hata mesajı beklenir. Bu durumda başka bir işlem yapmanız gerekmez.

Ancak, yükte herhangi bir sonuç olmadan daha fazla nesne girişi eklenebileceğini belirlerseniz <ObjectEntryCount> değerini gereksinimlerinize göre uygun bir değerle değiştirin.

Örneğin, en fazla 10 nesne girişi sağlayabileceğinizi düşünüyorsanız JSONThreatProtection politikasını aşağıdaki gibi değiştirin:

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

Dizi öğesi sayısı sınırı aşıldı

Hata yanıtı gövdesi

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

Örnek hata yanıtı gövdesi

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

Neden

Bu hata, <Source> öğesi tarafından belirtilen giriş mesajı yükü, politikadaki <ArrayElementCount> öğesinde belirtilen sayıdan daha fazla öğe içeren bir JSON dizisi içeriyorsa oluşur.

Örneğin, <ArrayElementCount> öğesi 3 olarak belirtilmişse ancak giriş yükünde 3'ten fazla öğe içeren bir JSON dizisi varsa bu hata verilir.

Teşhis

  1. Dizi uzunluğunun aşıldığı politika adını ve satır numarasını belirlemek için hata mesajını inceleyin. Örneğin, aşağıdaki hata mesajında politika adı JSON-Threat-Protection-1 ve yükteki satır numarası 3'dir:

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded array element count at line 3
    
  2. Politikanın <ArrayElementCount> öğesi için belirtilen değeri not edin (1. adımda tanımlanmıştır).

    Aşağıdaki JSONThreatProtection politika örneğinde <ArrayElementCount>, 3 olarak ayarlanmıştır:

    <?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. Giriş yükünün belirli satır numarasını (1. adımda tanımlanmıştır) inceleyin ve orada belirtilen dizinin, <ArrayElementCount> öğesinde (2. adımda tanımlanmıştır) belirtilen sayıdan daha yüksek olup olmadığını kontrol edin. Dizi öğelerinin sayısı, sayıyı aşıyorsa hatanın nedeni budur.

    Aşağıda örnek bir giriş yükü verilmiştir:

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

    Yukarıda gösterilen JSON yükünde, 3. satırda models adlı dizide 5 öğe var. Dizi öğelerinin sayısı 3'ten (<ArrayElementCount> öğesi için belirtilen değer) büyük olduğu için şu hatayı alırsınız:

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

Çözünürlük

JSONThreatProtection politikası, belirli bir dizi sayısı eşiğine sahip yüklerden korunmak için tasarlanmışsa hata mesajı beklenir. Bu durumda başka bir işlem yapmanız gerekmez.

Ancak bir dizide daha fazla sayıda öğeye izin verilebileceğini belirlerseniz <ArrayElementCount> değerini gereksinimlerinize göre uygun bir değerle değiştirin.

Örneğin, en fazla 5 dizi öğesine izin verebileceğinizi düşünüyorsanız politikayı aşağıdaki şekilde değiştirin:

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

Kapsayıcı derinliği aşıldı

Hata yanıtı gövdesi

Çalışma zamanı trafiği, aşağıdaki hatayla birlikte 500 yanıt kodu döndürüyor:

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

Örnek hata yanıtı gövdesi

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

Neden

Bu hata, <Source> öğesi tarafından belirtilen giriş mesajı yükü, politikadaki <ContainerDepth> öğesinde belirtilen maksimum kapsayıcı derinliğini aşan kapsayıcı derinliğine sahip JSON öğeleri içeren bir JSON nesnesi içeriyorsa oluşur. Kapsayıcı derinliği, JSON öğeleri için izin verilen maksimum iç içe derinliktir. Örneğin, bir nesne içeren bir nesne içeren bir dizi, kapsama derinliğinin 3 olmasına neden olur.

Örneğin, <ContainerDepth> öğesi 3 ise ancak giriş yükü bu sınırı aşan bir kapsayıcı derinliğine sahipse bu hata verilir.

Teşhis

  1. JSONThreatProtection politika adını ve kapsayıcı derinliğinin aşıldığı satır numarasını belirlemek için hata mesajını inceleyin. Örneğin, aşağıdaki hata mesajında politika adı JSON-Threat-Protection-1, yükteki satır numarası ise 5'dir.

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded container depth at
    line 5
    
  2. <ContainerDepth> öğesi için belirtilen değeri (1. adımda tanımlanmıştır) not edin.

    Aşağıdaki JSONThreatProtection politika örneğinde <ContainerDepth>, 5 olarak ayarlanmıştır:

    <?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. Giriş yükünün belirli satır numarasını (1. adımda tanımlanmıştır) inceleyin ve yükteki kapsayıcı derinliğinin <ContainerDepth> öğesinde (2. adımda tanımlanmıştır) belirtilen değerden yüksek olup olmadığını kontrol edin. Kapsayıcı derinliği bu sayıyı aşıyorsa hatanın nedeni budur.

    Aşağıda örnek bir giriş yükü verilmiştir:

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

    Yukarıda gösterilen JSON yükünün 5. satırda 6 kapsayıcı derinliği vardır. Derinlik 5'ten büyük olduğundan, JSONThreatProtection politikasının <ContainerDepth> öğesi için belirtilen değerde şu hatayı alırsınız:

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

Çözünürlük

JSONThreatProtection politikası, belirtilen değeri aşan kapsayıcı derinliklerine sahip yüklerden korunmak için tasarlanmışsa hata mesajı beklenir. Bu durumda başka bir işlem yapmanız gerekmez.

Ancak daha yüksek kapsayıcı derinliklerinin kabul edilebilir olduğunu belirlerseniz <ContainerDepth> değerini, gereksinimlerinize uygun bir değerle değiştirin.

Örneğin, 10'a kadar kapsayıcı derinliğine izin verebileceğinizi düşünüyorsanız politikayı aşağıdaki şekilde değiştirin:

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

Dize değeri uzunluğu aşıldı

Hata yanıtı gövdesi

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

Örnek hata yanıtı gövdesi

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

Neden

Bu hata, <Source> öğesi tarafından belirtilen giriş mesajı yükü, <StringValueLength> öğesi tarafından izin verilenden daha fazla karakter içeren değerlere sahip JSON öğeleri içeriyorsa oluşur.

Örneğin, politikada <StringValueLength> öğesi 50 olarak ayarlanmışsa ancak giriş yükünde değerleri 50'den fazla karakter içeren bir veya daha fazla öğe varsa bu hata verilir.

Teşhis

  1. Dize uzunluğunun aşıldığı politika adını ve satır numarasını belirlemek için hata mesajını inceleyin. Aşağıdaki örnekte politika adı, JSON-Threat-Protection-1 andyükteki satır 3'dır.

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded string value length at line 3
    
  2. (1. adımda belirlenen) <StringValueLength> öğesi için belirtilen değeri not edin.

    Aşağıdaki JSONThreatProtection politika örneğinde <StringValueLength>, 50 olarak ayarlanmıştır:

    <?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. Giriş yükünün belirli satır numarasını (1. adımda tanımlanmıştır) inceleyin ve değerin uzunluğunun, <StringValueLength> öğesi için belirtilen karakter sayısından (2. adımda tanımlanmıştır) büyük olup olmadığını kontrol edin. Değerin uzunluğu sınırı aşıyorsa hatanın nedeni budur.

    Aşağıda örnek bir giriş yükü verilmiştir:

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

    Yukarıda gösterilen JSON yükünde, değeri Taumatawhakatangihangakoauauotamateaturipukakapikimaungahoronukupokaiwhenuakitanatahu olan Place Name adlı bir nesne var. Bu değer, 3. satırda 85 karakterden oluşuyor. Değerin uzunluğu 50'den fazla olduğundan (<StringValueLength> öğesinde belirtilen değer) aşağıdaki hatayı alırsınız:

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

Çözünürlük

JSONThreatProtection politikası, belirli bir dize uzunluğunu aşan değerlere sahip yüklerden korunmak için tasarlanmışsa hata mesajı beklenir. Bu durumda başka bir işlem yapmanız gerekmez.

Ancak yükte daha uzun bir değer uzunluğu belirtilebileceğini belirlerseniz <StringValueLength> değerini gereksinimlerinize göre uygun bir değerle değiştirin.

Örneğin, 90 karakter uzunluğuna kadar bir değere izin verebileceğinizi düşünüyorsanız politikayı aşağıdaki gibi değiştirin:

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

Geçerli JSON nesnesi değil

Hata yanıtı gövdesi

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

Örnek hata yanıtı gövdesi

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

Neden

Bu hata, JSONThreatProtection politikasındaki <Source> öğesiyle belirtilen giriş mesajı yükü geçerli bir JSON nesnesi değilse oluşur.

Teşhis

  1. Hata mesajını inceleyerek politika adını ve hatanın oluştuğu satır numarasını belirleyin. Aşağıdaki örnekte politika adı, JSON-Threat-Protection-1 andyükteki satır 2'dır.

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason: Expecting : at line 3
    
  2. Giriş yükünün belirli satır numarasını (1. adımda tanımlanmıştır) inceleyin ve yükte iletilen JSON nesnesinin gerçekten geçerli bir JSON nesnesi olup olmadığını kontrol edin.

    Aşağıda örnek bir giriş yükü verilmiştir:

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

    Yukarıda gösterilen JSON yükünde 3. satırda ":" (iki nokta) yok. Geçerli bir JSON nesnesi olmadığından şu hatayı alırsınız:

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

Çözünürlük

JSONThreatProtection politikasını içeren tüm API proxy'lerine geçerli bir giriş JSON yükünün iletildiğinden emin olun.

Yukarıda açıklanan örnek için JSON yükünü aşağıdaki gibi değiştirin:

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

SourceUnavailable

Hata Kodu

steps.jsonthreatprotection.SourceUnavailable

Hata yanıtı gövdesi

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

Örnek hata yanıtı gövdesi

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

Neden

Bu hata, JSONThreatProtection politikasının <Source> öğesinde belirtilen message değişkeni şu durumlarda oluşur:

  • Kapsam dışı (politikanın yürütüldüğü belirli akışta kullanılamaz)
  • request, response veya message geçerli değerlerinden biri değil

Örneğin, bu hata, politikadaki <Source> öğesi, politikanın yürütüldüğü akışta bulunmayan bir değişkene ayarlanırsa oluşur.

Teşhis

  1. Hata mesajından politika adını ve Kaynak değişkeninin adını belirleyin. Örneğin, aşağıdaki hata mesajında politika adı JSON-Threat-Protection-1, Kaynak değişkeni ise requests'dir:

    JSONThreatProtection[JSON-Threat-Protection-1]:: Source requests is not available
    
  2. 1. adımda tanımlanan <Source> öğesi için belirtilen değeri inceleyin.

    Aşağıdaki JSONThreatProtection politika örneğinde, <Source> öğesi requests olarak ayarlanmıştır.

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

    <Source> öğesinin geçerli değerleri request, response veya message'dir. requests geçerli bir değer olmadığından ve politikanın yürütüldüğü akışta bulunmadığından şu hatayı alırsınız:

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

Çözünürlük

Başarısız olan JSONThreatProtection politikasının <Source> öğesinde ayarlanan değişkenin request, response veya message olarak ayarlandığından ve politikanın yürütüldüğü akışta bulunduğundan emin olun.

Yukarıda gösterilen JSONThreatProtection politikasını düzeltmek için <Source> öğesini, istek akışında mevcut olduğu için request değişkenini kullanacak şekilde değiştirebilirsiniz:

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

Hata Kodu

steps.jsonthreatprotection.NonMessageVariable

Hata yanıtı gövdesi

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

Örnek hata yanıtı gövdesi

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

Neden

Bu hata, JSONThreatProtection politikasındaki <Source> öğesi message türünde olmayan bir değişkene ayarlanırsa oluşur.

Mesaj türü değişkenleri, HTTP isteklerinin ve yanıtlarının tamamını temsil eder. Yerleşik Apigee Edge akış değişkenleri request, response ve message, ileti türündedir. Mesaj değişkenleri hakkında daha fazla bilgi edinmek için Değişkenler referansı başlıklı makaleyi inceleyin.

Teşhis

  1. Hata mesajından JSONThreatProtection politika adını ve Kaynak değişkeninin adını belirleyin. Örneğin, aşağıdaki hata mesajında politika adı JSON-Threat-Protection-1 ve Kaynak değişkeni message.content'dir:

    JSONThreatProtection[JSON-Threat-Protection-1]: Variable message.content does not resolve to a Message
    
  2. JSONThreatProtection politikasının <Source> öğesini (1. adımda tanımlanmıştır) inceleyin.

    Aşağıdaki JSONThreatProtection politika örneğinde, <Source> değeri message yerine message.content olarak ayarlanmıştır:

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

    message.content ileti türünde olmadığından şu hatayı alırsınız:

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

Çözünürlük

Başarısız olan JSONThreatProtection politikasındaki <Source> öğesinin, politikanın yürütüldüğü akışta bulunan bir message türü akış değişkenine ayarlandığından emin olun.

Politikayı düzeltmek için <Source> öğesini değiştirerek mesaj türünde bir değişken belirtebilirsiniz. Örneğin, başarısız olan JSONThreatProtection'da <Source> öğesini message olarak belirtebilirsiniz:

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