অ্যাসাইন করা মেসেজ রানটাইম সংক্রান্ত সমস্যার সমাধান করা

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

UnresolvedVariable

সমস্যার কোড

steps.assignmessage.UnresolvedVariable

সমস্যার উত্তরের বডি

{
    "fault": {
        "faultstring": "AssignMessage[policy_name]: unable to resolve variable [variable_name]",
        "detail": {
            "errorcode": "steps.assignmessage.UnresolvedVariable"
        }
    }
}

কারণ

অ্যাসাইন মেসেজ নীতিতে উল্লেখ করা কোনও ভেরিয়েবল যদি:

  • স্কোপের বাইরে (যে নির্দিষ্ট ফ্লোতে নীতি প্রয়োগ করা হচ্ছে সেখানে উপলভ্য নয়) অথবা
  • সমাধান করা যাচ্ছে না (সংজ্ঞায়িত করা হয়নি)

যেমন, অনুরোধ ফ্লোতে Assign Message নীতি এক্সিকিউট করা হলে, কিন্তু <Copy> এলিমেন্টে source অ্যাট্রিবিউট response বা error ভেরিয়েবল অথবা অনুরোধ ফ্লোতে নেই এমন কোনও কাস্টম ভেরিয়েবলে সেট করা থাকলে এই সমস্যা হয়।

