UnsupportedOperationException
エラーコード
java.lang.UnsupportedOperationException
エラー レスポンスの本文
{
"fault":{
"faultstring":"java.lang.UnsupportedOperationException",
"detail":{
"errorcode":"Internal Server Error"
}
}
}
原因
このエラーは、Key-Value マップで mapIdentifier
属性に空の文字列が設定されている場合に発生します。
診断
エラーが発生した API プロキシで、すべての Key Value Map Operations ポリシーを調べます。
mapIdentifier
属性に空の文字列が設定されている Key Value Map Operations ポリシーがある場合、これがエラーの原因です。たとえば、次の Key Value Map Operations ポリシーには空の
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>
解決策
Key Value Map Operations ポリシーの mapIdentifier
属性に有効な Key-Value マップを設定します。
上記のポリシーの例を修正するには、mapIdentifier
に既存の Key-Value マップ 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"
}
}
}
原因
暗号化された Key-Value マップから値を取得するときに、名前に private.
というプレフィックスがない変数に値を設定すると、このエラーが発生します。このプレフィックスは、API プロキシのトレース セッションとデバッグ セッションから暗号化された値を隠します。これは、デバッグ時の基本的なセキュリティとして必要です。
診断
エラーが発生した Key Value Map Operations ポリシーと、値を設定できない変数の名前を特定します。どちらの項目もエラー レスポンスの
faultstring
要素で確認できます。たとえば、次のfaultstring
では、EncryptedKVM
がポリシー名、myvar
が変数です。"faultstring":"Failed to set variable myvar in KeyValueMapStepDefinition EncryptedKVM"
エラーが発生した Key Value Map Operations ポリシーの XML で、
<Get>
要素のassignTo
属性に指定された変数の名前が手順 1 で特定した変数名と一致しているかどうか確認します。たとえば、次の Key Value Map Operations ポリシーでは、<Get>
要素にmyvar
という名前の変数が指定されていますが、これは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
属性の Key-Value マップが暗号化された KVM かどうか確認します。KVM が環境スコープで暗号化されている場合は Edge UI で暗号化を確認できます。組織または apiproxy のスコープで作成されている場合は、管理 API で暗号化を確認する必要があります。KVM の管理と使用もご覧ください。Edge UI で環境スコープの KVM の暗号化を確認するには:
- Edge UI で、左側のナビゲーション メニューの [Admin] をクリックします。
- [Environments] をクリックします。
- [Key Value Maps] をクリックします。
- 必要な Key-Value マップを探します。
- 名前の左側にある矢印をクリックして、値のリストを展開します。
- 暗号化された KVM についての説明のように、暗号化された Key-Value マップの値はアスタリスクでマスキングされて UI に表示されます(***** のように表示されます)。
暗号化された KVM のスコープ(組織、環境または apiproxy)を確認するには、管理 API を使用します。API を使用した場合のレスポンスでは、暗号化の設定と値のアスタリスクが次のように表示されます。
{ "encrypted": true, "entry": [ { "name": "foo", "value": "*****" } ], "name": "encrypted" }
Key-Value マップが暗号化された KVM で、
<Get>
要素のassignTo
属性にprivate
というプレフィックスが付いていない場合、これがエラーの原因です。上記の Key Value Map Operations ポリシーでは、Key-Value マップ
testEncrypted
が暗号化され、変数名myvar
にプレフィックスprivate
がありません。このため、次のようなエラーコードが返されます。steps.keyvaluemapoperations.SetVariableFailed
解決策
使用する Key-Value マップが暗号化されている場合、Key Value Map Operations ポリシーで <Get>
要素の assignTo
属性に、プレフィックス private.
付きの変数名を設定します。
上記の Key Value Map Operations ポリシーの例を修正するには、属性の値を 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>