আপনি Apigee Edge-এর ডকুমেন্টেশন দেখছেন।
Apigee X ডকুমেন্টেশন .info- তে যান।
অমীমাংসিত পরিবর্তনশীল
ত্রুটি কোড
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 ভেরিয়েবল অথবা এমন কোনো কাস্টম ভেরিয়েবলে সেট করা থাকে যা রিকোয়েস্ট ফ্লোতে বিদ্যমান নেই।
রোগ নির্ণয়
যে অ্যাসাইন মেসেজ পলিসিতে ত্রুটিটি ঘটেছে তা শনাক্ত করুন এবং যে ভেরিয়েবলটি উপলব্ধ নয় তার নাম খুঁজে বের করুন। আপনি এই দুটি আইটেমই এরর রেসপন্সের
faultstring) এলিমেন্টে খুঁজে পাবেন।উদাহরণস্বরূপ, নিম্নলিখিত
faultstringএ, পলিসির নাম হলgoogleBookএবং ভেরিয়েবলটি হলvar:"faultstring": "AssignMessage[googleBook]: unable to resolve variable var"ব্যর্থ হওয়া অ্যাসাইন মেসেজ পলিসি 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>যে ফ্লো-তে 'অ্যাসাইন মেসেজ' পলিসিটি কার্যকর করা হচ্ছে, সেখানে ভেরিয়েবলটি সংজ্ঞায়িত এবং উপলব্ধ আছে কিনা তা নির্ধারণ করুন।
যদি ভেরিয়েবলটি হয়:
- আওতার বাইরে (যে নির্দিষ্ট কার্যপ্রবাহে নীতিমালাটি কার্যকর করা হচ্ছে সেখানে উপলব্ধ নয়) অথবা
- সমাধান করা যাচ্ছে না (সংজ্ঞায়িত নয়)
তাহলে এটাই ত্রুটির কারণ।
উদাহরণস্বরূপ, ধরা যাক উপরে দেখানো 'অ্যাসাইন মেসেজ' পলিসিটি রিকোয়েস্ট ফ্লোতে এক্সিকিউট হয়। রিকোয়েস্ট ফ্লোতে 'অ্যাসাইন মেসেজ' পলিসির আগে এক্সিকিউট হওয়া কোনো পলিসিতে '
varভ্যারিয়েবলটি সংজ্ঞায়িত আছে কিনা তা পরীক্ষা করুন। যদি ভ্যারিয়েবলটি সংজ্ঞায়িত না থাকে, তাহলে আপনি এই এরর কোডটি পাবেন:steps.assignmessage.UnresolvedVariable
সমাধান
নিশ্চিত করুন যে পলিসিতে উল্লেখিত ভেরিয়েবলটি বিদ্যমান এবং সেই নির্দিষ্ট ফ্লো-তে উপলব্ধ আছে, যেখানে 'অ্যাসাইন মেসেজ' পলিসিটি কার্যকর করা হচ্ছে।
উপরে দেখানো উদাহরণ পলিসিটি সংশোধন করতে, আপনি <Copy> এলিমেন্টের source অ্যাট্রিবিউটটি পরিবর্তন করে request ভেরিয়েবল অথবা রিকোয়েস্ট ফ্লোতে বিদ্যমান message টাইপের অন্য কোনো কাস্টম ভেরিয়েবল ব্যবহার করতে পারেন।
<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 হলো message টাইপের। মেসেজ ভেরিয়েবল সম্পর্কে আরও জানতে, ভেরিয়েবল রেফারেন্স দেখুন।
রোগ নির্ণয়
যে অ্যাসাইন মেসেজ পলিসিতে ত্রুটি ঘটেছে তা শনাক্ত করুন এবং যে ভেরিয়েবলের টাইপ ভুল, তার নাম খুঁজে বের করুন। আপনি এই দুটি আইটেমই এরর রেসপন্সের
faultstring' এলিমেন্টে খুঁজে পাবেন। উদাহরণস্বরূপ, নিম্নলিখিতfaultstringএ, পলিসির নাম হলোGenerateGeocodingRequestএবং ভেরিয়েবলটি হলোPostalCode:"faultstring": "AssignMessage[GenerateGeocodingRequest]: value of variable PostalCode is not of type Message"ব্যর্থ হওয়া অ্যাসাইন মেসেজ পলিসি 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>এই ভেরিয়েবলটি message টাইপের কিনা তা নির্ণয় করুন:
- API Proxy বান্ডেলের মধ্যে কোডটি খুঁজুন, যেখানে ভেরিয়েবলটি প্রথম সংজ্ঞায়িত করা হয়েছিল।
- প্রথমে যে পলিসিতে ভেরিয়েবলটি সংজ্ঞায়িত এবং পূরণ করা হয়েছে তা বের করার পর, আপনাকে নিম্নলিখিতভাবে সেই ভেরিয়েবলের ধরণ নির্ধারণ করতে হবে:
- type অ্যাট্রিবিউটের মান যাচাই করুন (যদি থাকে)।
- যদি type অ্যাট্রিবিউটটি উপস্থিত না থাকে, তাহলে ভেরিয়েবলটিকে স্ট্রিং হিসেবে গণ্য করা হয়।
- যদি ভেরিয়েবলের টাইপ মেসেজ নয় (যেমন স্ট্রিং), তাহলে সেটাই ত্রুটির কারণ। আপনি ভেরিয়েবল রেফারেন্স থেকে সাধারণ ভেরিয়েবল এবং তাদের টাইপ সম্পর্কে জানতে পারবেন।
উদাহরণস্বরূপ, উপরের XML-এ PostalCode ভেরিয়েবলটি দেখুন।
<AssignVariable>এলিমেন্টের মধ্যে এটিকেrequest.queryparam.postalcodeফ্লো ভেরিয়েবলের মান অ্যাসাইন করা হয়েছে। এই মানটি একটি স্ট্রিং, কারণ ভেরিয়েবল অ্যাসাইনমেন্টে কোনো type অ্যাট্রিবিউট উপস্থিত নেই।এখন, মনে করুন যে PostalCode ভেরিয়েবলটি Assign Message পলিসির
<Copy>এলিমেন্টে ব্যবহৃত হয়:<Copy source="PostalCode"> <QueryParams> <QueryParam name="PostalCode" /> </QueryParams> </Copy>যেহেতু PostalCode-এর টাইপ message নয় (এই উদাহরণে এটি একটি স্ট্রিং), তাই আপনি এই এরর কোডটি পাবেন:
steps.assignmessage.VariableOfNonMsgType
সমাধান
নিশ্চিত করুন যে, ব্যর্থ হওয়া 'অ্যাসাইন মেসেজ' পলিসির <Copy> এলিমেন্টের source অ্যাট্রিবিউটটি একটি বিদ্যমান মেসেজ টাইপ ফ্লো ভেরিয়েবলে সেট করা আছে।
পলিসিটি সংশোধন করতে, আপনি <Copy> এলিমেন্টের source অ্যাট্রিবিউটটি পরিবর্তন করে message টাইপের একটি ভ্যারিয়েবল নির্দিষ্ট করতে পারেন। উদাহরণস্বরূপ, যদি Assign Message পলিসিটি রিকোয়েস্ট ফ্লোতে কার্যকর হওয়ার কথা থাকে, তাহলে আপনি request মেসেজ টাইপের request অথবা message টাইপের অন্য কোনো কাস্টম ভ্যারিয়েবল ব্যবহার করতে পারেন।
<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>