הדף הזה רלוונטי ל-Apigee ול-Apigee Hybrid.
לעיון במסמכי התיעוד של Apigee Edge
UnsupportedOperationException
קוד שגיאה
java.lang.UnsupportedOperationException
גוף התגובה לשגיאה
{
"fault":{
"faultstring":"java.lang.UnsupportedOperationException",
"detail":{
"errorcode":"Internal Server Error"
}
}
}
מטרה
השגיאה הזו מתרחשת אם המאפיין mapIdentifier מוגדר למחרוזת ריקה במדיניות Key Value Map Operations.
אבחון
צריך לבדוק את כל כללי המדיניות של Key Value Map Operations ב-API Proxy הספציפי שבו התרחשה השגיאה. אם יש כלל מדיניות של Key Value Map Operations שבו המאפיין
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>environment</Scope> </KeyValueMapOperations>
רזולוציה
מוודאים שהמאפיין mapIdentifier מוגדר למפת ערכים תקינה במדיניות Key Value Map Operations.
כדי לתקן את מדיניות הדוגמה שמוצגת למעלה, אפשר לציין את 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>environment</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.. התחילית, שנדרשת למטרות אבטחה בסיסיות במהלך ניפוי הבאגים, מסתירה את הערכים המוצפנים ממעקב אחר proxy ל-API ומסשנים של ניפוי באגים.
אבחון
1.
מזהים את מדיניות הפעולות של Key Value Map שבה התרחשה השגיאה ואת שם המשתנה שלא ניתן להגדיר לו ערך. אפשר למצוא את שני הפריטים האלה ברכיב faultstring של תגובת השגיאה. לדוגמה, בקטע faultstring הבא, שם המדיניות הוא EncryptedKVM והמשתנה הוא myvar:
"faultstring":"Failed to set variable myvar in KeyValueMapStepDefinition EncryptedKVM"
1.
ב-XML של מדיניות Key Value Map Operations שנכשלה, מוודאים שהשם של המשתנה שצוין במאפיין assignTo של האלמנט <Get> זהה לשם המשתנה שזוהה במחרוזת השגיאה (שלב 1 למעלה). לדוגמה, במדיניות Key Value Map Operations הבאה מוגדר משתנה בשם 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 מוצפן בממשק המשתמש של Apigee:
- בתפריט הניווט הימני בממשק המשתמש של Apigee, לוחצים על Admin (ניהול).
- לוחצים על סביבות.
- לוחצים על Key Value Maps (מיפוי של ערכי מפתח).
- מוצאים את מיפוי זוגות הערכים שרוצים להשתמש בו.
- לוחצים על החץ שמימין לשם כדי להרחיב את רשימת הערכים.
- במפות מוצפנות של זוגות מפתח/ערך, הערכים מוצגים בממשק המשתמש עם כוכביות (*****), כמו שמוסבר במאמר מידע על מפות מוצפנות של זוגות מפתח/ערך.
אם מפת זוגות מפתח/ערך היא KVM מוצפנת ושם המשתנה שמשמש במאפיין
assignToשל רכיב<Get>לא כולל את הקידומתprivate, זו הסיבה לשגיאה.בדוגמה של מדיניות הפעולות במפת ערכי המפתחות שמוצגת למעלה, מפת ערכי המפתחות
testEncryptedמוצפנת ולשם המשתנהmyvarאין את הקידומתprivate. לכן מתקבל קוד השגיאה:steps.keyvaluemapoperations.SetVariableFailed
רזולוציה
אם מפת זוגות הערכים שבה נעשה שימוש מוצפנת, צריך לוודא שלשם המשתנה יש את הקידומת private. במאפיין assignTo של רכיב <Get> במדיניות 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>