عیب‌یابی خطای زمان اجرای «محافظت دربرابر تهدید JSON»

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

ExecutionFailed

کد خطا

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 نامعتبر است.

طول نام ورودی شیء از حد مجاز فراتر رفته است

متن پاسخ خطا

{
    "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> در خط‌مشی به‌عنوان ۵ مشخص شده باشد، اما پایه‌بار پیام ورودی دارای دارایی JSON باشد که نام آن از ۵ نویسه بیشتر باشد، این خطا ایجاد می‌شود.

تشخیص

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

    JSONThreatProtection[JSON-Threat-Protection-1]: Execution failed. reason:
    JSONThreatProtection[JSON-Threat-Protection-1]: Exceeded object entry name
    length at line 2
    
  2. خط‌مشی‌ای را که در «مرحله ۱» شناسایی کردید بررسی کنید و مقدار مشخص‌شده در عنصر <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. شماره خط خاص (شناسایی‌شده در مرحله ۱) بار مفید ورودی را بررسی کنید و ببینید آیا طول نام شیء از مقدار مشخص‌شده در عنصر <ObjectEntryNameLength> (شناسایی‌شده در مرحله ۲) بیشتر است یا نه. اگر طول نام شیء از این تعداد بیشتر باشد، دلیل خطا همین است.

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

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

    پایه‌بار JSON نشان‌داده‌شده در بالا دارای دارایی‌ای به‌نام number در خط ۲ است که ۶ نویسه دارد (طول نام ۶ است). ازآنجایی‌که طول نام شیء بیشتر از ۵ است (مقدار مشخص‌شده برای عنصر <ObjectEntryNameLength>)، خطای زیر را دریافت می‌کنید:

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

وضوح

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

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

برای مثال، اگر فکر می‌کنید می‌توانید نام‌های شیء را تا طول ۱۰ نویسه مجاز کنید، خط‌مشی 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>عنصر ۵ باشد، اما بار JSON ورودی بیش‌از ۵ ورودی داشته باشد، این خطا ایجاد می‌شود.

تشخیص

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

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

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

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

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

    در بار JSON که در بالا نشان داده شده است، ششمین ورودی در خط شماره ۷ (شرکت) رخ می‌دهد. ازآنجایی‌که تعداد ورودی‌های شیء در پایه‌بار JSON ورودی بیشتر از ۵ است (مقدار مشخص‌شده برای عنصر <ObjectEntryCount>)، خطای زیر را دریافت می‌کنید:

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

وضوح

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

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

برای مثال، اگر فکر می‌کنید می‌توانید تا ۱۰ ورودی شیء را مجاز کنید، خط‌مشی 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 مشخص شده باشد، اما پایه‌بار ورودی آرایه JSON با بیش‌از ۳ عنصر داشته باشد، این خطا ایجاد می‌شود.

تشخیص

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

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

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

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

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

    «پایه‌بار JSON» نشان‌داده‌شده در بالا ۵ عنصر در آرایه به‌نام models در خط ۳ دارد. چون تعداد عناصر آرایه بیشتر از ۳ است (مقدار مشخص‌شده برای عنصر <ArrayElementCount>)، خطای زیر را دریافت می‌کنید:

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

وضوح

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

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

برای مثال، اگر فکر می‌کنید می‌توانید حداکثر ۵ عنصر آرایه را مجاز کنید، خط‌مشی را به‌صورت زیر اصلاح کنید:

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

از عمق محتوی فراتر رفت

متن پاسخ خطا

ترافیک زمان اجرا کد پاسخ ۵۰۰ را با خطای زیر برمی‌گرداند:

{
    "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 است. برای مثال، آرایه‌ای که حاوی شیئی است که حاوی شیئی دیگر است منجر به عمق مهار ۳ می‌شود.

برای مثال، اگر عنصر <ContainerDepth> 3 باشد، اما عمق محتوی ورودی از این حد مجاز فراتر رود، این خطا ایجاد می‌شود.

تشخیص

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

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

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

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

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

    پایه‌بار JSON نشان‌داده‌شده در بالا در خط ۵ دارای عمق ۶ دربرگیرنده است. ازآنجایی‌که عمق بزرگ‌تر از ۵ است، مقدار مشخص‌شده برای عنصر <ContainerDepth> از خط‌مشی JSONThreatProtection خطای زیر را دریافت می‌کنید:

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

وضوح

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

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

برای مثال، اگر فکر می‌کنید می‌توانید عمق ظرف را تا ۱۰ مجاز کنید، خط‌مشی را به‌صورت زیر اصلاح کنید:

<?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 تنظیم شده باشد، اما بار ورودی یک یا چند عنصری داشته باشد که مقادیر آن‌ها بیش‌از ۵۰ نویسه داشته باشد، این خطا ایجاد می‌شود.

تشخیص

  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> را (که در «مرحله ۱» شناسایی شده است) یادداشت کنید.

    در مثال خط‌مشی 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. شماره خط خاص (شناسایی‌شده در «مرحله ۱») بار مفید ورودی را بررسی کنید و ببینید آیا طول مقدار از تعداد نویسه‌های مشخص‌شده برای عنصر <StringValueLength> (شناسایی‌شده در «مرحله ۲») بیشتر است یا نه. اگر طول مقدار از حد مجاز بیشتر باشد، این دلیل خطا است.

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

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

    «پایه‌بار JSON» نشان‌داده‌شده در بالا شیئی به‌نام Place Name دارد که مقدار آن Taumatawhakatangihangakoauauotamateaturipukakapikimaungahoronukupokaiwhenuakitanatahu در خط ۳ دارای ۸۵ نویسه است. ازآنجایی‌که طول مقدار از ۵۰ بیشتر است، مقدار مشخص‌شده در عنصر <StringValueLength>، خطای زیر را دریافت می‌کنید:

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

وضوح

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

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

برای مثال، اگر فکر می‌کنید می‌توانید مقداری را تا طول ۹۰ مجاز کنید، خط‌مشی را به‌صورت زیر اصلاح کنید:

<?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. شماره خط خاص (شناسایی‌شده در مرحله ۱) پایه‌بار ورودی را بررسی کنید و ببینید آیا شیء JSON که در پایه‌بار ارسال شده است واقعاً شیء JSON معتبری است یا نه.

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

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

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

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

وضوح

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

برای مثال شرح‌داده‌شده در بالا، پایه‌بار JSON را به‌صورت زیر اصلاح کنید:

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

SourceUnavailable

کد خطا

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. نام خط‌مشی و نام متغیر «منبع» را از پیام خطا شناسایی کنید. برای مثال، در پیام خطای زیر، نام خط‌مشی JSON-Threat-Protection-1 و متغیر «منبع» requests است:

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

    در مثال خط‌مشی 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 و نام متغیر «منبع» را از پیام خطا شناسایی کنید. برای مثال، در پیام خطای زیر، نام خط‌مشی JSON-Threat-Protection-1 و متغیر «منبع» message.content است:

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

    در مثال خط‌مشی 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 از نوع پیام نیست، این خطا را دریافت می‌کنید:

    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>