Vous consultez la documentation d'Apigee Edge.
Accédez à la documentation sur Apigee X. info
UnsupportedOperationException
Code d'erreur
java.lang.UnsupportedOperationException
Corps de la réponse d'erreur
{
"fault":{
"faultstring":"java.lang.UnsupportedOperationException",
"detail":{
"errorcode":"Internal Server Error"
}
}
}
Cause
Cette erreur se produit si l'attribut mapIdentifier
est défini sur une chaîne vide dans la règle des opérations de mappage de clés-valeurs.
Diagnostic
Examinez toutes les règles d'opérations de mappage de clés-valeurs dans le proxy d'API spécifique où l'échec a eu lieu. S'il existe une règle d'opérations de mappage de clés-valeurs dans laquelle l'attribut
mapIdentifier
est défini comme une chaîne vide, il s'agit de la cause de l'erreur.Par exemple, la règle d'opérations de mappage de clés-valeurs suivante est associée à un élément
mapIdentifier
vide :<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>
Solution
Assurez-vous que l'attribut mapIdentifier
est défini sur un mappage de clés-valeurs valide dans la règle des opérations de mappage de clés-valeurs.
Pour corriger l'exemple de règle présenté ci-dessus, vous pouvez spécifier mapIdentifier
à un mappage de clés-valeurs existant 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
Code d'erreur
steps.keyvaluemapoperations.SetVariableFailed
Corps de la réponse d'erreur
{ "fault":{ "faultstring":"Failed to set variable variable_name in KeyValueMapStepDefinition policy_name", "detail":{ "errorcode":"steps.keyvaluemapoperations.SetVariableFailed" } } }
Exemple de message d'erreur
{
"fault":{
"faultstring":"Failed to set variable myvar in KeyValueMapStepDefinition EncryptedKVM",
"detail":{
"errorcode":"steps.keyvaluemapoperations.SetVariableFailed"
}
}
}
Cause
Cette erreur se produit si vous tentez de récupérer une valeur à partir d'un mappage de clés-valeurs chiffré et de la définir sur une variable dont le nom ne comporte pas le préfixe private.
. Le préfixe, requis pour des raisons de sécurité élémentaires lors du débogage, masque les valeurs chiffrées des sessions de débogage et de suivi du proxy d'API.
Diagnostic
1.
Identifiez la règle d'opérations de mappage de clés-valeurs où l'erreur s'est produite et le nom de la variable à laquelle la valeur ne peut pas être définie. Vous pouvez trouver ces deux éléments dans l'élément faultstring
de la réponse d'erreur. Par exemple, dans le fichier faultstring
suivant, le nom de la règle est EncryptedKVM
et celui de la variable est myvar
:
"faultstring":"Failed to set variable myvar in KeyValueMapStepDefinition EncryptedKVM"
1.
Dans la requête XML de la règle d'opérations de mappage de clés-valeurs ayant échoué, vérifiez que le nom de la variable spécifié dans l'attribut assignTo
de l'élément <Get>
correspond au nom de variable identifié dans la chaîne d'erreur (étape 1 ci-dessus). Par exemple, la règle suivante d'opérations de mappage de clés-valeurs spécifie une variable nommée myvar
dans l'élément <Get>
, qui correspond à ce qui se trouve dans le fichier 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>
Vérifiez si le mappage de clés-valeurs spécifié dans l'attribut
mapIdentifier
est une KVM chiffrée. Si la KVM est chiffrée au niveau de l'environnement, vous pouvez vérifier qu'elle est chiffrée dans l'interface utilisateur Edge. Sinon, s'il a été créé au niveau de l'organisation ou de l'apiproxy, vous devez utiliser l'API Management pour vérifier s'il est chiffré. Consultez également la section Gérer et utiliser des mappages clé-valeur.Pour vérifier si une KVM de portée environnement est chiffrée dans l'interface utilisateur Edge:
- Dans l'interface utilisateur Edge, cliquez sur Administration dans le menu de navigation de gauche.
- Cliquez sur Environnements.
- Cliquez sur Mappages de clés-valeurs.
- Recherchez le mappage de clés-valeurs que vous souhaitez utiliser.
- Cliquez sur la flèche située à gauche du nom pour développer la liste des valeurs.
- Les mappages de clés-valeurs chiffrés affichent des valeurs masquées avec des astérisques dans l'interface utilisateur (*****), comme indiqué dans la section À propos des KVM chiffrés.
Pour vérifier si une KVM définie au niveau de l'organisation, de l'environnement ou du proxy d'API est chiffrée, utilisez les API de gestion. Si vous utilisez l'API, un exemple de réponse affichant à la fois le paramètre chiffré et les astérisques pour la valeur se présente comme suit:
{ "encrypted": true, "entry": [ { "name": "foo", "value": "*****" } ], "name": "encrypted" }
Si le mappage de clés-valeurs est une KVM chiffrée et que le nom de la variable utilisée dans l'attribut
assignTo
de l'élément<Get>
n'a pas le préfixeprivate
, alors il s'agit de la cause de l'erreur.Dans l'exemple de règle d'opérations de mappage de clés-valeurs ci-dessus, le mappage de clés-valeurs
testEncrypted
est chiffré et le nom de la variablemyvar
n'a pas le préfixeprivate
. Par conséquent, vous recevez le code d'erreur :steps.keyvaluemapoperations.SetVariableFailed
Solution
Vérifiez que le nom de la variable comporte le préfixe private.
dans l'attribut assignTo
de l'élément <Get>
de la règle d'opérations de mappage de clés-valeurs si le mappage clés-valeurs utilisé est chiffré.
Pour corriger l'exemple de règle d'opérations de mappage de clés-valeurs ci-dessus, vous pouvez remplacer la valeur de l'attribut assignTo
par 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>