Risoluzione dei problemi relativi agli errori di runtime delle operazioni di mappa chiave-valore

Stai visualizzando la documentazione di Apigee Edge.
Vai alla sezione Documentazione di Apigee X.
Informazioni

UnsupportedOperationException

Codice di errore

java.lang.UnsupportedOperationException

Corpo della risposta di errore

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

Causa

Questo errore si verifica se l'attributo mapIdentifier viene impostato su una stringa vuota nel criterio Operazioni sulla mappa di valori chiave.

Diagnosi

  1. Esamina tutti i criteri Key Value Map Operations nel proxy API specifico in cui si è verificato l'errore. Se esiste un criterio Operazioni mappa delle chiavi e dei valori in cui l'attributo mapIdentifier è impostato come stringa vuota, questa è la causa dell'errore.

    Ad esempio, il seguente criterio di operazioni di mappatura delle coppie 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>apiproxy</Scope>
    </KeyValueMapOperations>
    

Risoluzione

Assicurati che per l'attributo mapIdentifier sia impostato una mappa chiave-valore valida nel criterio relativo alle operazioni sulla mappa dei valori chiave.

Per correggere il criterio di esempio mostrato sopra, puoi specificare mapIdentifier per una mappa di valori chiave 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>apiproxy</Scope>
</KeyValueMapOperations>

SetVariableFailed

Codice di errore

steps.keyvaluemapoperations.SetVariableFailed

Corpo della risposta di 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 provi a recuperare un valore da una mappa di valori delle chiavi criptata e a impostare il valore su una variabile il cui nome non ha il prefisso private.. Il prefisso, obbligatorio per motivi di sicurezza di base durante il debug, nasconde i valori criptati dalle sessioni di tracciamento e debug del proxy API.

Diagnosi

1. Identifica il criterio Operazioni di mappatura delle coppie chiave-valore in cui si è verificato l'errore e il nome della variabile a cui non è possibile impostare il valore. Puoi trovare entrambi gli elementi nell'elemento faultstring della risposta di errore. Ad esempio, nel seguente faultstring, il nome del criterio è EncryptedKVM e la variabile è myvar:

  "faultstring":"Failed to set variable myvar in KeyValueMapStepDefinition EncryptedKVM"

1. Nel codice XML del criterio operazioni della mappa chiave-valore con errori, verifica che il nome della variabile specificata nell'attributo assignTo dell'elemento <Get> corrisponda al nome della variabile identificato nella stringa di errore (passaggio 1 sopra). Ad esempio, il seguente criterio Operazioni mappa valori-chiave specifica una variabile denominata myvar nell'elemento <Get>, che corrisponde a quanto contenuto 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>
  1. Verifica se la mappa chiave-valore specificata nell'attributo mapIdentifier è una KVM criptata. Se la KVM è criptata nell'ambito dell'ambiente, puoi verificare che sia criptata dell'interfaccia utente di Edge. In caso contrario, se è stato creato a livello di organizzazione o apiproxy, devi utilizzare l'API Management per verificare se è criptato. Vedi anche Gestione e utilizzo delle KVM.

    Per verificare se una KVM con ambito di ambiente è criptata nella UI Edge:

    1. Nell'interfaccia utente di Edge, fai clic su Amministrazione 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 di valori.
    6. Le mappe chiave-valore criptate mostrano i valori mascherati con asterischi nell'interfaccia utente (*****) come illustrato in Informazioni sulle KVM criptate.

    Per verificare se una KVM con ambito a livello di organizzazione, ambiente o apiproxy è criptata, utilizza la classe API di gestione. Se utilizzi l'API, una risposta di esempio che mostra sia l'impostazione criptata sia gli asterischi per il valore è la seguente:

    {
      "encrypted": true,
      "entry": [
        {
          "name": "foo",
          "value": "*****"
        }
      ],
      "name": "encrypted"
    }
    
  2. Se la mappa chiave-valore è una KVM criptata e il nome della variabile utilizzato nella L'attributo assignTo dell'elemento <Get> non ha il prefisso private. Questa è la causa dell'errore.

    Nel criterio di operazioni di mappatura delle coppie chiave-valore di esempio mostrato sopra, la mappatura delle coppie chiave-valore testEncrypted è criptata e il nome della variabile myvar non ha il prefisso private. Di conseguenza, viene visualizzato 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 valori chiave se la mappa valori chiave utilizzata è criptata.

Per correggere l'esempio di criterio delle operazioni della mappa chiave-valore mostrato sopra, puoi modificare il valore dell'attributo assignTo a 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>