شما در حال مشاهده اسناد Apigee Edge هستید.
به مستندات Apigee X بروید . اطلاعات
UnsupportedOperationException
کد خطا
java.lang.UnsupportedOperationException
بدنه پاسخ به خطا
{
"fault":{
"faultstring":"java.lang.UnsupportedOperationException",
"detail":{
"errorcode":"Internal Server Error"
}
}
}
علت
این خطا در صورتی رخ می دهد که ویژگی mapIdentifier
روی یک رشته خالی در خط مشی Key Value Map Operations تنظیم شده باشد.
تشخیص
همه خطمشیهای عملیات نقشه ارزش کلیدی را در پراکسی API خاصی که در آن خرابی رخ داده است، بررسی کنید. اگر خط مشی عملیات Map Value Key وجود داشته باشد که در آن ویژگی
mapIdentifier
به عنوان یک رشته خالی تنظیم شده باشد، دلیل این خطا است.به عنوان مثال، خط مشی عملیات Map Value Key زیر دارای یک
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>
قطعنامه
مطمئن شوید که ویژگی 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>
SetVariableFailed
کد خطا
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.
. پیشوندی که برای اهداف امنیتی اولیه در حین اشکالزدایی لازم است، مقادیر رمزگذاریشده را از ردیابی پراکسی API و جلسات اشکالزدایی پنهان میکند.
تشخیص
1. خط مشی Key Value Map Operations را که در آن خطا رخ داده است و نام متغیری را که مقدار را نمی توان روی آن تنظیم کرد، شناسایی کنید. شما می توانید هر دوی این موارد را در عنصر faultstring
پاسخ خطا پیدا کنید. به عنوان مثال، در faultstring
زیر، نام سیاست EncryptedKVM
و متغیر myvar
است:
"faultstring":"Failed to set variable myvar in KeyValueMapStepDefinition EncryptedKVM"
1. در XML خط مشی عملیات Map Value Key ناموفق، بررسی کنید که نام متغیر مشخص شده در ویژگی assignTo
عنصر <Get>
با نام متغیر شناسایی شده در رشته خطا مطابقت داشته باشد (مرحله شماره 1 در بالا). به عنوان مثال، خط مشی عملیات نقشه ارزش کلیدی زیر متغیری به نام myvar
را در عنصر <Get>
مشخص می کند که با آنچه در 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 رمزگذاری شده است. در غیر این صورت، اگر در محدوده سازمان یا apiproxy ایجاد شده باشد، باید از مدیریت API استفاده کنید تا رمزگذاری شده بودن آن را تأیید کنید. همچنین به مدیریت و استفاده از KVM ها مراجعه کنید.برای بررسی اینکه آیا یک KVM با محدوده محیطی در رابط کاربری Edge رمزگذاری شده است:
- در رابط کاربری Edge، روی Admin در منوی ناوبری سمت چپ کلیک کنید.
- روی Environments کلیک کنید.
- روی Maps ارزش کلیدی کلیک کنید.
- نقشه ارزش کلیدی را که می خواهید استفاده کنید پیدا کنید.
- برای گسترش لیست مقادیر، روی فلش سمت چپ نام کلیک کنید.
- نقشههای ارزش کلید رمزگذاریشده مقادیر را با ستاره در UI (*****) نشان میدهند که در درباره درباره KVMهای رمزگذاری شده نشان داده شده است.
برای بررسی اینکه آیا یک KVM در محدوده سازمان، محیط یا سطح آپی پروکسی رمزگذاری شده است، از APIهای مدیریت استفاده کنید. اگر از API استفاده میکنید، یک پاسخ نمونه که هم تنظیمات رمزگذاری شده و هم ستارههای مقدار را نشان میدهد به این صورت است:
{ "encrypted": true, "entry": [ { "name": "foo", "value": "*****" } ], "name": "encrypted" }
اگر نقشه مقدار کلید یک KVM رمزگذاری شده باشد و نام متغیر مورد استفاده در ویژگی
assignTo
عنصر<Get>
دارای پیشوندprivate
نباشد. سپس این دلیل خطا است.در مثال خط مشی عملیات نقشه ارزش کلیدی که در بالا نشان داده شده است، نقشه ارزش کلید
testEncrypted
رمزگذاری شده است و نام متغیرmyvar
پیشوندprivate
ندارد. بنابراین کد خطا را دریافت می کنید:steps.keyvaluemapoperations.SetVariableFailed
قطعنامه
اطمینان حاصل کنید که نام متغیر دارای پیشوند private.
در ویژگی assignTo
عنصر <Get>
در خط مشی عملیات نقشه ارزش کلیدی، اگر نقشه مقدار کلید مورد استفاده رمزگذاری شده باشد.
برای تصحیح مثال خط مشی عملیات نقشه ارزش کلیدی که در بالا نشان داده شده است، می توانید مقدار ویژگی 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>