Apigee Edge का दस्तावेज़ देखा जा रहा है.
Apigee X दस्तावेज़ पर जाएं. जानकारी
UnsupportedOperationException
गड़बड़ी का कोड
java.lang.UnsupportedOperationException
गड़बड़ी का जवाब
{
"fault":{
"faultstring":"java.lang.UnsupportedOperationException",
"detail":{
"errorcode":"Internal Server Error"
}
}
}
वजह
यह गड़बड़ी तब होती है, जब कीवर्ड वैल्यू मैप ऑपरेशंस नीति में mapIdentifier
एट्रिब्यूट को खाली स्ट्रिंग पर सेट किया गया हो.
संक्रमण की जांच
उस खास एपीआई प्रॉक्सी में, पासकोड की वैल्यू मैप की कार्रवाइयों की सभी नीतियों की जांच करें जो गड़बड़ी हुई हैं. अगर कोई ऐसी कीवर्ड वैल्यू मैप ऑपरेशंस नीति है जिसमें
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>
देखें कि
mapIdentifier
एट्रिब्यूट में दिया गया की-वैल्यू मैप, एन्क्रिप्ट किया गया KVM है या नहीं. अगर KVM को एनवायरमेंट के दायरे में एन्क्रिप्ट किया गया है, तो Edge के यूज़र इंटरफ़ेस (यूआई) में जाकर पुष्टि की जा सकती है कि उसे एन्क्रिप्ट किया गया है या नहीं. अगर इसे संगठन या apiproxy के दायरे में बनाया गया है, तो आपको यह पुष्टि करने के लिए मैनेजमेंट एपीआई का इस्तेमाल करना होगा कि इसे एन्क्रिप्ट किया गया है या नहीं. KVM को मैनेज और इस्तेमाल करना लेख भी पढ़ें.यह देखने के लिए कि Edge यूज़र इंटरफ़ेस (यूआई) में एनवायरमेंट के स्कोप वाली KVM एन्क्रिप्ट (सुरक्षित) की गई है या नहीं:
- Edge के यूज़र इंटरफ़ेस (यूआई) में, बाईं ओर मौजूद नेविगेशन मेन्यू में एडमिन पर क्लिक करें.
- एनवायरमेंट पर क्लिक करें.
- की वैल्यू मैप पर क्लिक करें.
- वह की-वैल्यू मैप ढूंढें जिसका इस्तेमाल करना है.
- वैल्यू की सूची को बड़ा करने के लिए, नाम के बाईं ओर मौजूद ऐरो पर क्लिक करें.
- एन्क्रिप्ट किए गए की वैल्यू मैप, यूज़र इंटरफ़ेस (यूआई) में तारे के निशान (*****) के साथ मास्क की गई वैल्यू दिखाते हैं. इस बारे में एन्क्रिप्ट किए गए केवीएम के बारे में जानकारी में बताया गया है.
यह देखने के लिए कि संगठन, एनवायरमेंट या APIProxy लेवल पर स्कोप किया गया KVM एन्क्रिप्ट किया गया है या नहीं, मैनेजमेंट एपीआई का इस्तेमाल करें. एपीआई का इस्तेमाल करने पर, वैल्यू के लिए एन्क्रिप्ट की गई सेटिंग और तारे, दोनों को दिखाने वाला सैंपल रिस्पॉन्स ऐसा दिखता है:
{ "encrypted": true, "entry": [ { "name": "foo", "value": "*****" } ], "name": "encrypted" }
अगर कुंजी वैल्यू मैप, एन्क्रिप्ट किया गया केवीएम है और
<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>