मुख्य मान के मैप की कार्रवाई वाले रनटाइम की गड़बड़ी की समस्या हल करना

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 को, की-वैल्यू मैप के ऑपरेशन की नीति में मान्य की-वैल्यू मैप पर सेट किया गया हो.

ऊपर दी गई उदाहरण नीति को ठीक करने के लिए, किसी मौजूदा कीवर्ड वैल्यू मैप UserLocationMap में mapIdentifier की जानकारी दी जा सकती है.

<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. काम न करने वाले कीवर्ड वैल्यू मैप ऑपरेशंस नीति के एक्सएमएल में, पुष्टि करें कि <Get> एलिमेंट के assignTo एट्रिब्यूट में बताए गए वैरिएबल का नाम, गड़बड़ी वाली स्ट्रिंग (ऊपर दिया गया पहला चरण) में पहचाने गए वैरिएबल के नाम से मेल खाता हो. उदाहरण के लिए, नीचे दी गई कीवर्ड वैल्यू मैप ऑपरेशंस की नीति, <Get> एलिमेंट में myvar नाम का एक वैरिएबल बताती है, जो 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 के दायरे में बनाया गया है, तो आपको यह पुष्टि करने के लिए मैनेजमेंट एपीआई का इस्तेमाल करना होगा कि इसे एन्क्रिप्ट किया गया है या नहीं. KVM को मैनेज और इस्तेमाल करना लेख भी पढ़ें.

    यह देखने के लिए कि Edge यूज़र इंटरफ़ेस (यूआई) में एनवायरमेंट के स्कोप वाली KVM एन्क्रिप्ट (सुरक्षित) की गई है या नहीं:

    1. Edge के यूज़र इंटरफ़ेस (यूआई) में, बाईं ओर मौजूद नेविगेशन मेन्यू में एडमिन पर क्लिक करें.
    2. एनवायरमेंट पर क्लिक करें.
    3. की वैल्यू मैप पर क्लिक करें.
    4. वह की-वैल्यू मैप ढूंढें जिसका इस्तेमाल करना है.
    5. वैल्यू की सूची को बड़ा करने के लिए, नाम के बाईं ओर मौजूद ऐरो पर क्लिक करें.
    6. एन्क्रिप्ट किए गए की वैल्यू मैप, यूज़र इंटरफ़ेस (यूआई) में तारे के निशान (*****) के साथ मास्क की गई वैल्यू दिखाते हैं. इस बारे में एन्क्रिप्ट किए गए केवीएम के बारे में जानकारी में बताया गया है.

    यह देखने के लिए कि संगठन, एनवायरमेंट या APIProxy लेवल पर स्कोप किया गया KVM एन्क्रिप्ट किया गया है या नहीं, मैनेजमेंट एपीआई का इस्तेमाल करें. एपीआई का इस्तेमाल करने पर, वैल्यू के लिए एन्क्रिप्ट की गई सेटिंग और तारे, दोनों को दिखाने वाला सैंपल रिस्पॉन्स ऐसा दिखता है:

    {
      "encrypted": true,
      "entry": [
        {
          "name": "foo",
          "value": "*****"
        }
      ],
      "name": "encrypted"
    }
    
  2. अगर कुंजी वैल्यू मैप, एन्क्रिप्ट किया गया केवीएम है और <Get> एलिमेंट के assignTo एट्रिब्यूट में इस्तेमाल किए गए वैरिएबल के नाम में private प्रीफ़िक्स नहीं है. अगर ऐसा है, तो गड़बड़ी की वजह यही है.

    ऊपर दिखाई गई कुंजी मान मैप ऑपरेशन की नीति के उदाहरण में, की-वैल्यू मैप testEncrypted एन्क्रिप्ट (सुरक्षित) किया गया है और वैरिएबल के नाम myvar का प्रीफ़िक्स private नहीं है. इसलिए, आपको गड़बड़ी का यह कोड मिलता है:

    steps.keyvaluemapoperations.SetVariableFailed
    

रिज़ॉल्यूशन

पक्का करें कि कुंजी मान मैप ऑपरेशन नीति के <Get> एलिमेंट के assignTo एट्रिब्यूट में वैरिएबल नाम प्रीफ़िक्स private. है. ऐसा तब होगा, जब इस्तेमाल की गई कुंजी वैल्यू मैप एन्क्रिप्ट (सुरक्षित) की गई हो.

ऊपर दी गई, कुंजी वैल्यू मैप ऑपरेशंस नीति के उदाहरण को ठीक करने के लिए, एट्रिब्यूट की वैल्यू को 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>