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>