כרגע מוצג התיעוד של Apigee Edge.
כניסה למסמכי התיעוד של
Apigee X. מידע
RequestVariableNotMessageType
קוד שגיאה
steps.servicecallout.RequestVariableNotMessageType
גוף התגובה לשגיאה
{ "fault": { "faultstring": "ServiceCallout[policy_name]: request variable [variable_name] value is not of type Message", "detail": { "errorcode": "steps.servicecallout.RequestVariableNotMessageType" } } }
סיבה
השגיאה הזו מתרחשת אם משתנה שצוין ברכיב <Request>
של המדיניות בנושא יתרונות מרכזיים של שירות אינו מסוג הודעה. אם המשתנה הוא מחרוזת או כל סוג אחר שאינו הודעה, תוצג הודעת השגיאה הזו.
משתנים של סוגי הודעות מייצגים את כל הבקשות והתגובות של HTTP. משתני הזרימה המובנים של Edge request
, response
ו-message
הם מסוג הודעה. מידע נוסף על משתני הודעות אפשר למצוא במאמר מידע על משתנים.
אבחון
מזהים את המדיניות בנושא היתרונות המרכזיים של השירות שבה אירעה השגיאה ואת שם המשתנה שהסוג שלו שגוי. אפשר למצוא את שני הפריטים האלה ברכיב
faultstring
של הודעת השגיאה. לדוגמה, בשדהfaultstring
הבא, שם המדיניות הואExecuteGeocodingRequest
והמשתנה הואPostalCode
:"faultstring": "ServiceCallout[ExecuteGeocodingRequest]: request variable PostalCode value is not of type Message"
ב-XML של המדיניות בנושא יתרונות מרכזיים של שירות שנכשל, מוודאים ששם המשתנה שהוגדר ברכיב
<Request>
תואם לשם המשתנה שזוהה במחרוזת השגיאה (שלב 1 למעלה). לדוגמה, המדיניות הבאה מציינת משתנה בקשה בשםPostalCode
שתואם למה שמופיע ב-faultstring
:<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ServiceCallout name="ExecuteGeocodingRequest"> <Request variable="PostalCode"/> <Response>GeocodingResponse</Response> <HTTPTargetConnection> <URL>http://maps.googleapis.com/maps/api/geocode/json</URL> </HTTPTargetConnection> </ServiceCallout>
כך קובעים אם המשתנה הזה הוא מסוג הודעה או לא:
- מאתרים את הקוד בחבילה של שרת ה-API של שרת ה-proxy, במקום שבו המשתנה הוגדר קודם.
- ברוב המקרים, המשתנה של הבעיה נוצר ומאוכלס במדיניות אחרת שמופעלת לפני המדיניות בנושא 'יתרונות מרכזיים של שירות'. לדוגמה, המדיניות בנושא הקצאת הודעות משמשת בדרך כלל ליצירה ולאכלוס של משתנים בזרימה של שרת proxy ל-API.
- אחרי שמבינים מהי המדיניות שבה המשתנה מוגדר ומאוכלס קודם, צריך לקבוע את הסוג של המשתנה באופן הבא:
- יש לבדוק את ערך המאפיין
type
(אם יש כזה). - אם המאפיין
type
לא קיים, המשתנה נחשב למחרוזת.
- יש לבדוק את ערך המאפיין
- אם סוג המשתנה הוא מסוג שאינו הודעה (למשל מחרוזת), זה הגורם לשגיאה. מידע נוסף על משתנים נפוצים ועל הסוגים שלהם זמין בחומר העזר בנושא משתנים.
לדוגמה, נניח שהמשתנה PostalCode
שמוזכר במדיניות 'יתרונות מרכזיים של שירות' נוצר במדיניות הבאה של הקצאת הודעה. לתשומת ליבכם: ל-PostalCode
מוקצה הערך של משתנה הזרימה request.queryparam.postalcode
. הערך הזה הוא מחרוזת כי אין מאפיין type
בהקצאת המשתנים.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AssignMessage name="GenerateGeocodingRequest">
<AssignTo createNew="true" type="request">GeocodingRequest</AssignTo>
<Set>
<QueryParams>
<QueryParam name="address">{request.queryparam.postalcode}</QueryParam>
<QueryParam name="region">{request.queryparam.country}</QueryParam>
<QueryParam name="sensor">false</QueryParam>
</QueryParams>
<Verb>GET</Verb>
</Set>
<AssignVariable>
<Name>PostalCode</Name>
<Ref>request.queryparam.postalcode</Ref>
</AssignVariable>
<AssignVariable>
<Name>Country</Name>
<Ref>request.queryparam.country</Ref>
</AssignVariable>
</AssignMessage>
עכשיו חשוב לזכור שהמשתנה PostalCode
נמצא בשימוש ברכיב <Request>
של המדיניות בנושא יתרונות מרכזיים של שירות:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ServiceCallout name="ExecuteGeocodingRequest">
<Request variable="PostalCode"/>
<Response>GeocodingResponse</Response>
<HTTPTargetConnection>
<URL>http://maps.googleapis.com/maps/api/geocode/json</URL>
</HTTPTargetConnection>
</ServiceCallout>
מכיוון ש-PostalCode
אינו מסוג הודעות (זהו מחרוזת בדוגמה הזו), אתה מקבל את קוד השגיאה: steps.servicecallout.RequestVariableNotMessageType
.
רזולוציה
צריך לוודא שהמשתנה המוגדר באלמנט <Request>
במדיניות בנושא יתרונות מרכזיים של שירות שנכשלו הוא משתנה קיים של זרימת סוג הודעה. לחלופין, אפשר ליצור משתנה חדש של סוג הודעה ישירות במדיניות 'יתרונות מרכזיים של שירות' (כפי שמוסבר במסמכי המדיניות) ולהשתמש בו.
כדי לתקן את המדיניות, צריך לשנות את הרכיב <Request>
כך שיציין משתנה קיים או חדש מסוג הודעה. לדוגמה, המשתנה GeocodingRequest
שהוגדר במדיניות של הקצאת הודעה הוא מסוג הודעה, והוא יפעל כראוי במדיניות 'יתרונות מרכזיים של שירות'. לדוגמה:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ServiceCallout name="ExecuteGeocodingRequest">
<Request variable="GeocodingRequest"/>
<Response>GeocodingResponse</Response>
<HTTPTargetConnection>
<URL>http://maps.googleapis.com/maps/api/geocode/json</URL>
</HTTPTargetConnection>
</ServiceCallout>
RequestVariableNotRequestMessageType
קוד שגיאה
steps.servicecallout.RequestVariableNotRequestMessageType
גוף התגובה לשגיאה
{ "fault": { "faultstring": "ServiceCallout[policy_name]: request variable [variable_name] value is not of type Request Message", "detail": { "errorcode": "steps.servicecallout.RequestVariableNotRequestMessageType" } } }
סיבה
השגיאה הזו מתרחשת אם משתנה שצוין ברכיב <Request>
במדיניות היתרונות המרכזיים של השירות אינו מסוג הודעת בקשה. אם המשתנה הוא סוג של הודעת תגובה, מחרוזת או כל סוג אחר, תוצג הודעת השגיאה הזו.
משתני סוג הודעה מייצגים שלמות של בקשות HTTP ותגובות. משתני הזרימה המובנים של Edge request
, response
ו-message
הם מסוג הודעה. מידע נוסף על משתני הודעות אפשר למצוא במאמר מידע על משתנים.
אבחון
מזהים את המדיניות בנושא היתרונות המרכזיים של השירות שבה אירעה השגיאה ואת שם המשתנה שהסוג שלו שגוי. אפשר למצוא את שני הפריטים האלה ברכיב
faultstring
של הודעת השגיאה. לדוגמה, בשדהfaultstring
הבא, שם המדיניות הואExecuteGeocodingRequest
והמשתנה הואvar_response
:"faultstring": "ServiceCallout[ExecuteGeocodingRequest]: request variable var_response value is not of type Message"
ב-XML של המדיניות בנושא יתרונות מרכזיים של שירות שנכשל, מוודאים ששם המשתנה שהוגדר ברכיב
<Request>
תואם לשם המשתנה שזוהה במחרוזת השגיאה (שלב 1 למעלה). לדוגמה, המדיניות הבאה מציינת משתנה בקשה בשםvar_response
שתואם למה שמופיע ב-faultstring
:<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ServiceCallout name="ExecuteGeocodingRequest"> <Request variable="var_response"/> <Response>GeocodingResponse</Response> <HTTPTargetConnection> <URL>http://maps.googleapis.com/maps/api/geocode/json</URL> </HTTPTargetConnection> </ServiceCallout>
קובעים אם המשתנה הוא מסוג הודעת בקשה או לא:
- מאתרים את הקוד בחבילה של שרת ה-API של שרת ה-proxy, במקום שבו המשתנה הוגדר קודם.
- ברוב המקרים, המשתנה של הבעיה נוצר ומאוכלס במדיניות אחרת שמופעלת לפני המדיניות בנושא 'יתרונות מרכזיים של שירות'. לדוגמה, המדיניות בנושא הקצאת הודעות משמשת בדרך כלל ליצירה ולאכלוס של משתנים בזרימה של שרת proxy ל-API.
- אחרי שמבינים מהי המדיניות שבה המשתנה מוגדר ומאוכלס קודם, צריך לקבוע את הסוג של המשתנה באופן הבא:
- יש לבדוק את ערך המאפיין
type
(אם יש כזה). - אם המאפיין
type
לא קיים, המשתנה נחשב למחרוזת.
- יש לבדוק את ערך המאפיין
- אם סוג המשתנה הוא לא מסוג הודעת בקשה, זו הסיבה לשגיאה. מידע נוסף על משתנים נפוצים ועל הסוגים שלהם זמין בחומר העזר בנושא משתנים.
לדוגמה, נניח שהמשתנה var_response
שמוזכר במדיניות 'יתרונות מרכזיים של שירות' נוצר במדיניות הבאה של הקצאת הודעה. לתשומת ליבך, var_response
הוא הסוג response
. לכן, סוג המשתנה var_response
הוא הודעת תשובה.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AssignMessage name="GenerateGeocodingRequest">
<AssignTo createNew="true" type="request">GeocodingRequest</AssignTo>
<AssignTo createNew="true" type="response">var_response</AssignTo>
<Set>
<QueryParams>
<QueryParam name="address">{request.queryparam.postalcode}</QueryParam>
<QueryParam name="region">{request.queryparam.country}</QueryParam>
<QueryParam name="sensor">false</QueryParam>
</QueryParams>
<Verb>GET</Verb>
</Set>
<AssignVariable>
<Name>PostalCode</Name>
<Ref>request.queryparam.postalcode</Ref>
</AssignVariable>
<AssignVariable>
<Name>Country</Name>
<Ref>request.queryparam.country</Ref>
</AssignVariable>
</AssignMessage>
חשוב לזכור שהמשתנה var_response
נמצא בשימוש ברכיב <Request>
של המדיניות בנושא יתרונות מרכזיים של שירות.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ServiceCallout name="ExecuteGeocodingRequest">
<Request variable="var_response"/>
<Response>GeocodingResponse</Response>
<HTTPTargetConnection>
<URL>http://maps.googleapis.com/maps/api/geocode/json</URL>
</HTTPTargetConnection>
</ServiceCallout>
מכיוון ש-var_response
אינו מסוג הודעת בקשה (הסוג שלו הוא הודעת תגובה), קיבלת את קוד השגיאה: steps.servicecallout.RequestVariableNotRequestMessageType
.
רזולוציה
צריך לוודא שהמשתנה המוגדר באלמנט <Request>
במדיניות היתרונות המרכזיים של השירות נכשל הוא משתנה מסוג בקשה להודעה שקיים. לחלופין, אפשר ליצור משתנה חדש של סוג הודעת בקשה ישירות במדיניות בנושא יתרונות מרכזיים של שירות (כפי שמוסבר במסמכי המדיניות) ולהשתמש בו.
כדי לתקן את המדיניות, צריך לשנות את הרכיב <Request>
כך שיציין משתנה קיים או חדש מסוג בקשת בקשה, והמשתנה יפעל במדיניות 'יתרונות מרכזיים של שירות'. לדוגמה:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ServiceCallout name="ExecuteGeocodingRequest">
<Request variable="GeocodingRequest"/>
<Response>GeocodingResponse</Response>
<HTTPTargetConnection>
<URL>http://maps.googleapis.com/maps/api/geocode/json</URL>
</HTTPTargetConnection>
</ServiceCallout>
ExecutionFailed
קוד שגיאה
steps.servicecallout.ExecutionFailed
גוף התגובה לשגיאה
{ "fault": { "faultstring": "Execution of ServiceCallout [policy_name] failed. Reason: Host not reachable", "detail": { "errorcode": "steps.servicecallout.ExecutionFailed" } } }
או
{ "fault": { "faultstring": "Execution of ServiceCallout [policy_name] failed. Reason: ResponseCode [http_code] is treated as error", "detail": { "errorcode": "steps.servicecallout.ExecutionFailed" } } }
גורמים אפשריים
הסיבות האפשריות לשגיאה הזו הן:
הסיבה | תיאור |
כתובת URL לא חוקית או שגויה | כתובת ה-URL של היעד במדיניות בנושא יתרונות מרכזיים של שירות לא תקינה או שיש בה שם מארח לא תקין או לא נגיש. |
שגיאת שרת בקצה העורפי | שרת הקצה העורפי מחזיר תגובה 4XX או 5XX. |
הסיבה: כתובת URL לא תקינה או שגויה
כתובת ה-URL של היעד במדיניות בנושא יתרונות מרכזיים של שירות לא תקינה או שיש בה שם מארח לא תקין או לא נגיש.
אבחון
מזהים את המדיניות בנושא היתרונות המרכזיים של השירות שגרמה לשגיאה. שם המדיניות מופיע ברכיב
faultstring
של תגובת השגיאה. לדוגמה, בשדהfaultstring
הבא, שם המדיניות של נכס היתרונות המרכזיים של השירות שנכשלו הואExecuteGeocodingRequest
."faultstring": "ServiceCallout[ExecuteGeocodingRequest]"
במדיניות בנושא יתרונות מרכזיים של שירות שנכשלה, יש לבחון את הרכיב
<URL>
. אם שם המארח שגוי או שלא ניתן לגשת אליו, זו הסיבה לשגיאה. לדוגמה, המדיניות הבאה של נכסי יתרונות מרכזיים של שירות מציינת<URL>
לא חוקי:<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ServiceCallout name="ExecuteGeocodingRequest"> <Request variable="GeocodingRequest"/> <Response>GeocodingResponse</Response> <HTTPTargetConnection> <URL>http://</URL> </HTTPTargetConnection> </ServiceCallout>
הרכיב
<URL>
מכיל רק את הפרוטוקולhttp://
, אבל אין לו שם מארח חוקי. לכן, המדיניות 'יתרונות מרכזיים של שירות' נכשלת ומוצגת השגיאהExecution of ServiceCallout ExecuteGeocodingRequest failed. Reason: Host not reachable
.
רזולוציה
יש לוודא שלאלמנט <URL>
במדיניות בנושא יתרונות מרכזיים של שירות נכשלה יש כתובת URL חוקית עם שם מארח שניתן להגיע אליו.
כדי לתקן את המדיניות בנושא יתרונות מרכזיים של שירות שמוצגת למעלה, אפשר לשנות את הרכיב <URL>
ולציין כתובת URL חוקית:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ServiceCallout name="ExecuteGeocodingRequest">
<Request variable="GeocodingRequest"/>
<Response>GeocodingResponse</Response>
<HTTPTargetConnection>
<URL>http://maps.googleapis.com/maps/api/geocode/json</URL>
</HTTPTargetConnection>
</ServiceCallout>
הסיבה: שגיאה בשרת הקצה העורפי
שרת הקצה העורפי מחזיר תגובה 4XX או 5XX.
אבחון
מזהים את המדיניות בנושא היתרונות המרכזיים של השירות שגרמה לשגיאה. שם המדיניות מופיע ברכיב
faultstring
של תגובת השגיאה. לדוגמה, בשדהfaultstring
הבא, שם המדיניות של נכס היתרונות המרכזיים של השירות שנכשלו הואExecuteGeocodingRequest
."faultstring": "ServiceCallout[ExecuteGeocodingRequest]
יש לבדוק את
faultstring
בגוף התגובה לשגיאה ולבדוק אם יש קודי תגובה מסוג 4XX או 5XX שמפורטים בReason
. לדוגמה, מחרוזת הבאג הבאה מציינת בבירור שקוד תגובה 502 הוחזר משרת הקצה העורפי:"faultstring": "Execution of ServiceCallout ExecuteGeocodingRequest failed. Reason: ResponseCode 502 is treated as error"
רזולוציה
אחרי שמגלים את קוד התגובה לשגיאה, אפשר לפתור את הבעיה בדיוק כמו שעושים עם כל שגיאה מסוג 4XX או 5XX. במדריכים בנושא שגיאת זמן ריצה (4XX/5XX) אפשר למצוא הוראות לפתרון בעיות ולפתרון שגיאות מסוג 4XX או 5XX.