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

Apigee Edge belgelerini görüntülüyorsunuz.
Git: Apigee X belgeleri.
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 listelenmiştir:

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ı.
Öğe girişi sayısı aşıldı 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ştirilmiş derinlik aşıldı.
Dize değeri uzunluğu aşıldı Bir 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ü, özellik adı <ObjectEntryNameLength> öğesinde belirtilen maksimum uzunluğu aşan bir JSON nesnesi içeriyorsa ortaya çıkar.

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

Teşhis

  1. JSONThreatProtection politika adını ve uzun giriş adının geçtiği satır numarasını tanımlamak için hata mesajını inceleyin. Örneğin, aşağıdaki hata mesajında JSONThreatProtection politikasının adı JSON-Threat-Protection-1, yükteki satır numarası ise 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ğere dikkat 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ım'da tanımlanır) inceleyin ve nesne adının uzunluğunun <ObjectEntryNameLength> öğesinde belirtilen değerden (2. Adım'da tanımlanır) uzun 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ü görebilirsiniz:

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

    Yukarıda gösterilen JSON yükü, 2. satırda number adlı ve 6 karakterden oluşan (ad uzunluğu 6'dır) bir özelliğe sahiptir. 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ının amacı, tanımlanan değeri aşan nesne giriş adlarına sahip yüke karşı koruma sağlamak olsaydı hata mesajı almanız beklenir. Bu durumda başka bir işlem yapmanız gerekmez.

Bununla birlikte, daha uzun nesne giriş adlarının hiçbir sonuç olmadan yükte belirtilebileceğini belirlerseniz <ObjectEntryNameLength> değerini ihtiyaçlarınıza göre uygun bir değerle değiştirin.

Örneğin, uzunluğu 10 karaktere kadar olan nesne adları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ü, politikanın <ObjectEntryCount> öğesinde belirtilen değerden daha fazla giriş (özellik) içeren bir JSON nesnesi içeriyorsa ortaya çıkar.

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

Teşhis

  1. JSONThreatProtection politika adını ve giriş sayısının aşıldığı satır numarasını tanımlamak 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 şeklindedir:

    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 (1. adımda tanımlanmıştır) belirtilen değeri not edin.

    Aşağıdaki politika örneğinde <ObjectEntryCount>, 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ımlanır) inceleyin ve yükteki öğe sayısının <ObjectEntryCount> öğesi için belirtilen değerden (2. adımda tanımlanır) daha yüksek olup olmadığını kontrol edin. Nesnelerin sayısı nesne giriş sayısını aşıyorsa hatanın nedeni budur.

    Aşağıda örnek bir giriş yükü görebilirsiniz:

    {
    "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şmektedir. Giriş JSON yükündeki nesne girişlerinin sayısı 5'ten fazla olduğu için (<ObjectEntryCount> öğesi için 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 object entry count at
    line 7
    

Çözünürlük

JSONThreatProtection politikasının amacı, belirli bir eşiği aşan çok sayıda nesne girişine sahip yüke karşı koruma sağlamaksa bu, hata mesajı beklenir. Bu durumda herhangi bir işlem yapmanız gerekmez.

Ancak, yükü herhangi bir soruna yol açmayacak şekilde daha fazla nesne girişi içerebileceğini belirlerseniz <ObjectEntryCount> değerini ihtiyaçlarınıza göre uygun bir değere değiştirin.

Örneğin, en fazla 10 nesne girişine izin verebileceğinizi düşünüyorsanız JSONThreatProtection politikasını şu ş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>12</ContainerDepth>
    <ObjectEntryCount>10</ObjectEntryCount>
    <ObjectEntryNameLength>6</ObjectEntryNameLength>
    <Source>request</Source>
    <StringValueLength>50</StringValueLength>
</JSONThreatProtection>

Dizi öğesi sayısı 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ü, politikanın <ArrayElementCount> öğesinde belirtilen sayıdan fazla öğeye sahip bir JSON dizisi içeriyorsa ortaya çıkar.

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

Teşhis

  1. Politika adını ve dizi uzunluğunun aşıldığı satır numarasını tanımlamak 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 şeklindedir:

    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ımlanır).

    Aşağıdaki JSONThreatProtection politikası ö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ım'da tanımlanır) inceleyin ve burada belirtilen dizide, <ArrayElementCount> öğesinde belirtilen sayıdan (2. Adım'da tanımlanır) daha yüksek bir sayım 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ü görebilirsiniz:

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

    Yukarıda gösterilen JSON yükünde, 3. satırda models adlı dizinde 5 öğe vardır. Dizi öğelerinin sayısı 3'ten (değer <ArrayElementCount> öğesi için belirtilir) ş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ının amacı, belirli bir dizi sayısı eşiğine sahip yüklere karşı koruma sağlamaksa hata mesajı beklenir. Bu durumda herhangi bir işlem yapmanıza gerek yoktur.

