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

أنت تطّلع على مستندات 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. إذا تم تشفير KVM على مستوى نطاق البيئة، يمكنك التحقّق من تشفيره في واجهة مستخدم Edge. بخلاف ذلك، إذا تم إنشاؤه على مستوى المؤسسة أو نطاق apiproxy، عليك استخدام Management API للتحقّق مما إذا كان مشفَّرًا. يُرجى الاطّلاع أيضًا على إدارة وحدات التحكّم في واجهة المستخدم (KVM) واستخدامها.

    للتحقّق مما إذا كان قد تم تشفير وحدة تحكّم افتراضية للمؤسسات على مستوى البيئة في واجهة مستخدم Edge:

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

    للتحقّق مما إذا كان خادم KVM مشفَّرًا على مستوى المؤسسة أو البيئة أو apiproxy، استخدِم Management APIs. في حال استخدام واجهة برمجة التطبيقات، سيظهر نموذج الاستجابة الذي يعرض كلّ من الإعداد المشفَّر والعلامات النجمية للقيمة على النحو التالي:

    {
      "encrypted": true,
      "entry": [
        {
          "name": "foo",
          "value": "*****"
        }
      ],
      "name": "encrypted"
    }
    
  2. إذا كانت خريطة قيم المفاتيح هي مفتاح تشفير مرئي (KVM) مشفَّر ولم يكن لاسم المتغيّر المستخدَم في سمة 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>