คุณกำลังดูเอกสารประกอบ 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 ให้คลิก Admin ในเมนูการนำทางด้านซ้าย
- คลิกสภาพแวดล้อม
- คลิกการแมปค่าคีย์
- ค้นหาแมปค่าคีย์ที่ต้องการใช้
- คลิกลูกศรทางด้านซ้ายของชื่อเพื่อขยายรายการค่า
- การแมปค่าคีย์ที่เข้ารหัสจะแสดงค่ามาสก์ด้วยเครื่องหมายดอกจันใน 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>