Bununla birlikte, bir dizide daha yüksek sayıda öğeye izin verilebileceğini belirlerseniz <ArrayElementCount> öğesini gereksinimlerinize 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 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>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 bir 500 yanıt kodu döndürür:

{
    "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ü, kapsayıcı derinliği politikanın <ContainerDepth> öğesinde belirtilen maksimum kapsayıcı derinliğini aşan JSON öğeleri içeren bir JSON nesnesi içeriyorsa ortaya çıkar. Kapsayıcı derinliği, JSON öğeleri için izin verilen maksimum iç içe yerleştirilmiş derinliktir. Örneğin, nesne içeren bir nesne içeren bir dizi, kapsama derinliğini 3 olarak belirler.

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

Teşhis

  1. JSONThreatProtection politikası 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 ve yükteki satır numarası 5'tır.

    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 politikası ö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 özel satır numarasını (1. Adım'da tanımlanır) inceleyin ve yükteki konteyner derinliğinin <ContainerDepth> öğesinde belirtilen değerden (2. Adım'da tanımlanır) yüksek olup olmadığını kontrol edin. Kapsayıcı derinliği 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ü, 5. satırda container derinliği 6'dır. Derinlikten beri 5'ten büyükse şunun <ContainerDepth> öğesi için belirtilen değer: JSONThreatProtection politikasında ş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ının amacı, container derinlikleri belirtilen değeri aşan yüklere karşı koruma sağlamaksa hata mesajı görüntülenir. 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 ihtiyaçlarınıza göre uygun bir değere değiştirin.

Örneğin, 10'a kadar container derinliğine 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>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> öğesinin izin verdiğinden daha fazla karakter içeren değerlere sahip JSON öğeleri içeriyorsa ortaya çıkar.

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

Teşhis

  1. Politika adını ve dize uzunluğunun aşıldığı 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 şeklindedir.

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

    Aşağıdaki JSONThreatProtection politikası ö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ündeki belirli satır numarasını (1. adımda tanımlanır) inceleyin ve değerin uzunluğunun <StringValueLength> öğesi için belirtilen karakter sayısından (2. adımda tanımlanır) daha uzun 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, 3. satırda Place Name adlı bir nesne ve Taumatawhakatangihangakoauauotamateaturipukakapikimaungahoronukupokaiwhenuakitanatahu adlı değerinin 85 karakteri vardır. Değerin uzunluğu <StringValueLength> öğesinde belirtilen değer 50 ise şu hata oluştu:

    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ının amacı, belirli bir dize uzunluğunu aşan değerlere sahip yüklere karşı koruma sağlamaksa hata mesajı görüntülenir. Bu durumda başka bir işlem yapmanız gerekmez.

Ancak yükte daha uzun bir değer uzunluğunun belirtilebileceğine karar verirseniz <StringValueLength> değerini ihtiyaçlarınıza göre uygun bir değerle değiştirin.

Örneğin, 90 karaktere kadar bir değere izin verebilirsiniz. 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, giriş mesajı yükü <Source> öğesi tarafından belirtilirse ortaya çıkar JSONThreatProtection politikası, geçerli bir JSON nesnesi değil.

Teşhis

  1. Politika adını ve hatanın oluştuğu satır numarasını belirlemek için hata mesajını inceleyin. Aşağıdaki örnekte politika adı, JSON-Threat-Protection-1 andyüklü (2) satırı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ım'da tanımlanır) inceleyin ve yükte geçirilen 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) işareti yoktur. Bu 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 API Proxy'lerine geçerli bir giriş JSON yükü 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 şunlardan biri olduğunda ortaya çıkar:

  • Kapsam dışında (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 değişkenin sağlanmasını kolaylaştırır.

Teşhis

  1. Hata mesajından politika adını ve Source 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 requests'tır:

    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 politikası ö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> öğesi için geçerli değerler request, response veya message şeklindedir. Çünkü istekleri geçerli bir değer değil ve politikanın ihlal edildiği akışta uygulaması yürütülüyorsa şu hatayı alırsınız:

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

Çözünürlük

Başarısız 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 örnek JSONThreatProtection politikasını düzeltmek için <Source> öğesini, istek akışında mevcut olduğundan 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üne ait olmayan bir değişkene ayarlanırsa ortaya çıkar.

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 istek, yanıt ve mesaj türüne sahiptir. Alıcı: mesaj değişkenleri hakkında daha fazla bilgi için Değişkenler referansı başlıklı makaleyi inceleyin.

Teşhis

  1. Hata mesajından JSONThreatProtection politikasının adını ve Source 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 ise:

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

    Aşağıdaki JSONThreatProtection politikası örneğinde <Source>, 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, mesaj 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 JSONThreatProtection politikasındaki <Source> öğesinin, politikanın yürütüldüğü akışta bulunan bir mesaj türü akış değişkenine ayarlandığından emin olun.

Politikayı düzeltmek için <Source> öğesini bir değişken belirtecek şekilde değiştirebilirsiniz. reklam grubudur. Örneğin, başarısız JSONThreatProtection dosyasında <Source> öğesini message olarak belirtin:

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