عیب یابی خطای زمان اجرا Protection JSON

شما در حال مشاهده اسناد Apigee Edge هستید.
به مستندات Apigee X بروید .
اطلاعات

اجرا ناموفق بود

کد خطا

steps.jsonthreatprotection.ExecutionFailed

بدنه پاسخ به خطا

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

انواع خطاها و علل احتمالی

خط مشی JSONThreatProtection می تواند انواع مختلفی از خطاهای ExecutionFailed را ایجاد کند. جدول زیر انواع مختلف خطاها و علل احتمالی آنها را فهرست می کند:

نوع خطا علت
از طول نام ورودی شی بیشتر شد از حداکثر طول رشته مجاز در نام ورودی یک شی بیشتر شده است.
از تعداد ورودی شی بیشتر شد از حداکثر تعداد ورودی های مجاز در یک شی بیشتر شده است.
از تعداد عناصر آرایه فراتر رفت از حداکثر تعداد عناصر مجاز در یک آرایه فراتر رفته است.
بیش از عمق ظرف از حداکثر عمق مجاز تو در تو فراتر رفته است.
از طول مقدار رشته بیشتر شد از حداکثر طول مجاز برای یک مقدار رشته فراتر رفته است.
شی JSON نامعتبر است ورودی JSON Payload نامعتبر است.

از طول نام ورودی شی بیشتر شد

بدنه پاسخ به خطا

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

مثال بدنه پاسخ به خطا

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

علت

این خطا در صورتی رخ می دهد که بار پیام ورودی مشخص شده توسط عنصر <Source> حاوی یک شی JSON با نام ویژگی باشد که از حداکثر طول مشخص شده در عنصر <ObjectEntryNameLength> بیشتر باشد.

به عنوان مثال، اگر عنصر <ObjectEntryNameLength> به عنوان 5 در خط مشی مشخص شده باشد، اما بار پیام ورودی دارای ویژگی JSON باشد که نام آن بیش از 5 کاراکتر باشد، این خطا پرتاب می شود.

تشخیص

  1. برای شناسایی نام خط مشی JSONThreatProtection و شماره خطی که نام ورودی طولانی در آن قرار دارد، پیام خطا را بررسی کنید. به عنوان مثال، در پیام خطای زیر، نام خط مشی JSONThreatProtection JSON-Threat-Protection-1 و شماره خط در payload 2 است.

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded object entry name
    length at line 2
    
  2. خط مشی را که در مرحله 1 شناسایی کردید بررسی کنید و به مقدار مشخص شده در عنصر <ObjectEntryNameLength> توجه کنید.

    به عنوان مثال، در سیاست JSONThreatProtection زیر، <ObjectEntryNameLength> روی 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. شماره خط خاص (مشخص شده در مرحله 1) بار ورودی را بررسی کنید و بررسی کنید که آیا طول نام شی از مقدار مشخص شده در عنصر <ObjectEntryNameLength> (در مرحله 2 مشخص شده) بیشتر است. اگر طول نام شیء از آن عدد بیشتر شود، این دلیل خطا است.

    در اینجا یک نمونه بار ورودی آورده شده است:

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

    محموله JSON نشان داده شده در بالا دارای یک ویژگی به نام number در خط 2 است که دارای 6 کاراکتر است (طول نام 6 است). از آنجایی که طول نام شی بزرگتر از 5 است (مقدار مشخص شده برای عنصر <ObjectEntryNameLength> ) با خطای زیر مواجه می شوید:

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

قطعنامه

اگر خط مشی JSONThreatProtection برای محافظت در برابر بارهای با نام ورودی اشیاء بیش از مقدار تعریف شده باشد، پیام خطا انتظار می رود. در این صورت نیازی به اقدام اضافی نیست.

با این حال، اگر تشخیص دادید که نام‌های ورودی شی طولانی‌تر را می‌توان بدون هیچ پیامدی در بار مشخص کرد، سپس <ObjectEntryNameLength> را به یک مقدار مناسب بر اساس نیاز خود تغییر دهید.

برای مثال، اگر فکر می‌کنید می‌توانید نام اشیاء را تا 10 کاراکتر مجاز کنید، سیاست JSONThreatProtection را به صورت زیر تغییر دهید:

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

