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

أنت الآن بصدد الاطّلاع على مستندات 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. تحديد ما إذا كان هذا المتغيّر من نوع الرسالة أم لا:

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

    على سبيل المثال، اطّلِع على المتغيّر PostalCode في ملف XML أعلاه. يتم تعيين قيمة متغيّر التدفق request.queryparam.postalcode في العنصر <AssignVariable>. هذه القيمة هي سلسلة، لأنّه لا توجد سمة نوع في تعيين المتغيّر.

    تذكَّر الآن أنّ المتغيّر PostalCode يُستخدَم في العنصر <Copy> من سياسة "تعيين الرسالة":

    <Copy source="PostalCode">
       <QueryParams>
          <QueryParam name="PostalCode" />
       </QueryParams>
    </Copy>
    

    بما أنّ PostalCode ليس من نوع الرسالة (بل هو سلسلة في هذا المثال)، سيظهر لك رمز الخطأ التالي:

    steps.assignmessage.VariableOfNonMsgType
    

الدقة

تأكَّد من ضبط السمة source في العنصر <Copy> في سياسة "تعيين الرسالة" التي تعذّر تنفيذها على متغيّر تدفق من النوع message المتوفّر.

لتصحيح السياسة، يمكنك تعديل السمة 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>