אתם מציגים את מסמכי התיעוד של Apigee Edge.
כניסה למסמכי העזרה של Apigee X. info
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 proxy.
אבחון
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, לוחצים על אדמין בתפריט הניווט הימני.
- לוחצים על סביבה.
- לוחצים על מיפויים של מפתח/ערך.
- מאתרים את מפת ערכי המפתחות שבה רוצים להשתמש.
- לוחצים על החץ שמימין לשם כדי להרחיב את רשימת הערכים.
- במפות של מפתחות מוצפנים עם ערכים, הערכים מוצגים במסך המשתמש עם כוכביות (*****) כפי שמתואר בקטע מידע על מפות מפתחות מוצפנים.
כדי לבדוק אם 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>