Sie lesen gerade die Dokumentation zu Apigee und Apigee Hybrid.
Apigee Edge-Dokumentation aufrufen.
UnsupportedOperationException
Fehlercode
java.lang.UnsupportedOperationException
Fehlerantworttext
{
"fault":{
"faultstring":"java.lang.UnsupportedOperationException",
"detail":{
"errorcode":"Internal Server Error"
}
}
}
Ursache
Dieser Fehler tritt auf, wenn in der Richtlinie für Schlüsselwertzuordnungen das Attribut mapIdentifier auf einen leeren String festgelegt ist.
Diagnose
Untersuchen Sie alle Schlüsselwertzuordnungen-Richtlinien im jeweiligen API-Proxy, in dem der Fehler aufgetreten ist. Wenn es eine Richtlinie für Schlüsselwertzuordnungen gibt, in denen das Attribut
mapIdentifierals leerer String festgelegt wurde, ist dies die Ursache des Fehlers.Beispiel: Die folgende Richtlinie für Schlüsselwertzuordnungsvorgänge enthält einen leeren
mapIdentifier:<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>
Lösung
Das Attribut mapIdentifier muss in der Richtlinie für Schlüsselwertzuordnungsvorgänge auf eine gültige Schlüsselwertzuordnung gesetzt sein.
Um die oben gezeigte Beispielrichtlinie zu korrigieren, können Sie den mapIdentifier auf eine vorhandene Schlüsselwertzuordnung UserLocationMap setzen.
<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
Fehlercode
steps.keyvaluemapoperations.SetVariableFailed
Fehlerantworttext
{
"fault":{
"faultstring":"Failed to set variable variable_name in KeyValueMapStepDefinition policy_name",
"detail":{
"errorcode":"steps.keyvaluemapoperations.SetVariableFailed"
}
}
}
Beispiel für Fehlermeldung
{
"fault":{
"faultstring":"Failed to set variable myvar in KeyValueMapStepDefinition EncryptedKVM",
"detail":{
"errorcode":"steps.keyvaluemapoperations.SetVariableFailed"
}
}
}
Ursache
Dieser Fehler tritt auf, wenn Sie versuchen, einen Wert aus einer verschlüsselten Schlüssel/Wert-Zuordnung abzurufen und den Wert auf eine Variable festzulegen, deren Name nicht das Präfix private. hat. Das Präfix, das für grundlegende Sicherheitszwecke während der Fehlerbehebung erforderlich ist, blendet die verschlüsselten Werte aus API-Proxy-Trace- und Debug-Sitzungen aus.
Diagnose
1.
Ermitteln Sie die Richtlinie für die Schlüsselwertzuordnungsvorgänge, in der der Fehler aufgetreten ist, sowie den Namen der Variablen, für die der Wert nicht festgelegt werden kann. Sie finden beide Elemente im Element faultstring der Fehlerantwort. Beispiel: Im folgenden faultstring lautet der Richtlinienname EncryptedKVM und die Variable myvar:
"faultstring":"Failed to set variable myvar in KeyValueMapStepDefinition EncryptedKVM"
1.
Überprüfen Sie in der XML-Datei der fehlgeschlagenen Richtlinie für die Schlüsselwertzuordnungsvorgänge den Namen der Variable, die im Attribut assignTo des Elements <Get> angegeben ist. Dieser muss mit dem im Fehlerstring (aus Schritt 1 oben) identifizierten Variablennamen übereinstimmen. Die folgende Richtlinie für Schlüsselwertzuordnungsvorgänge gibt beispielsweise eine Variable namens myvar im Element <Get> an, was mit dem Inhalt des faultstring übereinstimmt:
<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>
Prüfen Sie, ob die im Attribut
mapIdentifierangegebene Schlüsselwertzuordnung eine verschlüsselte KVM ist.So prüfen Sie, ob eine KVM verschlüsselt ist in der Apigee-UI:
- Klicken Sie in der Apigee-UI im linken Navigationsmenü auf Administrator.
- Klicken Sie auf Umgebungen.
- Klicken Sie auf Schlüsselwertzuordnungen.
- Suchen Sie die gewünschte Schlüsselwertzuordnung.
- Klicken Sie auf den Pfeil links neben dem Namen, um die Liste der Werte zu maximieren.
- Verschlüsselte Schlüsselwertzuordnungen zeigen Werte an, die in der UI durch Sternchen (*****) gekennzeichnet sind, wie unter Informationen zu verschlüsselten KVMs gezeigt.
Wenn die Schlüsselwertzuordnung eine verschlüsselte KVM ist und der im Attribut
assignTodes<Get>-Elements verwendete Variablenname nicht das Präfixprivatehat. Dann ist das die Ursache des Fehlers.In der oben gezeigten Beispielrichtlinie für die Schlüsselwertzuordnung ist die Schlüsselwertzuordnung
testEncryptedverschlüsselt und der Variablennamemyvarhat nicht das Präfixprivate. Daher erhalten Sie den Fehlercode:steps.keyvaluemapoperations.SetVariableFailed
Lösung
Achten Sie darauf, dass der Variablenname im Attribut assignTo des Elements <Get> in der Richtlinie der Schlüsselwertzuordnungsvorgänge das Präfix private. hat, wenn die verwendete Schlüsselwertzuordnung verschlüsselt ist.
Um die oben gezeigte Beispielrichtlinie für Schlüsselwertzuordnungsvorgänge zu korrigieren, können Sie den Wert des Attributs assignTo in private.myvar ändern:
<?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>