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

أنت تعرض مستندات 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. حدِّد ما إذا كان هذا المتغيّر من النوع message أم لا:

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

    على سبيل المثال، انظر إلى المتغير 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>