از تعداد ورودی شی بیشتر شد

بدنه پاسخ به خطا

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

مثال بدنه پاسخ به خطا

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

علت

این خطا در صورتی رخ می دهد که بار پیام ورودی مشخص شده توسط عنصر <Source> حاوی یک شی JSON باشد که دارای ورودی ها (خواص) بیشتری نسبت به مقدار مشخص شده در عنصر <ObjectEntryCount> خط مشی باشد.

به عنوان مثال، اگر عنصر <ObjectEntryCount> 5 باشد، اما ورودی JSON payload بیش از 5 ورودی داشته باشد، این خطا پرتاب می شود.

تشخیص

  1. پیام خطا را برای شناسایی نام خط مشی JSONThreatProtection و شماره خطی که در آن تعداد ورودی بیش از حد مجاز است، بررسی کنید. به عنوان مثال، در پیام خطای زیر، نام خط مشی JSON-Threat-Protection-1 و شماره خط در payload 7 است:

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded object entry count
    at line 7
    
  2. مقدار مشخص شده در عنصر <ObjectEntryCount> خط مشی (که در مرحله 1 مشخص شده است) را یادداشت کنید.

    در مثال سیاست زیر، <ObjectEntryCount> روی 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. شماره خط خاص (مشخص شده در مرحله 1) بار ورودی را بررسی کنید و بررسی کنید که آیا تعداد موجودات موجود در محموله بیشتر از مقدار مشخص شده برای عنصر <ObjectEntryCount> (شناسایی شده در مرحله 2) است یا خیر. اگر تعداد اشیاء از تعداد ورودی اشیاء بیشتر شود، آنگاه علت خطا است.

    در اینجا یک نمونه بار ورودی آورده شده است:

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

    در محموله JSON نشان داده شده در بالا، ورودی ششم در خط شماره 7 (شرکت) رخ می دهد. از آنجایی که تعداد ورودی های شی در ورودی JSON payload بیشتر از 5 است (مقدار مشخص شده برای عنصر <ObjectEntryCount> ) با خطای زیر مواجه می شوید:

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

قطعنامه

اگر خط‌مشی JSONThreatProtection برای محافظت در برابر بارهای با تعدادی ورودی شی که از آستانه خاصی فراتر می‌رود، محافظت می‌کند، پیام خطا انتظار می‌رود. در این صورت نیازی به اقدام اضافی ندارید.

با این حال، اگر تشخیص دادید که ورودی‌های شی بیشتری را می‌توان بدون هیچ پیامدی در payload گنجاند، سپس <ObjectEntryCount> را به یک مقدار مناسب بر اساس نیاز خود تغییر دهید.

به عنوان مثال، اگر فکر می کنید می توانید حداکثر 10 ورودی شی را مجاز کنید، سیاست JSONThreatProtection را به صورت زیر تغییر دهید:

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

از تعداد عناصر آرایه فراتر رفت

بدنه پاسخ به خطا

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

مثال بدنه پاسخ به خطا

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

علت

اگر بار پیام ورودی مشخص شده توسط عنصر <Source> دارای یک آرایه JSON با تعداد عناصر بیشتر از تعداد مشخص شده در عنصر <ArrayElementCount> خط مشی باشد، این خطا رخ می دهد.

به عنوان مثال، اگر عنصر <ArrayElementCount> به عنوان 3 مشخص شود، اما payload ورودی دارای یک آرایه JSON با بیش از 3 عنصر باشد، این خطا پرتاب می شود.

