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