ডায়াগনসিস

  1. যেখানে সমস্যা হয়েছে সেই Assign Message Policy এবং উপলভ্য নেই এমন ভেরিয়েবলের নাম চিহ্নিত করুন। আপনি সমস্যার উত্তরের faultstring এলিমেন্টে এই দুটি আইটেমই খুঁজে পাবেন।

    যেমন, নিম্নলিখিত faultstring-এ, নীতির নাম হল googleBook এবং ভেরিয়েবল হল var:

    "faultstring": "AssignMessage[googleBook]: unable to resolve variable var"
    
  2. অ্যাসাইন মেসেজ নীতি XML কাজ না করলে, ব্যবহৃত ভেরিয়েবলের নাম ফল্ট স্ট্রিংয়ে (উপরে #১ ধাপ) শনাক্ত করা ভেরিয়েবলের নামের সাথে মিলছে কিনা তা যাচাই করুন। যেমন, নিম্নলিখিত নীতিটি <Copy> এলিমেন্টে সোর্স অ্যাট্রিবিউটকে var নামের একটি ভেরিয়েবলে সেট করে, যা faultstring-এ থাকা ভ্যালুর সাথে ম্যাচ করে:

    <AssignMessage async="false" continueOnError="false" enabled="true" name="Assign-Message-1">
       <DisplayName>googleBook</DisplayName>
       <Properties />
       <Copy source="var">
          <Headers>
             <Header name="user-agent" />
          </Headers>
       </Copy>
       <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
       <AssignTo createNew="true" transport="http" type="request">googleBookReq</AssignTo>
    </AssignMessage>
    
  3. অ্যাসাইন মেসেজ নীতি যে ফ্লোতে এক্সিকিউট করা হচ্ছে সেখানে ভেরিয়েবলটি সংজ্ঞায়িত ও উপলভ্য আছে কিনা তা নির্ধারণ করুন।

  4. ভেরিয়েবলটি যদি এগুলির মধ্যে কোনও একটি হয়:

    1. স্কোপের বাইরে (যে নির্দিষ্ট ফ্লোতে নীতি প্রয়োগ করা হচ্ছে সেখানে উপলভ্য নয়) অথবা
    2. সমাধান করা যাচ্ছে না (সংজ্ঞায়িত করা হয়নি)

    তাহলে এটিই হল সমস্যার কারণ।

    উদাহরণস্বরূপ, ধরে নিন যে উপরে দেখানো Assign Message নীতিটি অনুরোধ ফ্লোতে এক্সিকিউট করা হয়েছে। অনুরোধ ফ্লোতে Assign Message নীতির আগে প্রয়োগ করা হয়েছে এমন কোনও নীতিতে ভেরিয়েবল var সংজ্ঞায়িত করা আছে কিনা তা চেক করুন। ভেরিয়েবলটি ডিফাইন করা না থাকলে, আপনি এই সমস্যার কোডটি পাবেন:

    steps.assignmessage.UnresolvedVariable
    

রেজোলিউশন

নীতিতে উল্লেখ করা ভেরিয়েবল আছে কিনা এবং অ্যাসাইন মেসেজ নীতি যেখানে প্রয়োগ করা হচ্ছে সেই নির্দিষ্ট ফ্লোতে উপলভ্য কিনা তা নিশ্চিত করুন।

উপরে দেখানো নীতির উদাহরণটি সংশোধন করতে, আপনি <Copy> এলিমেন্টে সোর্স অ্যাট্রিবিউট পরিবর্তন করে এটিকে অনুরোধের ভেরিয়েবল বা অনুরোধের ফ্লোতে থাকা মেসেজ টাইপের অন্য কোনও কাস্টম ভেরিয়েবল করতে পারেন।

<AssignMessage async="false" continueOnError="false" enabled="true" name="Assign-Message-1">
   <DisplayName>googleBook</DisplayName>
   <Properties />
   <Copy source="request">
      <Headers>
         <Header name="user-agent" />
      </Headers>
   </Copy>
   <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
   <AssignTo createNew="true" transport="http" type="request">googleBookReq</AssignTo>
</AssignMessage>

VariableOfNonMsgType

সমস্যার কোড

steps.assignmessage.VariableOfNonMsgType

সমস্যার উত্তরের বডি

{
    "fault": {
        "faultstring": "AssignMessage[policy_name]: value of variable [variable] is not of type Message",
        "detail": {
            "errorcode": "steps.assignmessage.VariableOfNonMsgType"
        }
    }
}

কারণ

<Copy> এলিমেন্টের source অ্যাট্রিবিউট এমন ভেরিয়েবলে সেট করা থাকলে এই সমস্যা হয় যা message টাইপের নয়।

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

ডায়াগনসিস

  1. যেখানে সমস্যা হয়েছে সেই Assign Message Policy এবং যে ভেরিয়েবলের ধরন ভুল আছে তার নাম শনাক্ত করুন। আপনি সমস্যার উত্তরের faultstring এলিমেন্টে এই দুটি আইটেমই খুঁজে পাবেন। যেমন, নিম্নলিখিত faultstring-এ, নীতির নাম হল GenerateGeocodingRequest এবং ভেরিয়েবল হল PostalCode:

    "faultstring": "AssignMessage[GenerateGeocodingRequest]: value of variable PostalCode is not of type Message"
    
  2. অ্যাসাইন মেসেজ নীতি XML কাজ না করলে, <Copy> এলিমেন্টে সেট করা ভেরিয়েবলের নাম ফল্ট স্ট্রিংয়ে (উপরে #১ ধাপ) শনাক্ত করা ভেরিয়েবলের নামের সাথে মিলছে কিনা তা যাচাই করুন। যেমন, নিম্নলিখিত নীতিটি PostalCode নামের একটি ভেরিয়েবলে সোর্স অ্যাট্রিবিউট সেট করে, যা faultstring-এর সাথে ম্যাচ করে:

    <AssignMessage name="GenerateGeocodingRequest">
       <AssignTo createNew="true" type="request">GeocodingRequest</AssignTo>
       <AssignVariable>
          <Name>PostalCode</Name>
          <Ref>request.queryparam.postalcode</Ref>
       </AssignVariable>
       <AssignVariable>
          <Name>Country</Name>
          <Ref>request.queryparam.country</Ref>
       </AssignVariable>
       <Copy source="PostalCode">
          <QueryParams>
             <QueryParam name="q" />
          </QueryParams>
       </Copy>
    </AssignMessage>
    
  3. এই ভেরিয়েবলটি মেসেজ ধরনের কিনা তা নির্ধারণ করুন:

    1. API প্রক্সি বান্ডেলের মধ্যে কোডটি খুঁজে বের করুন, যেখানে ভেরিয়েবলটি প্রথম সংজ্ঞায়িত করা হয়েছিল।
    2. যে নীতিতে ভেরিয়েবলটি প্রথম সংজ্ঞায়িত ও পপুলেট করা হয়েছে সেটি খুঁজে পাওয়ার পরে, আপনাকে নিম্নলিখিতভাবে সেই ভেরিয়েবলের ধরন নির্ধারণ করতে হবে:
      1. টাইপ অ্যাট্রিবিউটের ভ্যালু চেক করুন (উপস্থিত থাকলে)।
      2. টাইপ অ্যাট্রিবিউট না থাকলে, ভেরিয়েবলকে স্ট্রিং হিসেবে বিবেচনা করা হয়।
    3. ভেরিয়েবলের ধরন মেসেজ না হলে (যেমন, স্ট্রিং), তাহলে সেটিই সমস্যার কারণ। আপনি ভেরিয়েবেল রেফারেন্স থেকে সাধারণ ভেরিয়েবেল ও সেগুলির ধরন সম্পর্কে জানতে পারবেন।

    যেমন, উপরের XML-এ PostalCode ভেরিয়েবলটি দেখুন। <AssignVariable> এলিমেন্টে ফ্লো ভেরিয়েবেল request.queryparam.postalcode-এর ভ্যালু এতে অ্যাসাইন করা হয়। এই ভ্যালু হল একটি স্ট্রিং, কারণ ভেরিয়েবল অ্যাসাইনমেন্টে কোনও টাইপ অ্যাট্রিবিউট নেই।

    এখন, মনে রাখবেন যে PostalCode ভেরিয়েবলটি Assign Message নীতির <Copy> এলিমেন্টে ব্যবহার করা হয়:

    <Copy source="PostalCode">
       <QueryParams>
          <QueryParam name="PostalCode" />
       </QueryParams>
    </Copy>
    

    যেহেতু PostalCode মেসেজ টাইপের নয় (এই উদাহরণে এটি একটি স্ট্রিং), তাই আপনি এই সমস্যার কোডটি পাবেন:

    steps.assignmessage.VariableOfNonMsgType
    

রেজোলিউশন

নিশ্চিত করুন যে, অ্যাসাইন মেসেজ নীতি প্রয়োগ করা যায়নি এমন ক্ষেত্রে <Copy> এলিমেন্টের source অ্যাট্রিবিউটটি আগে থেকে থাকা মেসেজ টাইপের ফ্লো ভেরিয়েবলে সেট করা আছে।

নীতি ঠিক করতে, মেসেজ ধরনের ভেরিয়েবল নির্দিষ্ট করতে, আপনি <Copy> এলিমেন্টে source অ্যাট্রিবিউট পরিবর্তন করতে পারেন। যেমন, অ্যাসাইন মেসেজ নীতি যদি অনুরোধ ফ্লোতে এক্সিকিউট করার কথা থাকে, তাহলে আপনি মেসেজ টাইপ ভেরিয়েবল request বা মেসেজ টাইপের অন্য কোনও কাস্টম ভেরিয়েবল ব্যবহার করতে পারেন।

<AssignMessage name="GenerateGeocodingRequest">
   <AssignTo createNew="true" type="request">GeocodingRequest</AssignTo>
   <AssignVariable>
      <Name>PostalCode</Name>
      <Ref>request.queryparam.postalcode</Ref>
   </AssignVariable>
   <AssignVariable>
      <Name>Country</Name>
      <Ref>request.queryparam.country</Ref>
   </AssignVariable>
   <Copy source="request">
      <QueryParams>
         <QueryParam name="PostalCode" />
      </QueryParams>
   </Copy>
</AssignMessage>