אתם צופים במסמכי העזרה של Apigee Edge.
כניסה למסמכי העזרה של Apigee X. info
UnresolvedVariable
קוד שגיאה
steps.assignmessage.UnresolvedVariable
גוף התשובה לשגיאה
{ "fault": { "faultstring": "AssignMessage[policy_name]: unable to resolve variable [variable_name]", "detail": { "errorcode": "steps.assignmessage.UnresolvedVariable" } } }
סיבה
השגיאה הזו מתרחשת אם משתנה שצוין במדיניות הקצאת ההודעות הוא:
- מחוץ להיקף (לא זמין בתהליך הספציפי שבו המדיניות מתבצעת) או
- לא ניתן לפתרון (לא מוגדר)
לדוגמה, השגיאה הזו מתרחשת אם המדיניות Assign Message פועלת בתהליך הבקשה, אבל המאפיין source
ברכיב <Copy>
מוגדר למשתנה response
או error
או לכל משתנה מותאם אישית אחר שלא קיים בתהליך הבקשה.
אבחון
מזהים את המדיניות להקצאת הודעות שבה אירעה השגיאה ואת שם המשתנה שלא זמין. אפשר למצוא את שני הפריטים האלה ברכיב
faultstring
של תגובת השגיאה.לדוגמה, ב
faultstring
הבא, שם המדיניות הואgoogleBook
והמשתנה הואvar
:"faultstring": "AssignMessage[googleBook]: unable to resolve variable var"
בקובץ ה-XML של 'הקצאת מדיניות של הודעות' שנכשל, מוודאים ששם המשתנה שנעשה בו שימוש תואם לשם המשתנה שזוהה במחרוזת השגיאה (שלב 1 למעלה). לדוגמה, המדיניות הבאה מגדירה את מאפיין המקור ברכיב
<Copy>
למשתנה בשםvar
, שמתאים למה שמופיע ב-faultstring
:<AssignMessage async="false" continueOnError="false" enabled="true" name="Assign-Message-1"> <DisplayName>googleBook</DisplayName> <Properties /> <Copy source="var"> <Headers> <Header name="user-agent" /> </Headers> </Copy> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <AssignTo createNew="true" transport="http" type="request">googleBookReq</AssignTo> </AssignMessage>
בודקים אם המשתנה מוגדר וזמין בתהליך שבו המדיניות Assign Message מופעלת.
אם המשתנה הוא:
- מחוץ להיקף (לא זמין בתהליך הספציפי שבו המדיניות מתבצעת) או
- לא ניתן לפתור (לא מוגדר)
אז זה הגורם לשגיאה.
לדוגמה, נניח שהמדיניות Assign Message שמוצגת למעלה פועלת בתהליך הבקשה. צריך לבדוק אם המשתנה
var
מוגדר באחד מכללי המדיניות שמופעלים לפני מדיניות הקצאת ההודעה בתהליך הבקשה. אם המשתנה לא הוגדר, תקבלו את קוד השגיאה:steps.assignmessage.UnresolvedVariable
רזולוציה
מוודאים שהמשתנה שמצוין במדיניות קיים וזמין בתהליך הספציפי שבו המדיניות Assign Message מופעלת.
כדי לתקן את המדיניות לדוגמה שמוצגת למעלה, אפשר לשנות את מאפיין המקור ברכיב <Copy>
כך שיהיה משתנה הבקשה או כל משתנה מותאם אישית אחר מסוג הודעה שקיים בתהליך הבקשה.
<AssignMessage async="false" continueOnError="false" enabled="true" name="Assign-Message-1">
<DisplayName>googleBook</DisplayName>
<Properties />
<Copy source="request">
<Headers>
<Header name="user-agent" />
</Headers>
</Copy>
<IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
<AssignTo createNew="true" transport="http" type="request">googleBookReq</AssignTo>
</AssignMessage>
VariableOfNonMsgType
קוד שגיאה
steps.assignmessage.VariableOfNonMsgType
גוף התשובה לשגיאה
{ "fault": { "faultstring": "AssignMessage[policy_name]: value of variable [variable] is not of type Message", "detail": { "errorcode": "steps.assignmessage.VariableOfNonMsgType" } } }
סיבה
השגיאה הזו מתקבלת אם המאפיין source
ברכיב <Copy>
מוגדר כמשתנה שאינו מסוג message.
משתני סוג ההודעה מייצגים בקשות HTTP ותגובות HTTP שלמות. המשתנים המובנים של תהליך Edge request
, response
ו-message
הם מסוג message. מידע נוסף על משתני הודעות זמין במאמר העזר בנושא משתנים.
אבחון
מאתרים את מדיניות הקצאת ההודעות שבה אירעה השגיאה ואת שם המשתנה שהסוג שלו שגוי. שני הפריטים האלה מופיעים ברכיב
faultstring
בתשובה לשגיאה. לדוגמה, ב-faultstring
הבא, שם המדיניות הואGenerateGeocodingRequest
והמשתנה הואPostalCode
:"faultstring": "AssignMessage[GenerateGeocodingRequest]: value of variable PostalCode is not of type Message"
בקובץ ה-XML של מדיניות הקצאת ההודעות שנכשלה, מוודאים ששם המשתנה שהוגדר באלמנט
<Copy>
תואם לשם המשתנה שזוהה במחרוזת השגיאה (שלב 1 למעלה). לדוגמה, המדיניות הבאה מגדירה מאפיין מקור למשתנה בשםPostalCode
, שמתאים למה שמופיע ב-faultstring
:<AssignMessage name="GenerateGeocodingRequest"> <AssignTo createNew="true" type="request">GeocodingRequest</AssignTo> <AssignVariable> <Name>PostalCode</Name> <Ref>request.queryparam.postalcode</Ref> </AssignVariable> <AssignVariable> <Name>Country</Name> <Ref>request.queryparam.country</Ref> </AssignVariable> <Copy source="PostalCode"> <QueryParams> <QueryParam name="q" /> </QueryParams> </Copy> </AssignMessage>
קובעים אם המשתנה הזה הוא מסוג message או לא:
- מאתרים את הקוד בתוך חבילת ה-API של שרת ה-proxy, שבה המשתנה הוגדר קודם.
- אחרי שמזהים את המדיניות שבה המשתנה מוגדר ומאוכלס קודם, צריך לקבוע את סוג המשתנה באופן הבא:
- בודקים את הערך של מאפיין הסוג (אם קיים).
- אם מאפיין הסוג לא קיים, המשתנה נחשב למחרוזת.
- אם הסוג של המשתנה הוא לא הודעת (למשל מחרוזת), זו הסיבה לשגיאה. מידע על משתנים נפוצים ועל הסוגים שלהם זמין במאמר העזרה בנושא משתנים.
לדוגמה, אפשר להסתכל על המשתנה PostalCode ב-XML שלמעלה. הוא מקבל את הערך של משתנה הזרימה
request.queryparam.postalcode
ברכיב<AssignVariable>
. הערך הזה הוא מחרוזת, כי אין מאפיין סוג בהקצאת המשתנה.עכשיו, חשוב לזכור שהמשתנה PostalCode משמש את האלמנט
<Copy>
במדיניות Assign Message:<Copy source="PostalCode"> <QueryParams> <QueryParam name="PostalCode" /> </QueryParams> </Copy>
מכיוון ש-PostalCode הוא לא מסוג message (בדוגמאות האלה הוא מחרוזת), מופיע קוד השגיאה:
steps.assignmessage.VariableOfNonMsgType
רזולוציה
מוודאים שהמאפיין source
ברכיב <Copy>
במדיניות Assign Message שנכשלה מוגדר למשתנה תהליך מסוג message שקיים.
כדי לתקן את המדיניות, אפשר לשנות את המאפיין source
באלמנט <Copy>
כך שיציין משתנה מסוג message. לדוגמה, אם המדיניות Assign Message אמורה לפעול בתהליך הבקשה, אפשר להשתמש במשתנה message type request
או בכל משתנה מותאם אישית אחר מסוג message.
<AssignMessage name="GenerateGeocodingRequest">
<AssignTo createNew="true" type="request">GeocodingRequest</AssignTo>
<AssignVariable>
<Name>PostalCode</Name>
<Ref>request.queryparam.postalcode</Ref>
</AssignVariable>
<AssignVariable>
<Name>Country</Name>
<Ref>request.queryparam.country</Ref>
</AssignVariable>
<Copy source="request">
<QueryParams>
<QueryParam name="PostalCode" />
</QueryParams>
</Copy>
</AssignMessage>