מוצג המסמך של Apigee Edge.
עוברים אל
מסמכי תיעוד של Apigee X. מידע
UnresolvedVariable
קוד שגיאה
steps.assignmessage.UnresolvedVariable
גוף התשובה לשגיאה
{ "fault": { "faultstring": "AssignMessage[policy_name]: unable to resolve variable [variable_name]", "detail": { "errorcode": "steps.assignmessage.UnresolvedVariable" } } }
סיבה
השגיאה הזו מתקבלת אם המשתנה שצוין במדיניות הקצאת ההודעות הוא:
- לא בהיקף (לא זמין בתהליך הספציפי שבו המדיניות מופעלת) או
- לא ניתן לפתרון (לא מוגדר)
לדוגמה, השגיאה הזו מתרחשת אם המדיניות של הקצאת הודעה מופעלת בתהליך הבקשה, אבל המאפיין 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>
החליטו אם המשתנה מוגדר וזמין בתהליך שבו מתבצעת מדיניות הקצאת הודעה.
אם המשתנה הוא:
- לא בהיקף (לא זמין בתהליך הספציפי שבו המדיניות מופעלת) או
- לא ניתן לפתרון (לא מוגדר)
זאת הסיבה לשגיאה.
לדוגמה, נניח שהמדיניות להקצאת הודעה שמוצגת למעלה מופעלת בתהליך הבקשה. צריך לבדוק אם המשתנה
var
מוגדר באחד מכללי המדיניות שמופעלים לפני מדיניות הקצאת ההודעה בתהליך הבקשה. אם המשתנה לא הוגדר, תקבלו את קוד השגיאה:steps.assignmessage.UnresolvedVariable
רזולוציה
חשוב לוודא שהמשתנה שמוזכר במדיניות קיים ושהוא זמין בתהליך הספציפי, שבו מתבצעת המדיניות להקצאת הודעה.
כדי לתקן את המדיניות לדוגמה שמוצגת למעלה, אפשר לשנות את מאפיין המקור ברכיב <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. משתני הזרימה המובנים ב-Edge request
, response
ו-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>
קובעים אם המשתנה הזה הוא מסוג הודעה או לא:
- מאתרים את הקוד בתוך חבילת ה-API של שרת ה-proxy, שבה המשתנה הוגדר קודם.
- אחרי שמבינים קודם את המדיניות שבה המשתנה מוגדר ומאוכלס, צריך לקבוע את סוג המשתנה באופן הבא:
- בודקים את הערך של מאפיין הסוג (אם קיים).
- אם מאפיין הסוג לא קיים, המשתנה נחשב למחרוזת.
- אם סוג המשתנה הוא לא הודעה (למשל מחרוזת), זו הסיבה לשגיאה. מידע נוסף על משתנים נפוצים והסוגים שלהם זמין בחומר העזר בנושא משתנים.
לדוגמה, מעיינים במשתנה PostalCode ב-XML שלמעלה. מוקצה לו הערך של משתנה הזרימה
request.queryparam.postalcode
ברכיב<AssignVariable>
. הערך הזה הוא מחרוזת, כי אין מאפיין סוג בהקצאת המשתנים.עכשיו כדאי לזכור שהמשתנה PostalCode נמצא בשימוש ברכיב
<Copy>
של המדיניות 'הקצאת הודעה':<Copy source="PostalCode"> <QueryParams> <QueryParam name="PostalCode" /> </QueryParams> </Copy>
מכיוון שהמיקוד הוא לא מסוג הודעה (זהו מחרוזת בדוגמה זו), קיבלתם את קוד השגיאה:
steps.assignmessage.VariableOfNonMsgType
רזולוציה
צריך לוודא שהמאפיין source
ברכיב <Copy>
במדיניות הקצאת ההודעה שנכשלה מוגדר כמשתנה זרימה של סוג הודעה שקיים.
כדי לתקן את המדיניות, אפשר לשנות את המאפיין source
ברכיב <Copy>
כך שיציין משתנה מסוג הודעה. לדוגמה, אם המדיניות של הקצאת הודעה אמורה לפעול בתהליך הבקשה, אפשר להשתמש במשתנה של סוג ההודעה request
או בכל משתנה מותאם אישית אחר מסוג ההודעה.
<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>