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