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

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

التشخيص

  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. حدِّد موقع الرمز داخل حزمة الخادم الوكيل لواجهة برمجة التطبيقات، حيث تم تحديد المتغيّر أولاً.
    2. بعد تحديد السياسة التي يتم تحديد المتغيّر فيها وتعبئتها أولاً، عليك تحديد نوع ذلك المتغيّر على النحو التالي:
      1. تحقق من قيمة سمة type (إن كانت موجودة).
      2. إذا كانت سمة type غير موجودة، فسيتم اعتبار المتغير على أنه سلسلة.
    3. إذا كان نوع المتغيّر لا يمثّل رسالة (مثل سلسلة)، يكون هذا هو سبب الخطأ. يمكنك الاطّلاع على المتغيّرات الشائعة وأنواعها في مرجع المتغيّرات.

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

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

    <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>