הדף הזה רלוונטי ל-Apigee ול-Apigee Hybrid.
לעיון במסמכי התיעוד של Apigee Edge
UnsupportedOperationException
קוד שגיאה
java.lang.UnsupportedOperationException
גוף תגובת השגיאה
{
"fault":{
"faultstring":"java.lang.UnsupportedOperationException",
"detail":{
"errorcode":"Internal Server Error"
}
}
}
מטרה
השגיאה הזו מתרחשת אם המאפיין mapIdentifier מוגדר למחרוזת ריקה במדיניות 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.. הקידומת, שנדרשת למטרות אבטחה בסיסיות במהלך ניפוי הבאגים, מסתירה את הערכים המוצפנים מ-Trace של 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, לוחצים על אדמין.
- לוחצים על סביבות.
- לוחצים על 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>