הדף הזה רלוונטי ל-Apigee ול-Apigee Hybrid.
לעיון במסמכי התיעוד של Apigee Edge
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.
אם המשתנה הוא:
- מחוץ להיקף (לא זמין בתהליך הספציפי שבו המדיניות מופעלת) או
- לא ניתן לפתור (לא מוגדר)
אז זה הגורם לשגיאה.
לדוגמה, נניח שמדיניות הקצאת ההודעה שמוצגת למעלה מופעלת בתהליך הבקשה. בודקים אם המשתנה
varמוגדר באחת מהמדיניות שמופעלות לפני מדיניות Assign Message בזרימת הבקשה. אם המשתנה לא הוגדר, תקבלו את קוד השגיאה: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. משתני הזרימה המובנים request, response ו-message הם מסוג הודעה. מידע נוסף על משתני הודעות זמין במאמר בנושא משתנים.
אבחון
מזהים את מדיניות הקצאת ההודעות שבה התרחשה השגיאה ואת שם המשתנה שהסוג שלו שגוי. אפשר למצוא את שני הפריטים האלה ברכיב
faultstringשל תגובת השגיאה. לדוגמה, ברכיבfaultstringהבא, שם המדיניות הואGenerateGeocodingRequestוהמשתנה הואPostalCode:"faultstring": "AssignMessage[GenerateGeocodingRequest]: value of variable PostalCode is not of type Message"בקובץ ה-XML של מדיניות Assign Message שנכשל, מוודאים שהשם של המשתנה שהוגדר באלמנט
<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>. הערך הזה הוא מחרוזת, כי אין מאפיין type בהקצאת המשתנה.עכשיו, נזכיר שהמשתנה PostalCode משמש ברכיב
<Copy>של מדיניות Assign Message:<Copy source="PostalCode"> <QueryParams> <QueryParam name="PostalCode" /> </QueryParams> </Copy>מכיוון ש-PostalCode הוא לא מסוג הודעה (הוא מחרוזת בדוגמה הזו), מתקבל קוד השגיאה:
steps.assignmessage.VariableOfNonMsgType
רזולוציה
מוודאים שהמאפיין source ברכיב <Copy> במדיניות Assign Message שנכשלה מוגדר למשתנה זרימה מסוג message שקיים.
כדי לתקן את המדיניות, אפשר לשנות את המאפיין source ברכיב <Copy> כדי לציין משתנה מסוג הודעה. לדוגמה, אם מדיניות Assign Message אמורה לפעול בתהליך הבקשה, אפשר להשתמש במשתנה מסוג הודעה 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>