عیب یابی خطای زمان اجرا Key Value Map Operations، عیب یابی خطای زمان اجرا Key Value Map Operations

شما در حال مشاهده اسناد Apigee Edge هستید.
به مستندات Apigee X بروید .
اطلاعات

UnsupportedOperationException

کد خطا

java.lang.UnsupportedOperationException

بدنه پاسخ به خطا

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

علت

این خطا در صورتی رخ می دهد که ویژگی mapIdentifier روی یک رشته خالی در خط مشی Key Value Map Operations تنظیم شده باشد.

تشخیص

  1. همه خط‌مشی‌های عملیات نقشه ارزش کلیدی را در پراکسی API خاصی که در آن خرابی رخ داده است، بررسی کنید. اگر خط مشی عملیات Map Value Key وجود داشته باشد که در آن ویژگی mapIdentifier به عنوان یک رشته خالی تنظیم شده باشد، دلیل این خطا است.

    به عنوان مثال، خط مشی عملیات Map Value Key زیر دارای یک 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. . پیشوندی که برای اهداف امنیتی اولیه در حین اشکال‌زدایی لازم است، مقادیر رمزگذاری‌شده را از ردیابی پراکسی API و جلسات اشکال‌زدایی پنهان می‌کند.

تشخیص

1. خط مشی Key Value Map Operations را که در آن خطا رخ داده است و نام متغیری را که مقدار را نمی توان روی آن تنظیم کرد، شناسایی کنید. شما می توانید هر دوی این موارد را در عنصر faultstring پاسخ خطا پیدا کنید. به عنوان مثال، در faultstring زیر، نام سیاست EncryptedKVM و متغیر myvar است:

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

1. در XML خط مشی عملیات Map Value Key ناموفق، بررسی کنید که نام متغیر مشخص شده در ویژگی 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 ایجاد شده باشد، باید از مدیریت API استفاده کنید تا رمزگذاری شده بودن آن را تأیید کنید. همچنین به مدیریت و استفاده از KVM ها مراجعه کنید.

    برای بررسی اینکه آیا یک KVM با محدوده محیطی در رابط کاربری Edge رمزگذاری شده است:

    1. در رابط کاربری Edge، روی Admin در منوی ناوبری سمت چپ کلیک کنید.
    2. روی Environments کلیک کنید.
    3. روی Maps ارزش کلیدی کلیک کنید.
    4. نقشه ارزش کلیدی را که می خواهید استفاده کنید پیدا کنید.
    5. برای گسترش لیست مقادیر، روی فلش سمت چپ نام کلیک کنید.
    6. نقشه‌های ارزش کلید رمزگذاری‌شده مقادیر را با ستاره در UI (*****) نشان می‌دهند که در درباره درباره KVM‌های رمزگذاری شده نشان داده شده است.

    برای بررسی اینکه آیا یک KVM در محدوده سازمان، محیط یا سطح آپی پروکسی رمزگذاری شده است، از APIهای مدیریت استفاده کنید. اگر از API استفاده می‌کنید، یک پاسخ نمونه که هم تنظیمات رمزگذاری شده و هم ستاره‌های مقدار را نشان می‌دهد به این صورت است:

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