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

أنت الآن بصدد الاطّلاع على مستندات Apigee Edge.
انتقِل إلى مستندات Apigee X.
info

UnsupportedOperationException

رمز الخطأ

java.lang.UnsupportedOperationException

نص رد الخطأ

{
   "fault":{
      "faultstring":"java.lang.UnsupportedOperationException",
      "detail":{
         "errorcode":"Internal Server Error"
      }
   }
}

السبب

يحدث هذا الخطأ إذا تم ضبط السمة mapIdentifier على سلسلة فارغة في سياسة "عمليات خريطة القيم الرئيسية".

التشخيص

  1. راجِع جميع سياسات عمليات "خريطة القيم الرئيسية" في خادم وكيل واجهة برمجة التطبيقات المحدّد الذي حدث فيه الخطأ. إذا كانت هناك أي سياسة "عمليات خريطة القيم الرئيسية" تم ضبط السمة mapIdentifier فيها كسلسلة فارغة، سيكون ذلك هو سبب الخطأ.

    على سبيل المثال، تحتوي سياسة "عمليات ربط المفتاح بالقيمة" التالية على mapIdentifier فارغ:

    <KeyValueMapOperations async="false" continueOnError="false" enabled="true" name="StoreKvm" mapIdentifier="">
        <DisplayName>StoreKvm</DisplayName>
        <Properties/>
        <ExclusiveCache>false</ExclusiveCache>
        <ExpiryTimeInSecs>300</ExpiryTimeInSecs>
        <Put override="true">
            <Key>
                <Parameter ref="request.queryparam.key"/>
            </Key>
            <Value ref="request.queryparam.value"/>
        </Put>
        <Scope>apiproxy</Scope>
    </KeyValueMapOperations>
    

الدقة

تأكَّد من ضبط السمة mapIdentifier على خريطة قيم مفاتيح صالحة في سياسة "عمليات خريطة قيم المفاتيح".

لتصحيح مثال السياسة الموضّح أعلاه، يمكنك تحديد mapIdentifier لخريطة قيم مفاتيح حالية UserLocationMap.

<KeyValueMapOperations async="false" continueOnError="false" enabled="true" name="StoreKvm" mapIdentifier="UserLocationMap">
    <DisplayName>StoreKvm</DisplayName>
    <Properties/>
    <ExclusiveCache>false</ExclusiveCache>
    <ExpiryTimeInSecs>300</ExpiryTimeInSecs>
    <Put override="true">
        <Key>
            <Parameter ref="request.queryparam.key"/>
        </Key>
        <Value ref="request.queryparam.value"/>
    </Put>
    <Scope>apiproxy</Scope>
</KeyValueMapOperations>

SetVariableFailed

رمز الخطأ

steps.keyvaluemapoperations.SetVariableFailed

نص رد الخطأ

{
   "fault":{
      "faultstring":"Failed to set variable variable_name in KeyValueMapStepDefinition policy_name",
      "detail":{
         "errorcode":"steps.keyvaluemapoperations.SetVariableFailed"
      }
   }
}

مثال على رسالة الخطأ

{
   "fault":{
      "faultstring":"Failed to set variable myvar in KeyValueMapStepDefinition EncryptedKVM",
      "detail":{
         "errorcode":"steps.keyvaluemapoperations.SetVariableFailed"
      }
   }
}

السبب

يحدث هذا الخطأ إذا حاولت استرداد قيمة من خريطة قيم مفاتيح مشفّرة وضبط القيمة على متغيّر لا يتضمّن اسمه البادئة private.. يخفي البادئة، المطلوبة لأغراض الأمان الأساسية أثناء تصحيح الأخطاء، القيم المشفرة من جلسات التتبُّع وتصحيح الأخطاء في خادم وكيل واجهة برمجة التطبيقات.

التشخيص

1. تحديد سياسة "عمليات خريطة القيم الرئيسية" التي حدث فيها الخطأ واسم المتغير الذي لا يمكن ضبط القيمة عليه يمكنك العثور على هذين العنصرين في عنصر faultstring لردّ الخطأ. على سبيل المثال، في faultstring التالي، اسم السياسة هو EncryptedKVM والمتغيّر هو myvar:

  "faultstring":"Failed to set variable myvar in KeyValueMapStepDefinition EncryptedKVM"

