বার্তা রানটাইম ত্রুটি সমস্যা সমাধান বরাদ্দ করুন

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

অমীমাংসিত পরিবর্তনশীল

ত্রুটি কোড

steps.assignmessage.UnresolvedVariable

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

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

কারণ

এই ত্রুটিটি ঘটবে যদি বার্তা বরাদ্দ নীতিতে নির্দিষ্ট একটি পরিবর্তনশীল হয়:

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

উদাহরণস্বরূপ, এই ত্রুটিটি ঘটে যদি অ্যাসাইন মেসেজ নীতি অনুরোধের প্রবাহে কার্যকর হয়, কিন্তু <Copy> উপাদানের source বৈশিষ্ট্যটি response বা error ভেরিয়েবল বা অন্য কোনো কাস্টম ভেরিয়েবলের সাথে সেট করা থাকে যা অনুরোধের প্রবাহে বিদ্যমান নেই।

রোগ নির্ণয়

  1. অ্যাসাইন বার্তা নীতি সনাক্ত করুন যেখানে ত্রুটি ঘটেছে এবং ভেরিয়েবলের নাম যা উপলব্ধ নয়। আপনি ত্রুটি প্রতিক্রিয়ার faultstring উপাদানে এই দুটি আইটেম খুঁজে পেতে পারেন।

    উদাহরণস্বরূপ, নিম্নলিখিত faultstring এ, নীতির নাম হল googleBook এবং ভেরিয়েবল হল var :

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

    তাহলে এটি ত্রুটির কারণ।

    উদাহরণ হিসেবে, ধরা যাক উপরে দেখানো অ্যাসাইন মেসেজ নীতি অনুরোধের প্রবাহে কার্যকর হয়। রিকোয়েস্ট ফ্লোতে অ্যাসাইন মেসেজ পলিসির আগে যে কোনও পলিসিতে ভেরিয়েবল 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 বৈশিষ্ট্যটি একটি ভেরিয়েবলে সেট করা থাকে যা বার্তা টাইপ নয়।

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

রোগ নির্ণয়

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

    "faultstring": "AssignMessage[GenerateGeocodingRequest]: value of variable PostalCode is not of type Message"
    
  2. ব্যর্থ অ্যাসাইন মেসেজ পলিসি XML-এ, যাচাই করুন যে <Copy> উপাদানে সেট করা ভেরিয়েবলের নাম ফল্ট স্ট্রিং-এ চিহ্নিত পরিবর্তনশীল নামের সাথে মেলে (উপরের ধাপ #1)। উদাহরণস্বরূপ, নিম্নলিখিত নীতি 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-এ পোস্টাল কোড ভেরিয়েবলটি দেখুন। এটি <AssignVariable> এলিমেন্টে ফ্লো ভেরিয়েবল request.queryparam.postalcode এর মান নির্ধারণ করা হয়েছে। এই মানটি একটি স্ট্রিং, কারণ ভেরিয়েবল অ্যাসাইনমেন্টে উপস্থিত কোনো টাইপ অ্যাট্রিবিউট নেই।

    এখন, স্মরণ করুন যে পোস্টাল কোড ভেরিয়েবলটি অ্যাসাইন মেসেজ নীতির <Copy> উপাদানে ব্যবহৃত হয়েছে:

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

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

    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>