أنت تطّلع على مستندات Apigee Edge.
انتقِل إلى
مستندات Apigee X. info
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>
في سياسة وسيلة شرح الخدمة من النوع message. إذا كان المتغيّر سلسلة أو أي نوع آخر غير رسالة، ستظهر لك رسالة الخطأ هذه.
تمثِّل متغيّرات نوع الرسالة طلبات واستجابات 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>
حدِّد ما إذا كان هذا المتغيّر من النوع message أم لا:
- حدِّد موقع الرمز داخل حزمة الخادم الوكيل لواجهة برمجة التطبيقات، حيث تم تحديد المتغيّر أولاً.
- في معظم الحالات، ستلاحظ أنّ متغيّر المشكلة يتم إنشاؤه وتعبئته في سياسة أخرى يتم تنفيذها قبل سياسة عرض معلومات الخدمة. على سبيل المثال، يتم عادةً استخدام سياسة "تعيين رسالة" لإنشاء المتغيّرات وتعبئتها في مسار الخادم الوكيل لواجهة برمجة التطبيقات.
- بعد معرفة السياسة التي تم فيها تعريف المتغيّر وملؤه أولاً، عليك تحديد نوع هذا المتغيّر على النحو التالي:
- تحقّق من قيمة سمة
type
(في حال توفّرها). - إذا لم تتوفّر السمة
type
، يُعتبر المتغيّر سلسلة.
- تحقّق من قيمة سمة
- إذا كان نوع المتغير ليس رسالة (مثل سلسلة)، يكون هذا هو سبب الخطأ. يمكنك التعرّف على المتغيّرات الشائعة وأنواعها في مرجع المتغيّرات.
على سبيل المثال، لنفترض أنّه تم إنشاء المتغيّر PostalCode
المُشار إليه في سياسة Service Callout في سياسة Assign Message التالية. تجدر الإشارة إلى أنّه تمّ تعيين قيمة متغيّر التدفق request.queryparam.postalcode
إلى 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>
لتحديد متغيّر حالي أو جديد من النوع message. على سبيل المثال، المتغيّر 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
، من النوع 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>
تحديد ما إذا كان المتغيّر من نوع رسالة الطلب أم لا:
- حدِّد موقع الرمز داخل حزمة الخادم الوكيل لواجهة برمجة التطبيقات، حيث تم تحديد المتغيّر أولاً.
- في معظم الحالات، ستلاحظ أنّ متغيّر المشكلة يتم إنشاؤه وتعبئته في سياسة أخرى يتم تنفيذها قبل سياسة عرض معلومات الخدمة. على سبيل المثال، يتم عادةً استخدام سياسة "تعيين رسالة" لإنشاء المتغيّرات وتعبئتها في مسار الخادم الوكيل لواجهة برمجة التطبيقات.
- بعد معرفة السياسة التي تم فيها تعريف المتغيّر وملؤه أولاً، عليك تحديد نوع هذا المتغيّر على النحو التالي:
- تحقّق من قيمة سمة
type
(في حال توفّرها). - إذا لم تتوفّر السمة
type
، يُعتبر المتغيّر سلسلة.
- تحقّق من قيمة سمة
- إذا لم يكن نوع المتغيّر من النوع request message، يكون هذا هو سبب الخطأ. يمكنك التعرّف على المتغيّرات الشائعة وأنواعها في مرجع المتغيّرات.
على سبيل المثال، لنفترض أنّ المتغيّر 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.