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

يتم الآن عرض مستندات Apigee Edge.
انتقِل إلى مستندات Apigee X.
المعلومات

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 واستخدامها.

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

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

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

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

    في مثال سياسة عمليات ربط القيم الرئيسية الموضّحة أعلاه، يتم تشفير خريطة قيمة المفتاح 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>