মেসেজ নীতি অ্যাসাইন করার সময় হওয়া সমস্যার সমাধান করা

আপনি Apigee Edge ডকুমেন্টেশন দেখছেন।
Apigee X ডকুমেন্টেশন দেখুন।
তথ্য

InvalidIndex

সমস্যা সংক্রান্ত মেসেজ

Edge UI বা Edge ম্যানেজমেন্ট API-এর মাধ্যমে API প্রক্সি ডেপ্লয়মেন্ট এই সমস্যার মেসেজ সহ ব্যর্থ হয়:

Error in deployment for environment [environment]
The revision is deployed, but traffic cannot flow.
AssignMessage[policy_name]: index must be greater than zero in [attribute].[index]

সমস্যার মেসেজের উদাহরণ

Error in deployment for environment test.
The revision is deployed, but traffic cannot flow.
AssignMessage[GenerateStudentsRequest]: index must be greater than zero in id.0

স্ক্রিনশটের উদাহরণ

কারণ

Assign Message নীতির <Copy> এবং/অথবা <Remove> এলিমেন্টে নির্দিষ্ট করা ইন্ডেক্স ০ বা কোনও নেগেটিভ সংখ্যা হলে, API প্রক্সি ডেপ্লয় করা যায় না।

যেমন, আপনি একই নামের একাধিক কোয়েরি প্যারামিটার পাস করলে, আপনি Edge-এ ইন্ডেক্স করা ফ্লো ভেরিয়েবল হিসেবে সেগুলি অ্যাক্সেস করতে পারবেন। ধরা যাক, আপনি ৩ জন শিক্ষার্থীর আইডি কোয়েরি প্যারামিটার হিসেবে পাস করতে চান, তাহলে আপনি এটি নিম্নলিখিতভাবে করতে পারেন:

https://myorg-test.apigee.net/v1/basepath?school_name=NPS&id=1&id=2&id=3

তারপর, ধরুন আপনি Assign Message নীতিতে নিম্নলিখিত উপায়ে ইন্ডেক্স নম্বর ০, ১ ও ২ সহ এইসব কোয়েরি প্যারামিটার অ্যাক্সেস করার চেষ্টা করছেন:

id.0
id.1 and
id.2

এই ক্ষেত্রে, প্রক্সি ডেপ্লয় করা যায় না কারণ ইন্ডেক্স ১ দিয়ে শুরু হতে হবে। এর অর্থ হল, আপনি প্রথম কোয়েরি প্যারামিটার "id=1"-কে "id.1" হিসেবে অ্যাক্সেস করতে পারবেন। দ্বিতীয় কোয়েরি প্যারামিটার "id=2" অ্যাক্সেস করতে, আপনাকে ইন্ডেক্স ২ অর্থাৎ "id.2" ব্যবহার করতে হবে। একইভাবে, তৃতীয় কোয়েরি প্যারামিটার "id=3" অ্যাক্সেস করতে, আপনি "id.3" ব্যবহার করতে পারবেন।

আপনি এখানে আরও তথ্য খুঁজে পেতে পারেন।

