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

Stai visualizzando la documentazione relativa a Apigee e Apigee ibrido.
Visualizza la documentazione di Apigee Edge.

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

Diagnosi

  1. Esamina tutti i criteri Key Value Map Operations nel proxy API specifico in cui si è verificato l'errore. Se esiste un criterio per le operazioni di mappatura chiave-valore in cui l'attributo mapIdentifier è impostato come una stringa vuota, questo è 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>environment</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>environment</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"
      }
   }
}

Messaggio di errore di esempio

{
   "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 mappatura valori chiave specifica una variabile denominata myvar nell'elemento <Get>, che corrisponde a quella 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. Controlla se la mappa chiave/valore specificata nell'attributo mapIdentifier è una KVM criptata.

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

    1. Nella UI di Apigee, fai clic su Admin (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 di valori chiave criptate mostrano i valori mascherati con asterischi nell'interfaccia utente (*****), come mostrato in Informazioni sulle mappe di valori chiave criptate.
  2. Se la mappa chiave-valore è una KVM criptata e il nome della variabile utilizzato nel L'attributo assignTo dell'elemento <Get> non ha il prefisso private. Questo è il motivo 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, 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 chiave-valore se la mappa chiave-valore utilizzata è crittografata.

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