1. في ملف XML الخاص بسياسة "عمليات خريطة قيم المفاتيح" التي تعذّر تنفيذها، تأكَّد من أنّ اسم المتغيّر المحدّد في السمة assignTo للعنصر <Get> يتطابق مع اسم المتغيّر المحدّد في سلسلة الخطأ (الخطوة 1 أعلاه). على سبيل المثال، تحدّد سياسة "عمليات خريطة القيم الرئيسية" التالية متغيّرًا باسم myvar في العنصر <Get>، والذي يتطابق مع ما هو موجود في faultstring:

  <KeyValueMapOperations async="false" continueOnError="false" enabled="true" name="Key-Value-Map-Operations-1" mapIdentifier="testEncrypted">
      <DisplayName>KeyValueMapOperations-1</DisplayName>
      <Properties/>
      <ExclusiveCache>false</ExclusiveCache>
      <ExpiryTimeInSecs>300</ExpiryTimeInSecs>
      <Get assignTo="myvar" index="1">
          <Key>
              <Parameter>foo</Parameter>
          </Key>
      </Get>
      <Scope>environment</Scope>
  </KeyValueMapOperations>
  1. تحقَّق ممّا إذا كانت خريطة قيم المفاتيح المحدّدة في السمة mapIdentifier هي خريطة قيم مفاتيح مشفّرة. إذا تم تشفير خريطة القيمة الرئيسية (KVM) على مستوى البيئة، يمكنك التأكّد من تشفيرها في واجهة مستخدم Edge. بخلاف ذلك، إذا تم إنشاؤها على مستوى المؤسسة أو نطاق apiproxy، عليك استخدام Management API للتحقّق مما إذا كانت مشفّرة. يمكنك أيضًا الاطّلاع على إدارة آلات KVM واستخدامها.

    للتحقّق مما إذا كان مفتاح KVM بنطاق بيئة مشفّرًا في واجهة مستخدم Edge، اتّبِع الخطوات التالية:

    1. في واجهة مستخدم Edge، انقر على المشرف في قائمة التنقل اليمنى.
    2. انقر على البيئات.
    3. انقر على خرائط القيم الرئيسية.
    4. ابحث عن "خريطة القيم الرئيسية" التي تريد استخدامها.
    5. انقر على السهم الموجود على يمين الاسم لتوسيع قائمة القيم.
    6. تعرض "خرائط قيم المفاتيح المشفرة" القيم المخفية بعلامات نجمية في واجهة المستخدم (*****) كما هو موضّح في لمحة عن "خرائط قيم المفاتيح المشفرة".

    للتحقّق مما إذا كانت &quot;خريطة قيم المفاتيح&quot; (KVM) ذات نطاق محدّد على مستوى المؤسسة أو البيئة أو apiproxy مشفّرة، استخدِم واجهات برمجة التطبيقات الإدارية. إذا كنت تستخدم واجهة برمجة التطبيقات، ستبدو استجابة نموذجية تعرض الإعداد المشفّر وعلامات النجمة للقيمة على النحو التالي:

    {
      "encrypted": true,
      "entry": [
        {
          "name": "foo",
          "value": "*****"
        }
      ],
      "name": "encrypted"
    }
    
  2. إذا كانت خريطة قيم المفاتيح عبارة عن خريطة قيم مفاتيح مشفّرة ولم يكن اسم المتغيّر المستخدَم في السمة assignTo للعنصر <Get> يتضمّن البادئة private. إذًا هذا هو سبب الخطأ.

    في مثال سياسة "عمليات خريطة قيم المفاتيح" الموضّح أعلاه، يتم تشفير خريطة قيم المفاتيح testEncrypted ولا يتضمّن اسم المتغيّر myvar البادئة private. وبالتالي، ستتلقّى رمز الخطأ التالي:

    steps.keyvaluemapoperations.SetVariableFailed
    

الدقة

تأكَّد من أنّ اسم المتغيّر يتضمّن البادئة private. في السمة assignTo للعنصر <Get> في سياسة "عمليات خريطة القيم الرئيسية" إذا كانت خريطة القيم الرئيسية المستخدَمة مشفّرة.

لتصحيح مثال سياسة "عمليات خريطة المفتاح والقيمة" الموضّحة أعلاه، يمكنك تعديل قيمة السمة assignTo إلى private.myvar:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<KeyValueMapOperations async="false" continueOnError="false" enabled="true" name="Key-Value-Map-Operations-1" mapIdentifier="testEncrypted">
    <DisplayName>KeyValueMapOperations-1</DisplayName>
    <Properties/>
    <ExclusiveCache>false</ExclusiveCache>
    <ExpiryTimeInSecs>300</ExpiryTimeInSecs>
    <Get assignTo="private.myvar" index="1">
        <Key>
            <Parameter>foo</Parameter>
        </Key>
    </Get>
    <Scope>environment</Scope>
</KeyValueMapOperations>