أنت تطّلع على مستندات Apigee Edge.
انتقِل إلى
مستندات Apigee X. info
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>
ضمن سياسة "تعيين الرسائل":<Copy source="PostalCode"> <QueryParams> <QueryParam name="PostalCode" /> </QueryParams> </Copy>
بما أنّ PostalCode ليس من النوع message (إنّه سلسلة في هذا المثال)، ستتلقّى رمز الخطأ:
steps.assignmessage.VariableOfNonMsgType
الدقة
تأكَّد من ضبط سمة source
في عنصر <Copy>
في سياسة "تعيين الرسالة" التي تعذّر تنفيذها على متغيّر تدفق من النوع message.
لتصحيح السياسة، يمكنك تعديل السمة source
في العنصر <Copy>
لتحديد متغيّر من النوع 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>