تحديد وحلّ المشاكل المتعلقة بخطأ وقت تشغيل الرسالة

أنت تطّلع على مستندات 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 أو أي متغيّر مخصّص آخر غير متوفّر في مسار الطلب.

التشخيص

  1. حدِّد سياسة تعيين الرسائل التي حدث فيها الخطأ واسم المتغيّر غير المتاح. يمكنك العثور على كلا العنصرين في العنصر faultstring في استجابة الخطأ.

    على سبيل المثال، في سياسة faultstring التالية، يكون اسم السياسة هو googleBook والمتغيّر هو var:

    "faultstring": "AssignMessage[googleBook]: unable to resolve variable var"
    
  2. في ملف 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>
    
  3. حدِّد ما إذا كان المتغيّر محدّدًا ومتاحًا في المسار الذي يتم تنفيذ سياسة "تعيين الرسالة" فيه.

  4. إذا كان المتغيّر:

    1. خارج النطاق (غير متوفّر في المسار المحدّد الذي يتم تنفيذ السياسة فيه)
    2. لا يمكن حلّه (لم يتم تحديده)

    فهذا هو سبب الخطأ.

    على سبيل المثال، لنفترض أنّ سياسة "تعيين الرسالة" الموضّحة أعلاه يتم تنفيذها في مسار الطلب. تحقّق مما إذا كان المتغيّر 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 من نوع الرسالة. لمعرفة المزيد من المعلومات عن متغيّرات الرسائل، اطّلِع على مرجع المتغيّرات.

التشخيص

  1. حدِّد سياسة تعيين الرسائل التي حدث فيها الخطأ واسم المتغيّر الذي يكون نوعه غير صحيح. يمكنك العثور على كلا العنصرَين في عنصر faultstring من استجابة الخطأ. على سبيل المثال، في العنصر faultstring التالي، اسم السياسة هو GenerateGeocodingRequest والمتغيّر هو PostalCode:

    "faultstring": "AssignMessage[GenerateGeocodingRequest]: value of variable PostalCode is not of type Message"
    
  2. في ملف 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>
    
  3. حدِّد ما إذا كان هذا المتغيّر من النوع message أم لا:

    1. حدِّد مكان الرمز ضمن حِزمة "الوكيل لواجهة برمجة التطبيقات"، حيث تم تعريف المتغيّر أولاً.
    2. بعد تحديد السياسة التي تم فيها تعريف المتغيّر وملؤه أولاً، عليك تحديد نوع هذا المتغيّر على النحو التالي:
      1. تحقّق من قيمة سمة type (إذا كانت متوفّرة).
      2. إذا لم تكن سمة type متوفّرة، يُعتبَر المتغيّر سلسلة.
    3. إذا كان نوع المتغيّر غير رسالة (مثل سلسلة)، هذا هو سبب الخطأ. يمكنك الاطّلاع على المتغيّرات الشائعة وأنواعها في مرجع المتغيّرات.

    على سبيل المثال، اطّلِع على متغيّر 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>