Risoluzione degli errori di runtime delle operazioni mappa chiave-valore

Stai visualizzando la documentazione di Apigee Edge.
Vai alla documentazione di Apigee X.
informazioni

UnsupportedOperationException

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 Operazioni mappa chiave-valore.

Diagnostica

  1. Esamina tutti i criteri relativi alle operazioni di mappatura delle coppie chiave-valore nello specifico proxy API in cui si è verificato l'errore. Se esiste un criterio per le operazioni di mappatura delle coppie chiave-valore in cui l'attributo mapIdentifier è impostato come stringa vuota, è questa la causa dell'errore.

    Ad esempio, il seguente criterio Operazioni mappa chiave-valore ha un valore 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 l'attributo mapIdentifier sia impostato su una mappa chiave-valore valida nel criterio Operazioni mappa chiave-valore.

Per correggere il criterio di esempio mostrato sopra, puoi specificare il valore mapIdentifier in una mappa chiave-valore UserLocationMap esistente.

<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 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 tenti di recuperare un valore da una mappa chiave-valore criptata 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 dalle sessioni di traccia e debug del proxy API.

Diagnostica

1. Identifica il criterio relativo alle operazioni di mappatura delle chiavi-valore in cui si è verificato l'errore e il nome della variabile su 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 file XML del criterio relativo alle operazioni di mappatura delle coppie chiave-valore, 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 riportato sopra). Ad esempio, il seguente criterio Operazioni mappa chiave-valore specifica una variabile denominata myvar nell'elemento <Get>, che corrisponde al contenuto della colonna 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 è un KVM criptato. Se il KVM è criptato nell'ambito dell'ambiente, puoi verificare che sia criptato nella UI perimetrale. In caso contrario, se è stata creata nell'ambito dell'organizzazione o apiproxy, devi utilizzare l'API di gestione per verificare se è criptata. Vedi anche Gestire e utilizzare i KVM.

    Per verificare se un KVM con ambito di ambiente è criptato nella UI perimetrale:

    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. Individua la mappa chiave-valore da utilizzare.
    5. Fai clic sulla freccia a sinistra del nome per espandere l'elenco dei valori.
    6. Le mappe chiave-valore criptate mostrano i valori mascherati con asterischi nell'interfaccia utente (*****), come mostrato in Informazioni sulle KVM criptate.

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

    {
      "encrypted": true,
      "entry": [
        {
          "name": "foo",
          "value": "*****"
        }
      ],
      "name": "encrypted"
    }
    
  2. Se la mappa chiave-valore è un KVM criptato 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 relativo alle 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. Riceverai quindi 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 Key Value Map Operations se la mappa chiave-valore utilizzata è criptata.

Per correggere il criterio di esempio relativo alle operazioni di mappatura delle coppie chiave-valore mostrato sopra, 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>