Sie sehen sich die Dokumentation zu Apigee Edge an.
Sehen Sie sich die Apigee X-Dokumentation an. info
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
mapIdentifier
als 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>apiproxy</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>apiproxy</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
mapIdentifier
angegebene Schlüsselwertzuordnung eine verschlüsselte KVM ist. Wenn die KVM auf Umgebungsebene verschlüsselt ist, können Sie dies in der Edge-Benutzeroberfläche prüfen. Andernfalls, wenn sie auf Organisations- oder API-Proxy-Ebene erstellt wurde, müssen Sie mit der Management API prüfen, ob sie verschlüsselt ist. Weitere Informationen finden Sie unter KVMs verwalten und verwenden.So prüfen Sie, ob eine KVM auf Umgebungsebene in der Edge-Benutzeroberfläche verschlüsselt ist:
- Klicken Sie in der Edge-Benutzeroberfläche im linken Navigationsmenü auf Verwaltung.
- 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.
Mit den Management APIs können Sie prüfen, ob eine KVM auf Organisations-, Umgebungs- oder API-Proxy-Ebene verschlüsselt ist. Wenn Sie die API verwenden, sieht eine Beispielantwort, die sowohl die verschlüsselte Einstellung als auch Sternchen für den Wert enthält, so aus:
{ "encrypted": true, "entry": [ { "name": "foo", "value": "*****" } ], "name": "encrypted" }
Wenn die Schlüsselwertzuordnung eine verschlüsselte KVM ist und der im Attribut
assignTo
des<Get>
-Elements verwendete Variablenname nicht das Präfixprivate
hat. Dann ist das die Ursache des Fehlers.In der oben gezeigten Beispielrichtlinie für die Schlüsselwertzuordnung ist die Schlüsselwertzuordnung
testEncrypted
verschlüsselt und der Variablennamemyvar
hat 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>