আপনি Apigee Edge-এর ডকুমেন্টেশন দেখছেন।
Apigee X ডকুমেন্টেশন .info- তে যান।
অসমর্থিত অপারেশন ব্যতিক্রম
ত্রুটি কোড
java.lang.UnsupportedOperationException
ত্রুটিপূর্ণ প্রতিক্রিয়া বডি
{
"fault":{
"faultstring":"java.lang.UnsupportedOperationException",
"detail":{
"errorcode":"Internal Server Error"
}
}
}
কারণ
Key Value Map Operations পলিসিতে mapIdentifier অ্যাট্রিবিউটটিকে একটি খালি স্ট্রিং হিসেবে সেট করা থাকলে এই ত্রুটিটি ঘটে।
রোগ নির্ণয়
যে নির্দিষ্ট এপিআই প্রক্সিতে ব্যর্থতাটি ঘটেছে, সেখানকার সমস্ত কী ভ্যালু ম্যাপ অপারেশনস পলিসি পরীক্ষা করুন। যদি এমন কোনো কী ভ্যালু ম্যাপ অপারেশনস পলিসি থাকে যেখানে
mapIdentifierঅ্যাট্রিবিউটটি একটি খালি স্ট্রিং হিসাবে সেট করা আছে, তাহলে সেটিই ত্রুটির কারণ।উদাহরণস্বরূপ, নিম্নলিখিত Key Value Map Operations পলিসিটির
mapIdentifierখালি রয়েছে:<KeyValueMapOperations async="false" continueOnError="false" enabled="true" name="StoreKvm" mapIdentifier=""> <DisplayName>StoreKvm</DisplayName> <Properties/> <ExclusiveCache>false</ExclusiveCache> <ExpiryTimeInSecs>300</ExpiryTimeInSecs> <Put override="true"> <Key> <Parameter ref="request.queryparam.key"/> </Key> <Value ref="request.queryparam.value"/> </Put> <Scope>apiproxy</Scope> </KeyValueMapOperations>
সমাধান
নিশ্চিত করুন যে Key Value Map Operations পলিসিতে mapIdentifier অ্যাট্রিবিউটটি একটি বৈধ কী-ভ্যালু ম্যাপে সেট করা আছে।
উপরে দেখানো উদাহরণ পলিসিটি সংশোধন করতে, আপনি mapIdentifier একটি বিদ্যমান কী-ভ্যালু ম্যাপ UserLocationMap এ নির্দিষ্ট করতে পারেন।
<KeyValueMapOperations async="false" continueOnError="false" enabled="true" name="StoreKvm" mapIdentifier="UserLocationMap">
<DisplayName>StoreKvm</DisplayName>
<Properties/>
<ExclusiveCache>false</ExclusiveCache>
<ExpiryTimeInSecs>300</ExpiryTimeInSecs>
<Put override="true">
<Key>
<Parameter ref="request.queryparam.key"/>
</Key>
<Value ref="request.queryparam.value"/>
</Put>
<Scope>apiproxy</Scope>
</KeyValueMapOperations>
সেটভেরিয়েবল ব্যর্থ হয়েছে
ত্রুটি কোড
steps.keyvaluemapoperations.SetVariableFailed
ত্রুটিপূর্ণ প্রতিক্রিয়া বডি
{
"fault":{
"faultstring":"Failed to set variable variable_name in KeyValueMapStepDefinition policy_name",
"detail":{
"errorcode":"steps.keyvaluemapoperations.SetVariableFailed"
}
}
}
ত্রুটির বার্তার উদাহরণ
{
"fault":{
"faultstring":"Failed to set variable myvar in KeyValueMapStepDefinition EncryptedKVM",
"detail":{
"errorcode":"steps.keyvaluemapoperations.SetVariableFailed"
}
}
}
কারণ
এই ত্রুটিটি ঘটে যদি আপনি একটি এনক্রিপ্টেড কী-ভ্যালু ম্যাপ থেকে কোনো মান পুনরুদ্ধার করার চেষ্টা করেন এবং সেই মানটি এমন একটি ভেরিয়েবলে সেট করেন যার নামের আগে private. ডিবাগিংয়ের সময় মৌলিক নিরাপত্তার জন্য প্রয়োজনীয় এই প্রিফিক্সটি, এপিআই প্রক্সি ট্রেস এবং ডিবাগ সেশন থেকে এনক্রিপ্টেড মানগুলোকে গোপন রাখে।
রোগ নির্ণয়
১. যে Key Value Map Operations পলিসিতে ত্রুটি ঘটেছে সেটি এবং যে ভেরিয়েবলের মান সেট করা যাচ্ছে না তার নাম শনাক্ত করুন। আপনি এই দুটি আইটেমই ত্রুটি প্রতিক্রিয়ার (error response) faultstring এলিমেন্টে খুঁজে পাবেন। উদাহরণস্বরূপ, নিম্নলিখিত faultstring এ, পলিসির নাম হল EncryptedKVM এবং ভেরিয়েবলটি হল myvar :
"faultstring":"Failed to set variable myvar in KeyValueMapStepDefinition EncryptedKVM"
১. ব্যর্থ হওয়া Key Value Map Operations পলিসি XML-এ, যাচাই করুন যে <Get> এলিমেন্টের assignTo অ্যাট্রিবিউটে নির্দিষ্ট করা ভেরিয়েবলের নামটি, ফল্ট স্ট্রিং-এ (উপরের ধাপ #১) চিহ্নিত ভেরিয়েবলের নামের সাথে মেলে কিনা। উদাহরণস্বরূপ, নিম্নলিখিত Key Value Map Operations পলিসিটি <Get> এলিমেন্টে myvar নামের একটি ভেরিয়েবল নির্দিষ্ট করে, যা faultstring এ যা আছে তার সাথে মিলে যায়:
<KeyValueMapOperations async="false" continueOnError="false" enabled="true" name="Key-Value-Map-Operations-1" mapIdentifier="testEncrypted">
<DisplayName>KeyValueMapOperations-1</DisplayName>
<Properties/>
<ExclusiveCache>false</ExclusiveCache>
<ExpiryTimeInSecs>300</ExpiryTimeInSecs>
<Get assignTo="myvar" index="1">
<Key>
<Parameter>foo</Parameter>
</Key>
</Get>
<Scope>environment</Scope>
</KeyValueMapOperations>
mapIdentifierঅ্যাট্রিবিউটে নির্দিষ্ট করা কী-ভ্যালু ম্যাপটি একটি এনক্রিপ্টেড KVM কিনা তা পরীক্ষা করুন। যদি KVM-টি এনভায়রনমেন্ট স্কোপে এনক্রিপ্টেড থাকে, তাহলে আপনি Edge UI-তে এটি এনক্রিপ্টেড কিনা তা যাচাই করতে পারেন। অন্যথায়, যদি এটি অর্গানাইজেশন বা apiproxy স্কোপে তৈরি করা হয়ে থাকে, তবে এটি এনক্রিপ্টেড কিনা তা যাচাই করার জন্য আপনাকে ম্যানেজমেন্ট API ব্যবহার করতে হবে। আরও দেখুন KVM পরিচালনা এবং ব্যবহার ।Edge UI-তে কোনো এনভায়রনমেন্ট স্কোপড KVM এনক্রিপ্টেড কিনা তা পরীক্ষা করতে:
- Edge UI-তে, বাম দিকের নেভিগেশন মেনুতে থাকা Admin-এ ক্লিক করুন।
- পরিবেশসমূহে ক্লিক করুন।
- কী ভ্যালু ম্যাপস-এ ক্লিক করুন।
- আপনি যে কী-ভ্যালু ম্যাপটি ব্যবহার করতে চান তা খুঁজুন।
- মানগুলির তালিকাটি প্রসারিত করতে নামের বাম দিকের তীরচিহ্নে ক্লিক করুন।
- এনক্রিপ্টেড কী ভ্যালু ম্যাপগুলো UI-তে মানগুলোকে অ্যাস্টারিস্ক (*****) দিয়ে মাস্ক করে প্রদর্শন করে, যেমনটি ‘এনক্রিপ্টেড KVM সম্পর্কে’ অংশে দেখানো হয়েছে।
অর্গানাইজেশন, এনভায়রনমেন্ট বা এপিআইপ্রক্সি লেভেলে স্কোপ করা কোনো KVM এনক্রিপ্টেড কিনা তা পরীক্ষা করতে, ম্যানেজমেন্ট এপিআই ব্যবহার করুন। আপনি যদি এপিআই ব্যবহার করেন, তাহলে এনক্রিপ্টেড সেটিং এবং ভ্যালুর জন্য অ্যাস্টারিস্ক উভয়ই দেখানো একটি নমুনা রেসপন্স দেখতে এইরকম হয়:
{ "encrypted": true, "entry": [ { "name": "foo", "value": "*****" } ], "name": "encrypted" }যদি কী-ভ্যালু ম্যাপটি একটি এনক্রিপ্টেড KVM হয় এবং
<Get>এলিমেন্টেরassignToঅ্যাট্রিবিউটে ব্যবহৃত ভেরিয়েবলের নামেprivateপ্রিফিক্সটি না থাকে, তাহলে সেটাই এই ত্রুটির কারণ।উপরে দেখানো উদাহরণ Key Value Map Operations পলিসিতে,
testEncryptedকী-ভ্যালু ম্যাপটি এনক্রিপ্টেড এবংmyvarভেরিয়েবল নামটিprivateপ্রিফিক্স দ্বারা যুক্ত নয়। তাই আপনি এই এরর কোডটি পাচ্ছেন:steps.keyvaluemapoperations.SetVariableFailed
সমাধান
যদি ব্যবহৃত কী-ভ্যালু ম্যাপটি এনক্রিপ্টেড হয়, তাহলে কী-ভ্যালু ম্যাপ অপারেশনস পলিসির <Get> এলিমেন্টের assignTo অ্যাট্রিবিউটে ভেরিয়েবল নামের আগে private. প্রিফিক্সটি আছে কিনা তা নিশ্চিত করুন।
উপরে দেখানো উদাহরণ Key Value Map Operations পলিসিটি সংশোধন করতে, আপনি assignTo অ্যাট্রিবিউটের মান private.myvar এ পরিবর্তন করতে পারেন:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<KeyValueMapOperations async="false" continueOnError="false" enabled="true" name="Key-Value-Map-Operations-1" mapIdentifier="testEncrypted">
<DisplayName>KeyValueMapOperations-1</DisplayName>
<Properties/>
<ExclusiveCache>false</ExclusiveCache>
<ExpiryTimeInSecs>300</ExpiryTimeInSecs>
<Get assignTo="private.myvar" index="1">
<Key>
<Parameter>foo</Parameter>
</Key>
</Get>
<Scope>environment</Scope>
</KeyValueMapOperations>