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