تشخیص

  1. پیام خطا را برای شناسایی نام خط مشی و شماره خطی که در آن طول آرایه بیشتر شده است، بررسی کنید. به عنوان مثال، در پیام خطای زیر، نام خط مشی JSON-Threat-Protection-1 و شماره خط در payload 3 است:

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded array element count at line 3
    
  2. مقدار مشخص شده برای عنصر <ArrayElementCount> سیاست (در مرحله 1 مشخص شده) را یادداشت کنید.

    در مثال سیاست JSONThreatProtection زیر، <ArrayElementCount> روی 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. شماره خط خاص (که در مرحله 1 مشخص شده است) بار ورودی ورودی را بررسی کنید و بررسی کنید که آیا آرایه مشخص شده در آنجا دارای تعداد بیشتری نسبت به عدد مشخص شده در عنصر <ArrayElementCount> (شناسایی شده در مرحله 2) است. اگر تعداد عناصر آرایه بیشتر از تعداد باشد، این دلیل خطا است.

    در اینجا یک نمونه بار ورودی آورده شده است:

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

    JSON Payload نشان داده شده در بالا دارای 5 عنصر در آرایه به نام models در خط 3 است. از آنجا که تعداد عناصر آرایه بیشتر از 3 است (مقدار مشخص شده برای عنصر <ArrayElementCount> ) با خطای زیر مواجه می‌شوید:

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

قطعنامه

اگر خط مشی JSONThreatProtection به منظور محافظت در برابر بارهای با آستانه شمارش آرایه خاص باشد، پیام خطا مورد انتظار است. در این صورت نیازی به اقدام اضافی نیست.

با این حال، اگر تشخیص دادید که تعداد بیشتری از عناصر در یک آرایه می‌تواند مجاز باشد، <ArrayElementCount> را به یک مقدار مناسب بر اساس نیاز خود تغییر دهید.

به عنوان مثال، اگر فکر می کنید می توانید حداکثر 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>5</ArrayElementCount>
    <ContainerDepth>12</ContainerDepth>
    <ObjectEntryCount>5</ObjectEntryCount>
    <ObjectEntryNameLength>6</ObjectEntryNameLength>
    <Source>request</Source>
    <StringValueLength>50</StringValueLength>
</JSONThreatProtection>

بیش از عمق ظرف

بدنه پاسخ به خطا

ترافیک Runtime کد پاسخ 500 را با خطای زیر برمی گرداند:

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

مثال بدنه پاسخ به خطا

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

علت

این خطا در صورتی رخ می دهد که بار پیام ورودی مشخص شده توسط عنصر <Source> حاوی یک شی JSON باشد که حاوی عناصر JSON با عمق محفظه ای باشد که از حداکثر عمق ظرف مشخص شده در عنصر <ContainerDepth> خط مشی بیشتر باشد. عمق ظرف حداکثر عمق مجاز تو در تو برای عناصر JSON است. به عنوان مثال، آرایه ای حاوی یک شی که حاوی یک شی است منجر به عمق محفظه 3 می شود.

به عنوان مثال، اگر عنصر <ContainerDepth> 3 باشد، اما محموله ورودی دارای عمق محفظه ای باشد که از این حد بیشتر باشد، آنگاه این خطا پرتاب می شود.

تشخیص

  1. پیام خطا را برای شناسایی نام خط مشی JSONThreatProtection و شماره خطی که در آن از عمق کانتینر فراتر رفته است، بررسی کنید. به عنوان مثال، در پیغام خطای زیر، نام خط مشی JSON-Threat-Protection-1 و شماره خط در payload 5 است.

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded container depth at
    line 5
    
  2. مقدار مشخص شده برای عنصر <ContainerDepth> (که در مرحله 1 مشخص شده است) را یادداشت کنید.

    در مثال خط مشی JSONThreatProtection زیر، <ContainerDepth> روی 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. شماره خط خاص (مشخص شده در مرحله 1) محموله ورودی را بررسی کنید و بررسی کنید که آیا عمق کانتینر در محموله بیشتر از مقدار مشخص شده در عنصر <ContainerDepth> (شناسایی شده در مرحله 2) است. اگر عمق ظرف بیشتر از تعداد باشد، دلیل خطا همین است.

    در اینجا یک نمونه بار ورودی آورده شده است:

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

    محموله JSON نشان داده شده در بالا دارای عمق کانتینر 6 در خط 5 است. از آنجایی که عمق بیشتر از 5 است، مقدار مشخص شده برای عنصر <ContainerDepth> خط مشی JSONThreatProtection، خطای زیر را دریافت می کنید:

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

قطعنامه

اگر خط‌مشی JSONThreatProtection برای محافظت در برابر محموله‌هایی با عمق کانتینر بیش از مقدار مشخص شده باشد، پیام خطا مورد انتظار است. در این صورت نیازی به اقدام اضافی نیست.

