JSON হুমকি সুরক্ষা রানটাইম ত্রুটি সমস্যা সমাধান

আপনি Apigee Edge-এর ডকুমেন্টেশন দেখছেন।
Apigee X ডকুমেন্টেশন
.info- তে যান।

এক্সিকিউশন ব্যর্থ হয়েছে

ত্রুটি কোড

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> এলিমেন্টের মান 5 হয়, কিন্তু ইনপুট JSON পেলোডে 5টির বেশি এন্ট্রি থাকে, তাহলে এই এররটি দেখানো হয়।

রোগ নির্ণয়

  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 পেলোডে, ৬ষ্ঠ এন্ট্রিটি ৭ নং লাইনে (company) রয়েছে। যেহেতু ইনপুট 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 হিসাবে নির্দিষ্ট করা হয়, কিন্তু ইনপুট পেলোডে 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>

কন্টেইনারের গভীরতা অতিক্রম করেছে

ত্রুটিপূর্ণ প্রতিক্রিয়া বডি

রানটাইম ট্র্যাফিক নিম্নলিখিত ত্রুটি সহ একটি 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 এলিমেন্টগুলোর জন্য অনুমোদিত সর্বোচ্চ নেস্টেড ডেপথ। উদাহরণস্বরূপ, একটি অ্যারের মধ্যে যদি এমন একটি অবজেক্ট থাকে যার মধ্যে আবার আরেকটি অবজেক্ট রয়েছে, তাহলে তার কন্টেইনমেন্ট ডেপথ হবে ৩।

উদাহরণস্বরূপ, যদি <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 পেলোডের ৫ নং লাইনে কন্টেইনার ডেপথ ৬ দেওয়া আছে। যেহেতু ডেপথ ৫-এর চেয়ে বেশি, যা JSONThreatProtection পলিসির <ContainerDepth> এলিমেন্টের জন্য নির্দিষ্ট করা মান, তাই আপনি নিম্নলিখিত এররটি পাচ্ছেন:

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

কারণ

JSONThreatProtection পলিসির <Source> এলিমেন্ট দ্বারা নির্দিষ্ট ইনপুট মেসেজ পেলোডটি যদি একটি বৈধ 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
    

সমাধান

যেসব এপিআই প্রক্সিতে JSONThreatProtection পলিসি অন্তর্ভুক্ত রয়েছে, সেগুলোতে একটি বৈধ ইনপুট JSON পেলোড পাঠানো নিশ্চিত করুন।

উপরে বর্ণিত উদাহরণটির জন্য, 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"
        }
    }
}

কারণ

JSONThreatProtection পলিসির <Source> এলিমেন্টে নির্দিষ্ট করা message ভেরিয়েবলটি যদি নিম্নলিখিতগুলির মধ্যে কোনো একটি হয়, তাহলে এই ত্রুটিটি ঘটে:

  • আওতার বাইরে (যে নির্দিষ্ট কার্যপ্রবাহে নীতিমালাটি কার্যকর করা হচ্ছে, সেখানে উপলব্ধ নয়)
  • 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 । যেহেতু requests একটি বৈধ ভ্যালু নয় এবং যে ফ্লো-তে পলিসিটি এক্সিকিউট করা হচ্ছে সেখানে এটি বিদ্যমান নেই, তাই আপনি এই এররটি পাচ্ছেন:

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

সমাধান

নিশ্চিত করুন যে ব্যর্থ JSONThreatProtection পলিসির <Source> এলিমেন্টে সেট করা ভেরিয়েবলটি 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>

ননমেসেজভেরিয়েবল

ত্রুটি কোড

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

কারণ

এই ত্রুটিটি ঘটে যদি JSONThreatProtection পলিসির <Source> এলিমেন্টটি এমন কোনো ভেরিয়েবলে সেট করা হয়, যার টাইপ message নয়।

মেসেজ টাইপ ভেরিয়েবলগুলো সম্পূর্ণ HTTP অনুরোধ এবং প্রতিক্রিয়া উপস্থাপন করে। Apigee Edge-এর বিল্ট-ইন ফ্লো ভেরিয়েবল request, response, এবং message হলো message টাইপের। মেসেজ ভেরিয়েবল সম্পর্কে আরও জানতে, ভেরিয়েবল রেফারেন্স দেখুন।

রোগ নির্ণয়

  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. (ধাপ ১-এ চিহ্নিত) JSONThreatProtection পলিসির <Source> এলিমেন্টটি পরীক্ষা করুন।

    নিম্নলিখিত 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
    

সমাধান

নিশ্চিত করুন যে ব্যর্থ JSONThreatProtection পলিসির <Source> এলিমেন্টটি এমন একটি মেসেজ টাইপ ফ্লো ভেরিয়েবলে সেট করা আছে, যা পলিসিটি যে ফ্লোতে এক্সিকিউট হয় সেখানে বিদ্যমান।

পলিসিটি সংশোধন করতে, আপনি <Source> এলিমেন্টটি পরিবর্তন করে message টাইপের একটি ভ্যারিয়েবল নির্দিষ্ট করতে পারেন। উদাহরণস্বরূপ, ব্যর্থ হওয়া 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>