מוצג המסמך של 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>