با این حال، اگر تشخیص دادید که عمق کانتینر بالاتر قابل قبول است، <ContainerDepth> را به مقدار مناسب بر اساس نیاز خود تغییر دهید.

به عنوان مثال، اگر فکر می کنید می توانید عمق کانتینر را تا 10 مجاز کنید، خط مشی را به صورت زیر تغییر دهید:

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

از طول مقدار رشته بیشتر شد

بدنه پاسخ به خطا

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

مثال بدنه پاسخ به خطا

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

علت

این خطا در صورتی رخ می دهد که بار پیام ورودی مشخص شده توسط عنصر <Source> حاوی عناصر JSON باشد که دارای مقادیری با کاراکترهای بیشتر از مقدار مجاز عنصر <StringValueLength> باشد.

برای مثال، اگر عنصر <StringValueLength> در خط مشی روی 50 تنظیم شده باشد، اما بار ورودی دارای یک یا چند عنصر باشد که مقادیر آنها بیش از 50 کاراکتر داشته باشد، این خطا پرتاب می شود.

تشخیص

  1. پیام خطا را بررسی کنید تا نام خط مشی و شماره خطی را که از طول رشته بیشتر شده است شناسایی کنید. در مثال زیر، نام خط مشی JSON-Threat-Protection-1 and خط در محموله 3 است.

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded string value length at line 3
    
  2. مقدار مشخص شده برای عنصر <StringValueLength> را در (مشخص شده در مرحله 1) یادداشت کنید.

    در مثال خط مشی JSONThreatProtection زیر، <StringValueLength> روی 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. شماره خط خاص (مشخص شده در مرحله 1) بار ورودی را بررسی کنید و بررسی کنید که آیا طول مقدار از تعداد کاراکترهای مشخص شده برای عنصر <StringValueLength> (در مرحله 2 مشخص شده) بیشتر است. اگر طول مقدار بیش از حد باشد، دلیل خطا همین است.

    در اینجا یک نمونه بار ورودی آورده شده است:

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

    JSON Payload نشان داده شده در بالا دارای یک شی به نام Place Name است که مقدار آن Taumatawhakatangihangakoauauotamateaturipukakapikimaungahoronukupokaiwhenuakitanatahu دارای 85 کاراکتر در خط 3 است. از آنجایی که طول مقدار بزرگتر از 50 است، مقدار مشخص شده در عنصر <StringValueLength> زیر را دریافت می کنید:

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

قطعنامه

اگر خط‌مشی JSONThreatProtection برای محافظت در برابر بارهای با مقادیر بیش از طول رشته خاصی طراحی شده است، پیام خطا مورد انتظار است. در این صورت نیازی به اقدام اضافی نیست.

با این حال، اگر تعیین کردید که طول مقدار بیشتری را می توان در بار مشخص کرد، سپس <StringValueLength> را به مقدار مناسب بر اساس نیاز خود تغییر دهید.

به عنوان مثال، اگر فکر می‌کنید می‌توانید یک مقدار تا طول 90 را مجاز کنید، سیاست را به صورت زیر تغییر دهید:

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

شی JSON معتبر نیست

بدنه پاسخ به خطا

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

مثال بدنه پاسخ به خطا

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

علت

اگر بار پیام ورودی مشخص شده توسط عنصر <Source> در خط مشی JSONThreatProtection یک شیء JSON معتبر نباشد، این خطا رخ می دهد.

تشخیص

  1. برای شناسایی نام خط مشی و شماره خطی که خطا در آن رخ داده است، پیام خطا را بررسی کنید. در مثال زیر، نام خط مشی JSON-Threat-Protection-1 and خط در بارگذاری 2 است.

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason: Expecting : at line 3
    
  2. شماره خط خاص (که در مرحله 1 مشخص شده است) بار ورودی را بررسی کنید و بررسی کنید که آیا شی JSON که در بار ارسال شده است واقعاً یک شی JSON معتبر است.

    در اینجا یک نمونه بار ورودی آورده شده است:

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

    در محموله JSON نشان داده شده در بالا، خط 3 ":" (دونقطه) ندارد. از آنجایی که یک شی JSON معتبر نیست، با این خطا مواجه می شوید:

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

قطعنامه

