Sie sehen sich die Dokumentation zu Apigee Edge an.
Sehen Sie sich die Apigee X-Dokumentation an. info
UnresolvedVariable
Fehlercode
steps.assignmessage.UnresolvedVariable
Fehlerantworttext
{ "fault": { "faultstring": "AssignMessage[policy_name]: unable to resolve variable [variable_name]", "detail": { "errorcode": "steps.assignmessage.UnresolvedVariable" } } }
Ursache
Dieser Fehler tritt bei einer Variablen auf, die in der Richtlinie "Nachricht zuweisen" angegeben ist, wenn die Variable
- außerhalb des Gültigkeitsbereichs liegt (nicht in dem spezifischen Ablauf verfügbar ist, in dem die Richtlinie ausgeführt wird) oder
- nicht aufgelöst werden kann (nicht definiert ist).
Dieser Fehler tritt beispielsweise auf, wenn die Richtlinie "Nachricht zuweisen" im Anfrageablauf ausgeführt wird, das Attribut source
im Element <Copy>
jedoch auf die Variable response
oder error
oder eine andere benutzerdefinierte Variable festgelegt ist, die im Anfrageablauf nicht vorhanden ist.
Diagnose
Ermitteln Sie die Richtlinie "Nachricht zuweisen", in der der Fehler aufgetreten ist, sowie den Namen der nicht verfügbaren Variable. Sie finden beide Elemente im Element
faultstring
der Fehlerantwort.Beispiel: Im folgenden
faultstring
lautet der RichtliniennamegoogleBook
und die Variablevar
:"faultstring": "AssignMessage[googleBook]: unable to resolve variable var"
Prüfen Sie in der XML-Datei der Richtlinie "Nachricht zuweisen", ob der Name der verwendeten Variablen mit dem Variablennamen übereinstimmt, der im Fehlerstring angegeben ist (Schritt 1 oben). Beispiel: Die folgende Richtlinie legt die Variable
var
als Quellattribut im Element<Copy>
fest, was mit dem Inhalt vonfaultstring
übereinstimmt:<AssignMessage async="false" continueOnError="false" enabled="true" name="Assign-Message-1"> <DisplayName>googleBook</DisplayName> <Properties /> <Copy source="var"> <Headers> <Header name="user-agent" /> </Headers> </Copy> <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables> <AssignTo createNew="true" transport="http" type="request">googleBookReq</AssignTo> </AssignMessage>
Prüfen Sie, ob die Variable definiert und in dem Ablauf verfügbar ist, in dem die Richtlinie "Nachricht zuweisen" ausgeführt wird.
Wenn die Variable entweder:
- außerhalb des Gültigkeitsbereichs liegt (nicht in dem spezifischen Ablauf verfügbar ist, in dem die Richtlinie ausgeführt wird) oder
- nicht aufgelöst werden kann (nicht definiert ist)
dann ist das die Ursache für den Fehler.
Angenommen, die oben gezeigte Richtlinie "Nachricht zuweisen" wird im Anfrageablauf ausgeführt. Prüfen Sie, ob die Variable
var
in einer der Richtlinien definiert ist, die vor der Richtlinie "Nachricht zuweisen" im Anfrageablauf ausgeführt werden. Wenn die Variable nicht definiert wurde, erhalten Sie folgenden Fehlercode:steps.assignmessage.UnresolvedVariable
Lösung
Achten Sie darauf, dass die in der Richtlinie referenzierte Variable vorhanden und in dem spezifischen Ablauf verfügbar ist, in dem die Richtlinie „Nachricht zuweisen“ ausgeführt wird.
Um die oben gezeigte Beispielrichtlinie zu korrigieren, können Sie das Quellattribut im Element <Copy>
in die Anfragevariable oder eine andere benutzerdefinierte Variable des Typs "message" ändern, die im Anfrageablauf vorhanden ist.
<AssignMessage async="false" continueOnError="false" enabled="true" name="Assign-Message-1">
<DisplayName>googleBook</DisplayName>
<Properties />
<Copy source="request">
<Headers>
<Header name="user-agent" />
</Headers>
</Copy>
<IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
<AssignTo createNew="true" transport="http" type="request">googleBookReq</AssignTo>
</AssignMessage>
VariableOfNonMsgType
Fehlercode
steps.assignmessage.VariableOfNonMsgType
Fehlerantworttext
{ "fault": { "faultstring": "AssignMessage[policy_name]: value of variable [variable] is not of type Message", "detail": { "errorcode": "steps.assignmessage.VariableOfNonMsgType" } } }
Ursache
Dieser Fehler tritt auf, wenn für das Attribut source
im Element <Copy>
eine Variable festgelegt ist, die nicht vom Typ message ist.
Nachrichtentypvariablen stellen ganze HTTP-Anfragen und -Antworten dar. Die integrierten Edge-Flussvariablen request
, response
und message
haben den Typ Nachricht. Weitere Informationen zu Nachrichtenvariablen finden Sie in der Variablenreferenz.
Diagnose
Ermitteln Sie die Richtlinie "Nachricht zuweisen", in der der Fehler aufgetreten ist, sowie den Namen der Variable, deren Typ ungültig ist. Sie finden beide Elemente im Element
faultstring
der Fehlerantwort. Beispiel: Im folgendenfaultstring
lautet der RichtliniennameGenerateGeocodingRequest
und die VariablePostalCode
:"faultstring": "AssignMessage[GenerateGeocodingRequest]: value of variable PostalCode is not of type Message"
Prüfen Sie in der XML-Datei der Richtlinie "Nachricht zuweisen", ob der Name der verwendeten Variablen im Element
<Copy>
mit dem Variablennamen übereinstimmt, der im Fehlerstring angegeben ist (Schritt 1 oben). Beispiel: Die folgende Richtlinie legt die VariablePostalCode
als Quellattribut fest, was mit dem Inhalt vonfaultstring
übereinstimmt:<AssignMessage name="GenerateGeocodingRequest"> <AssignTo createNew="true" type="request">GeocodingRequest</AssignTo> <AssignVariable> <Name>PostalCode</Name> <Ref>request.queryparam.postalcode</Ref> </AssignVariable> <AssignVariable> <Name>Country</Name> <Ref>request.queryparam.country</Ref> </AssignVariable> <Copy source="PostalCode"> <QueryParams> <QueryParam name="q" /> </QueryParams> </Copy> </AssignMessage>
Bestimmen Sie, ob diese Variable vom Typ "message" ist oder nicht:
- Suchen Sie den Code innerhalb des API-Proxy-Bundles, wo die Variable zuerst definiert wurde.
- Nachdem Sie die Richtlinie ermittelt haben, in der die Variable zuerst definiert und ausgefüllt wird, müssen Sie den Typ dieser Variable so bestimmen:
- Prüfen Sie den Wert des Typattributs (falls vorhanden).
- Wenn das Typattribut nicht vorhanden ist, wird die Variable als String betrachtet.
- Ist der Typ der Variablen nicht "Message" (z. B. ein String), so ist dies die Ursache des Fehlers. Weitere Informationen zu gängigen Variablen und ihren Typen finden Sie in der Variablenreferenz.
Betrachten Sie beispielsweise die Variable PostalCode in der obigen XML-Datei. Sie erhält den Wert der Ablaufvariablen
request.queryparam.postalcode
im Element<AssignVariable>
. Dieser Wert ist ein String, da in der Variablenzuweisung kein Typattribut vorhanden ist.Denken Sie nun daran, dass die Variable "PostalCode" im Element
<Copy>
der Richtlinie "Nachricht zuweisen" verwendet wird:<Copy source="PostalCode"> <QueryParams> <QueryParam name="PostalCode" /> </QueryParams> </Copy>
Da „PostalCode“ nicht vom Typ „message“ ist (in diesem Beispiel ein String), erhalten Sie den Fehlercode:
steps.assignmessage.VariableOfNonMsgType
Lösung
Sorgen Sie dafür, dass das Attribut source
im Element <Copy>
der fehlgeschlagenen Richtlinie "Nachricht zuweisen" auf eine vorhandene Ablaufvariable vom Typ message festgelegt ist.
Um die Richtlinie zu korrigieren, können Sie das Attribut source
im Element <Copy>
so ändern, dass eine Variable vom Typ "message" angegeben wird. Wenn die Richtlinie "Nachricht zuweisen" beispielsweise im Anfrageablauf ausgeführt werden soll, können Sie die Nachrichtentypvariable request
oder eine beliebige benutzerdefinierte Variable vom Typ "message" verwenden.
<AssignMessage name="GenerateGeocodingRequest">
<AssignTo createNew="true" type="request">GeocodingRequest</AssignTo>
<AssignVariable>
<Name>PostalCode</Name>
<Ref>request.queryparam.postalcode</Ref>
</AssignVariable>
<AssignVariable>
<Name>Country</Name>
<Ref>request.queryparam.country</Ref>
</AssignVariable>
<Copy source="request">
<QueryParams>
<QueryParam name="PostalCode" />
</QueryParams>
</Copy>
</AssignMessage>