คุณกำลังดูเอกสารประกอบของ Apigee Edge
ไปที่เอกสารประกอบของ Apigee X ข้อมูล
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 ได้รับการเข้ารหัสในขอบเขตสภาพแวดล้อม คุณตรวจสอบได้ว่าได้รับการเข้ารหัสใน Edge UI หรือไม่ ไม่เช่นนั้น หากสร้างไว้ที่องค์กรหรือขอบเขต apiproxy คุณต้องใช้ Management API เพื่อยืนยันว่าเข้ารหัสหรือไม่ โปรดดูเพิ่มเติมที่การจัดการและการใช้ KVMวิธีตรวจสอบว่า KVM ที่กำหนดขอบเขตสภาพแวดล้อมได้รับการเข้ารหัสใน Edge UI หรือไม่
- ใน Edge UI ให้คลิกผู้ดูแลระบบในเมนูการนำทางด้านซ้าย
- คลิกสภาพแวดล้อม
- คลิกแมปค่าคีย์
- ค้นหาแมปค่าคีย์ที่ต้องการใช้
- คลิกลูกศรทางด้านซ้ายของชื่อเพื่อขยายรายการค่า
- แผนที่ค่าคีย์ที่เข้ารหัสจะแสดงค่าที่มีเครื่องหมายดอกจันใน UI (*****) ดังที่แสดงในเกี่ยวกับ KVM ที่เข้ารหัส
หากต้องการตรวจสอบว่า KVM กำหนดขอบเขตที่องค์กร สภาพแวดล้อม หรือระดับ apiproxy หรือไม่ ให้ใช้ 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>