اطمینان حاصل کنید که یک بار ورودی معتبر JSON به هر پروکسی API که شامل خط‌مشی JSONThreatProtection است ارسال می‌شود.

برای مثالی که در بالا توضیح داده شد، بار JSON را به صورت زیر تغییر دهید:

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

منبع در دسترس نیست

کد خطا

steps.jsonthreatprotection.SourceUnavailable

بدنه پاسخ به خطا

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

مثال بدنه پاسخ به خطا

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

علت

این خطا در صورتی رخ می دهد که متغیر پیام مشخص شده در عنصر <Source> خط مشی JSONThreatProtection یکی از این موارد باشد:

  • خارج از محدوده (در جریان خاصی که سیاست در آن اجرا می شود موجود نیست)
  • یکی از مقادیر معتبر request ، response یا message نیست

به عنوان مثال، اگر عنصر <Source> در خط مشی روی متغیری تنظیم شود که در جریانی که سیاست اجرا می شود وجود نداشته باشد، این خطا رخ می دهد.

تشخیص

  1. نام خط مشی و نام متغیر Source را از پیام خطا شناسایی کنید. به عنوان مثال، در پیغام خطای زیر، نام خط مشی JSON-Threat-Protection-1 و متغیر Source requests است:

    JSONThreatProtection[JSON-Threat-Protection-1]:: Source requests is not available
    
  2. مقدار مشخص شده برای عنصر <Source> شناسایی شده در مرحله 1 را بررسی کنید.

    در مثال خط مشی JSONThreatProtection زیر، عنصر <Source> روی 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>
    

    مقادیر معتبر عنصر <Source> عبارتند از request ، response یا message . از آنجایی که درخواست ها یک مقدار معتبر نیست و در جریانی که خط مشی اجرا می شود وجود ندارد، با این خطا مواجه می شوید:

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

قطعنامه

اطمینان حاصل کنید که مجموعه متغیر در عنصر <Source> خط مشی JSONThreatProtection ناموفق روی request ، response یا message تنظیم شده است و در جریانی که خط مشی اجرا می شود وجود دارد.

برای تصحیح مثال سیاست JSONThreatProtection نشان داده شده در بالا، می توانید عنصر <Source> را برای استفاده از متغیر request تغییر دهید، زیرا در جریان درخواست وجود دارد:

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

کد خطا

steps.jsonthreatprotection.NonMessageVariable

بدنه پاسخ به خطا

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

مثال بدنه پاسخ به خطا

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

علت

اگر عنصر <Source> در خط مشی JSONThreatProtection روی متغیری تنظیم شود که از نوع پیام نیست، این خطا رخ می دهد.

متغیرهای نوع پیام، کل درخواست‌ها و پاسخ‌های HTTP را نشان می‌دهند. متغیرهای جریان داخلی Apigee Edge درخواست، پاسخ و پیام از نوع پیام هستند. برای کسب اطلاعات بیشتر در مورد متغیرهای پیام، به مرجع متغیرها مراجعه کنید.

تشخیص

  1. نام خط مشی JSONThreatProtection و نام متغیر Source را از پیام خطا شناسایی کنید. به عنوان مثال، در پیام خطای زیر، نام خط مشی JSON-Threat-Protection-1 و متغیر Source message.content است:

    JSONThreatProtection[JSON-Threat-Protection-1]: Variable message.content does not resolve to a Message
    
  2. عنصر <Source> خط مشی JSONThreatProtection (در مرحله 1 مشخص شده) را بررسی کنید.

    در مثال خط مشی JSONThreatProtection زیر، <Source> به جای message روی message.content تنظیم شده است:

    <?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 از نوع message نیست، با این خطا مواجه می شوید:

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

قطعنامه

اطمینان حاصل کنید که عنصر <Source> در خط مشی ناموفق JSONThreatProtection روی متغیر جریان نوع پیام تنظیم شده است که در جریانی که خط مشی اجرا می شود وجود دارد.

برای تصحیح خط مشی، می توانید عنصر <Source> را تغییر دهید تا متغیری از نوع پیام را مشخص کنید. به عنوان مثال، در JSONThreatProtection ناموفق، می توانید عنصر <Source> را به عنوان 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>