Risoluzione dei problemi relativi al runtime delle operazioni sulla mappa chiave-valore

Stai visualizzando la documentazione di Apigee X.
Visualizza la documentazione di Apigee Edge.

EccezioneOperazione non supportata

Codice di errore

java.lang.UnsupportedOperationException

Corpo della risposta all'errore

{
   "fault":{
      "faultstring":"java.lang.UnsupportedOperationException",
      "detail":{
         "errorcode":"Internal Server Error"
      }
   }
}

Causa

Questo errore si verifica se l'attributo mapIdentifier è impostato su una stringa vuota nel criterio delle operazioni sulla mappa chiave-valore.

Diagnosi

  1. Esamina tutti i criteri delle operazioni sulla mappa chiave-valore nel proxy API specifico in cui si è verificato l'errore. Se è presente un criterio delle operazioni sulla coppia chiave-valore in cui l'attributo mapIdentifier è impostato come stringa vuota, questa è la causa dell'errore.

    Ad esempio, il seguente criterio delle operazioni sulla mappa chiave-valore ha un mapIdentifier vuoto:

    <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>environment</Scope>
    </KeyValueMapOperations>
    

Risoluzione

Assicurati che l'attributo mapIdentifier sia impostato su una mappa chiave/valore valida nel criterio delle operazioni sulla mappa chiave-valore.

Per correggere il criterio di esempio mostrato sopra, puoi specificare mapIdentifier per una mappa delle coppie chiave-valore esistente 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>environment</Scope>
</KeyValueMapOperations>

Impostazione variabile non riuscita

Codice di errore

steps.keyvaluemapoperations.SetVariableFailed

Corpo della risposta all'errore

{
   "fault":{
      "faultstring":"Failed to set variable variable_name in KeyValueMapStepDefinition policy_name",
      "detail":{
         "errorcode":"steps.keyvaluemapoperations.SetVariableFailed"
      }
   }
}

Esempio di messaggio di errore

{
   "fault":{
      "faultstring":"Failed to set variable myvar in KeyValueMapStepDefinition EncryptedKVM",
      "detail":{
         "errorcode":"steps.keyvaluemapoperations.SetVariableFailed"
      }
   }
}

Causa

Questo errore si verifica se cerchi di recuperare un valore da una mappa di coppie chiave-valore criptate e imposti il valore su una variabile il cui nome non ha il prefisso private.. Il prefisso, necessario per motivi di sicurezza di base durante il debug, nasconde i valori criptati nelle sessioni di Trace e debug delle API proxy.

Diagnosi

  1. Identifica il criterio delle operazioni sulla chiave-valore in cui si è verificato l'errore e il nome della variabile su cui non è possibile impostare il valore. Puoi trovare entrambi questi elementi nell'elemento faultstring della risposta di errore. Ad esempio, nei seguenti faultstring, il nome del criterio è EncryptedKVM e la variabile è myvar:

    "faultstring":"Failed to set variable myvar in KeyValueMapStepDefinition EncryptedKVM"
    
  2. Nel criterio XML del criterio delle operazioni sulla chiave valore non riuscito, verifica che il nome della variabile specificato nell'attributo assignTo dell'elemento <Get> corrisponda al nome della variabile identificato nella stringa di errore (passaggio 1 sopra). Ad esempio, il seguente criterio delle operazioni sulla coppia chiave-valore specifica una variabile denominata myvar nell'elemento <Get>, che corrisponde a quanto's in 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>
    
  3. Verifica se la mappa delle coppie chiave-valore specificata nell'attributo mapIdentifier è una KVM criptata.

    Per verificare se una KVM è criptata nell'interfaccia utente di Apigee:

    1. Nell'interfaccia utente di Apigee, fai clic su Amministratore nel menu di navigazione a sinistra.
    2. Fai clic su Ambienti.
    3. Fai clic su Mappe chiave-valore.
    4. Trova la mappa chiave-valore che vuoi utilizzare.
    5. Fai clic sulla freccia a sinistra del nome per espandere l'elenco dei valori.
    6. Le mappe con coppie chiave-valore criptate mostrano valori mascherati con asterischi nell'interfaccia utente (*****) come mostrato in Informazioni sulle KVM criptate.
  4. Se la mappa delle coppie chiave-valore è una KVM criptata e il nome della variabile utilizzato nell'attributo assignTo dell'elemento <Get> non ha il prefisso private. Questa è la causa dell'errore.

    Nell'esempio di criterio per le operazioni di mappatura delle coppie chiave-valore mostrato sopra, la mappa delle coppie chiave-valore testEncrypted è criptata e il nome della variabile myvar non ha il prefisso private. Pertanto, ricevi il codice di errore:

    steps.keyvaluemapoperations.SetVariableFailed
    

Risoluzione

Assicurati che il nome della variabile abbia il prefisso private. nell'attributo assignTo dell'elemento <Get> nel criterio Operazioni mappa delle coppie chiave-valore, se la mappa delle coppie chiave-valore utilizzata è criptata.

Per correggere il criterio riportato di esempio per le operazioni sulla mappa chiave-valore, puoi modificare il valore dell'attributo assignTo in 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>