אתם צופים במסמכי התיעוד של 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 של מדיניות Assign Message שנכשלה, מוודאים שהשם של המשתנה שבו נעשה שימוש זהה לשם המשתנה שזוהה במחרוזת השגיאה (שלב 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מוגדר באחת מהמדיניות שמופעלות לפני מדיניות 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>. הערך הזה הוא מחרוזת, כי אין מאפיין סוג בהקצאת המשתנה.עכשיו נזכיר שהמשתנה 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>