ডায়াগনসিস

  1. যেখানে সমস্যা হয়েছে সেই Assign Message নীতি, অ্যাট্রিবিউটের নাম ও ভুল ইন্ডেক্স শনাক্ত করুন। আপনি সমস্যার মেসেজে এই সমস্ত আইটেম দেখতে পাবেন। যেমন, নিচের এই সমস্যার ক্ষেত্রে, নীতির নাম হল GeneratingGeocodingRequest, অ্যাট্রিবিউটের নাম হল id এবং ইন্ডেক্স হল 0:

    AssignMessage[GenerateStudentsRequest]: index must be greater than zero in id.0
    
  2. 'অ্যাসাইন মেসেজ' নীতি XML-এ ব্যবহৃত অ্যাট্রিবিউটের নাম ও ইন্ডেক্স, সমস্যার মেসেজে (উপরে #১ ধাপ) শনাক্ত করা অ্যাট্রিবিউটের নাম ও ইন্ডেক্সের সাথে মিলছে কিনা তা যাচাই করুন। যেমন, নিম্নলিখিত নীতিতে অ্যাট্রিবিউট id এবং ইন্ডেক্স 0 হিসেবে নির্দিষ্ট করা হয়েছে, যা সমস্যার মেসেজে দেখানো তথ্যের সাথে মিলে যায়:

    <AssignMessage name="GenerateStudentsRequest">
      <AssignTo createNew="true" type="request">StudentsInfoRequest</AssignTo>
      <Copy source="request">
          <QueryParams>
              <QueryParam name="school_name"/>
              <QueryParam name="id.0"/>
              <QueryParam name="id.1"/>
              <QueryParam name="id.2"/>
          </QueryParams>
      </Copy>
    </AssignMessage>
  3. উল্লিখিত ইন্ডেক্স ০ বা নেগেটিভ সংখ্যা হলে, এটিই সমস্যার কারণ।

    উপরে দেখানো Assign Message নীতিতে, আপনি ইন্ডেক্স ০ ব্যবহার করে কোয়েরি প্যারামিটার "id"-এর প্রথম ভ্যালু অ্যাক্সেস করার চেষ্টা করছেন। তাই, API Proxy-এর ডিপ্লয়মেন্ট এই সমস্যার কারণে ব্যর্থ হয়:

    AssignMessage[GenerateStudentsRequest]: index must be greater than zero in id.0
    

রেজোলিউশন

অ্যাসাইন মেসেজে, একই নাম শেয়ার করে এমন একাধিক হেডার, কোয়েরি প্যারামিটার বা অন্যান্য প্যারামিটার অ্যাক্সেস করার সময়, নিশ্চিত করুন যে ইন্ডেক্স সবসময় শূন্যের থেকে বড়। যেমন:

<AssignMessage name="GenerateStudentsRequest">
    <AssignTo createNew="true" type="request">StudentsInfoRequest</AssignTo>
    <Copy source="request">
        <QueryParams>
            <QueryParam name="school_name"/>
            <QueryParam name="id.1"/>
            <QueryParam name="id.2"/>
            <QueryParam name="id.3"/>
        </QueryParams>
    </Copy>
</AssignMessage>

InvalidVariableName

সমস্যা সংক্রান্ত মেসেজ

Edge UI বা Edge ম্যানেজমেন্ট API-এর মাধ্যমে API প্রক্সি ডেপ্লয়মেন্ট এই সমস্যার মেসেজ সহ ব্যর্থ হয়:

Error Saving Revision [revision_number]
The revision is deployed, but traffic cannot flow. AssignMessage schema validation failed: invalid variable name - null - in assign variable.

সমস্যার মেসেজের উদাহরণ

Error Saving Revision 3
AssignMessage schema validation failed: invalid variable name - null - in assign variable.

স্ক্রিনশটের উদাহরণ

কারণ

<AssignVariable> এলিমেন্টে চাইল্ড এলিমেন্ট <Name> খালি থাকলে বা নির্দিষ্ট করা না থাকলে, API প্রক্সি ডেপ্লয় করা যায় না, কারণ কোনও ভ্যালু অ্যাসাইন করার জন্য কোনও সঠিক ভেরিয়েবলের নাম নেই। ভেরিয়েবলের সঠিক নাম লিখতে হবে।

ডায়াগনসিস

যেখানে সমস্যা হয়েছে সেই নির্দিষ্ট API প্রক্সিতে অ্যাসাইন মেসেজ সংক্রান্ত সব নীতি পরীক্ষা করুন। Assign Message নীতিতে যদি এমন কোনও চাইল্ড এলিমেন্ট <Name> থাকে যা খালি অথবা <AssignVariable> এলিমেন্টে নির্দিষ্ট করা না থাকে, তাহলে সেটিই হল সমস্যার কারণ।

উদাহরণ ১: নিম্নলিখিত Assign Message নীতিতে কোনও <Name> এলিমেন্ট সংজ্ঞায়িত করা নেই।

<AssignMessage async="false" continueOnError="false" enabled="true" name="Assign-Message-1">
    <DisplayName>Assign Message-1</DisplayName>
    <Properties/>
    <AssignVariable>
        <Value>abcd1234</Value>
    </AssignVariable>
    <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
    <AssignTo createNew="true" transport="http" type="request">googleBookReq</AssignTo>
</AssignMessage>

উদাহরণ ২: নিচে উল্লেখ করা অ্যাসাইন মেসেজ নীতিতে একটি খালি <Name> এলিমেন্ট আছে।

<AssignMessage async="false" continueOnError="false" enabled="true" name="Assign-Message-1">
    <DisplayName>Assign Message-1</DisplayName>
    <Properties/>
    <AssignVariable>
        <Name></Name>
        <Value>abcd1234</Value>
    </AssignVariable>
    <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
    <AssignTo createNew="true" transport="http" type="request">googleBookReq</AssignTo>
</AssignMessage>

রেজোলিউশন

নিশ্চিত করুন যে Assign Message নীতির <AssignVariable> এলিমেন্টের মধ্যে চাইল্ড এলিমেন্ট <Name> সবসময় নির্দিষ্ট করা আছে এবং খালি নেই। যেমন:

<AssignMessage async="false" continueOnError="false" enabled="true" name="Assign-Message-1">
    <DisplayName>Assign Message-1</DisplayName>
    <Properties/>
        <AssignVariable>
        <Name>appSecret</Name>
        <Value>abcd1234</Value>
    </AssignVariable>
    <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
    <AssignTo createNew="true" transport="http" type="request">googleBookReq</AssignTo>
</AssignMessage>