Bạn đang xem tài liệu về Apigee Edge.
Chuyển đến tài liệu về
Apigee X. thông tin
UnsupportedOperationException
Mã lỗi
java.lang.UnsupportedOperationException
Nội dung phản hồi lỗi
{
"fault":{
"faultstring":"java.lang.UnsupportedOperationException",
"detail":{
"errorcode":"Internal Server Error"
}
}
}
Nguyên nhân
Lỗi này xảy ra nếu thuộc tính mapIdentifier
được đặt thành một chuỗi trống trong chính sách Hoạt động bản đồ giá trị khoá.
Chẩn đoán
Kiểm tra tất cả các chính sách Hoạt động bản đồ giá trị khoá trong Proxy API cụ thể nơi xảy ra lỗi. Nếu có bất kỳ chính sách nào về Hoạt động ánh xạ giá trị khoá, trong đó thuộc tính
mapIdentifier
được đặt thành chuỗi trống, thì đó chính là nguyên nhân gây ra lỗi.Ví dụ: chính sách Hoạt động bản đồ giá trị khoá sau đây có
mapIdentifier
trống:<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>
Độ phân giải
Đảm bảo đặt thuộc tính mapIdentifier
thành một bản đồ khoá-giá trị hợp lệ trong chính sách về Hoạt động của bản đồ khoá-giá trị.
Để chỉnh sửa chính sách ví dụ nêu trên, bạn có thể chỉ định mapIdentifier
cho bản đồ khoá-giá trị hiện có 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
Mã lỗi
steps.keyvaluemapoperations.SetVariableFailed
Nội dung phản hồi lỗi
{ "fault":{ "faultstring":"Failed to set variable variable_name in KeyValueMapStepDefinition policy_name", "detail":{ "errorcode":"steps.keyvaluemapoperations.SetVariableFailed" } } }
Thông báo lỗi mẫu
{
"fault":{
"faultstring":"Failed to set variable myvar in KeyValueMapStepDefinition EncryptedKVM",
"detail":{
"errorcode":"steps.keyvaluemapoperations.SetVariableFailed"
}
}
}
Nguyên nhân
Lỗi này xảy ra nếu bạn cố truy xuất giá trị từ bản đồ giá trị khoá đã mã hoá và đặt giá trị thành một biến có tên không có tiền tố private.
. Tiền tố (bắt buộc cho các mục đích bảo mật cơ bản trong quá trình gỡ lỗi) sẽ ẩn các giá trị đã mã hoá khỏi công cụ Theo dõi proxy API và các phiên gỡ lỗi.
Chẩn đoán
1.
Xác định chính sách Hoạt động bản đồ giá trị khoá đã xảy ra lỗi và tên của biến không thể đặt giá trị. Bạn có thể tìm thấy cả hai mục này trong phần tử faultstring
của phản hồi lỗi. Ví dụ: trong faultstring
sau đây, tên chính sách là EncryptedKVM
và biến là myvar
:
"faultstring":"Failed to set variable myvar in KeyValueMapStepDefinition EncryptedKVM"
1.
Trong XML chính sách Hoạt động ánh xạ giá trị khoá không thành công, hãy xác minh rằng tên của biến được chỉ định trong thuộc tính assignTo
của phần tử <Get>
khớp với tên biến được xác định trong chuỗi lỗi (bước #1 ở trên). Ví dụ: chính sách sau đây về Hoạt động ánh xạ giá trị khoá chỉ định một biến có tên là myvar
trong phần tử <Get>
, khớp với biến trong 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>
Kiểm tra xem bản đồ khoá giá trị được chỉ định trong thuộc tính
mapIdentifier
có phải là một KVM đã mã hoá hay không. Nếu KVM được mã hoá ở phạm vi môi trường, thì bạn có thể xác minh rằng KVM đã được mã hoá trong giao diện người dùng Edge. Ngược lại, nếu được tạo ở phạm vi tổ chức hoặc api proxy, bạn cần sử dụng Management API để xác minh xem tệp có được mã hoá hay không. Xem thêm bài viết Quản lý và sử dụng KVM.Cách kiểm tra xem KVM trong phạm vi môi trường có được mã hoá trong giao diện người dùng Edge hay không:
- Trong giao diện người dùng Edge, hãy nhấp vào mục Quản trị trong trình đơn điều hướng bên trái.
- Nhấp vào Môi trường.
- Nhấp vào Key Value Maps (Bản đồ giá trị chính).
- Tìm Bản đồ giá trị khoá mà bạn muốn sử dụng.
- Nhấp vào mũi tên ở bên trái tên để mở rộng danh sách giá trị.
- Bản đồ giá trị khoá đã mã hoá hiển thị các giá trị được ẩn giấu bằng dấu hoa thị trong giao diện người dùng (*****) như được nêu trong phần Giới thiệu về KVM được mã hoá.
Để kiểm tra xem một KVM trong phạm vi tổ chức, môi trường hoặc cấp api proxy có được mã hoá hay không, hãy sử dụng API Quản lý. Nếu bạn sử dụng API, phản hồi mẫu hiển thị cả chế độ cài đặt được mã hoá và dấu hoa thị cho giá trị sẽ có dạng như sau:
{ "encrypted": true, "entry": [ { "name": "foo", "value": "*****" } ], "name": "encrypted" }
Nếu bản đồ khoá-giá trị là một KVM đã mã hoá và tên biến dùng trong thuộc tính
assignTo
của phần tử<Get>
không có tiền tốprivate
. Đó chính là nguyên nhân gây ra lỗi.Trong ví dụ về Chính sách hoạt động của bản đồ giá trị khoá trình bày ở trên, bản đồ khoá giá trị
testEncrypted
được mã hoá và tên biếnmyvar
không có tiền tốprivate
. Do đó, bạn sẽ nhận được mã lỗi:steps.keyvaluemapoperations.SetVariableFailed
Độ phân giải
Hãy đảm bảo rằng tên biến có tiền tố private.
trong thuộc tính assignTo
của phần tử <Get>
trong chính sách Hoạt động bản đồ giá trị khoá nếu bản đồ khoá-giá trị được sử dụng đã được mã hoá.
Để sửa ví dụ về Hoạt động ánh xạ giá trị khoá trình bày ở trên, bạn có thể sửa đổi giá trị của thuộc tính assignTo
thành 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>