מוצג המסמך של Apigee Edge.
עוברים אל
מסמכי תיעוד של Apigee X. מידע
UnsupportedOperationException
קוד שגיאה
java.lang.UnsupportedOperationException
גוף התשובה לשגיאה
{
"fault":{
"faultstring":"java.lang.UnsupportedOperationException",
"detail":{
"errorcode":"Internal Server Error"
}
}
}
סיבה
השגיאה הזו מתקבלת אם המאפיין mapIdentifier
מוגדר למחרוזת ריקה במדיניות של פעולות המיפוי של מפת מפתחות.
אבחון
לבדוק את כל כללי המדיניות של מיפוי ערכי מפתח בשרת ה-proxy הספציפי ל-API שבו התרחש הכשל. אם יש מדיניות של פעולות במיפוי ערכי מפתח שבה המאפיין
mapIdentifier
מוגדר כמחרוזת ריקה, זו הסיבה לשגיאה.לדוגמה, מדיניות הפעולות הבאות של מיפוי ערכי מפתח מכילה
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.
צריך לזהות את המדיניות של פעולות מפת ערכי המפתח שבה אירעה השגיאה ואת שם המשתנה שאי אפשר להגדיר לו את הערך. אפשר למצוא את שני הפריטים האלה ברכיב faultstring
של תגובת השגיאה. לדוגמה, ב-faultstring
הבא, שם המדיניות הוא EncryptedKVM
והמשתנה הוא myvar
:
"faultstring":"Failed to set variable myvar in KeyValueMapStepDefinition EncryptedKVM"
1.
בקובץ ה-XML של מדיניות Key Value Map Operations שנכשלה, מוודאים ששם המשתנה שצוין במאפיין 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, צריך להשתמש ב-Management API כדי לאמת שהוא מוצפן. ראו גם ניהול של מכונות KVM ושימוש בהן.כדי לבדוק אם מכונה וירטואלית ברמת הסביבה מוצפנת בממשק המשתמש של Edge:
- בממשק המשתמש של Edge, לוחצים על אדמין בתפריט הניווט הימני.
- לוחצים על Environments.
- לוחצים על מפות של מפתחות וערכים.
- מאתרים את מפת ערכי המפתחות שבה רוצים להשתמש.
- לוחצים על החץ שמימין לשם כדי להרחיב את רשימת הערכים.
- ערכים מוצפנים במפות Google עם ערכי מפתחות מוצפנים מוסווים כוכביות בממשק המשתמש (*****), כפי שמתואר במאמר מידע על KVMs מוצפנים.
כדי לבדוק אם KVM בהיקף מוצפן ברמת הארגון, הסביבה או ה-apiproxy, משתמשים בפונקציה ממשקי 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>