คุณกำลังดูเอกสารประกอบของ Apigee Edge
ไปที่เอกสารประกอบของ
Apigee X info
UnsupportedOperationException
รหัสข้อผิดพลาด
java.lang.UnsupportedOperationException
เนื้อหาการตอบกลับข้อผิดพลาด
{
"fault":{
"faultstring":"java.lang.UnsupportedOperationException",
"detail":{
"errorcode":"Internal Server Error"
}
}
}
สาเหตุ
ข้อผิดพลาดนี้เกิดขึ้นหากตั้งค่าแอตทริบิวต์ mapIdentifier เป็นสตริงว่างในนโยบายการดำเนินการกับแผนที่ค่าคีย์
การวินิจฉัย
ตรวจสอบนโยบายการดำเนินการกับแผนที่ค่าคีย์ทั้งหมดในพร็อกซี API ที่เฉพาะเจาะจงซึ่งเกิดข้อผิดพลาด หากมีนโยบายการดำเนินการกับแมปคีย์-ค่าใดก็ตามที่ตั้งค่าแอตทริบิวต์
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. คำนำหน้า
ซึ่งจำเป็นสำหรับวัตถุประสงค์ด้านความปลอดภัยขั้นพื้นฐานในระหว่างการแก้ไขข้อบกพร่อง จะซ่อนค่าที่เข้ารหัส
จากเซสชันการติดตามและแก้ไขข้อบกพร่องของพร็อกซี API
การวินิจฉัย
1.
ระบุนโยบายการดำเนินการกับแมปค่าคีย์ที่เกิดข้อผิดพลาดและชื่อของตัวแปรที่กำหนดค่าไม่ได้ คุณดูรายการทั้ง 2 รายการนี้ได้ในองค์ประกอบ 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>
ตรวจสอบว่าแมปค่าคีย์ที่ระบุในแอตทริบิวต์
mapIdentifierเป็น KVM ที่เข้ารหัสหรือไม่ หาก KVM ได้รับการเข้ารหัสในขอบเขตสภาพแวดล้อม คุณจะยืนยันได้ว่ามีการเข้ารหัส ใน UI ของ Edge หรือหากสร้างที่ขอบเขตองค์กรหรือ apiproxy คุณจะต้องใช้ Management API เพื่อยืนยันว่ามีการเข้ารหัสหรือไม่ โปรดดูหัวข้อการจัดการและการใช้ KVM ด้วยวิธีตรวจสอบว่า KVM ที่กำหนดขอบเขตสภาพแวดล้อมได้รับการเข้ารหัสใน Edge UI หรือไม่
- ใน UI ของ Edge ให้คลิกผู้ดูแลระบบในเมนูการนำทางด้านซ้าย
- คลิกสภาพแวดล้อม
- คลิก Key Value Maps
- ค้นหาแผนที่ค่าคีย์ที่ต้องการใช้
- คลิกลูกศรทางด้านซ้ายของชื่อเพื่อขยายรายการค่า
- แผนที่ค่าคีย์ที่เข้ารหัสจะแสดงค่าที่มาสก์ด้วยเครื่องหมายดอกจันใน UI (*****) ดังที่แสดงในเกี่ยวกับ KVM ที่เข้ารหัส
หากต้องการตรวจสอบว่า KVM ที่กำหนดขอบเขตในระดับองค์กร สภาพแวดล้อม หรือ Apigee API Proxy ได้รับการเข้ารหัสหรือไม่ ให้ใช้ Management API หากคุณใช้ API ตัวอย่างการตอบกลับที่แสดงทั้งการตั้งค่าที่เข้ารหัสและเครื่องหมายดอกจันสำหรับค่าจะมีลักษณะดังนี้
{ "encrypted": true, "entry": [ { "name": "foo", "value": "*****" } ], "name": "encrypted" }หากแมปคีย์-ค่าเป็น 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>