Fehlerbehebung bei der Bereitstellung von Nachrichtenrichtlinien

Sie lesen gerade die Dokumentation zu Apigee und Apigee Hybrid.
Apigee Edge-Dokumentation aufrufen.

InvalidIndex

Fehlermeldung

Die Bereitstellung des API-Proxys über die Apigee-Benutzeroberfläche oder die API schlägt mit der folgenden Fehlermeldung fehl:

Error in deployment for environment [environment]
The revision is deployed, but traffic cannot flow.
AssignMessage[policy_name]: index must be greater than zero in [attribute].[index]

Beispiel für Fehlermeldung

Error in deployment for environment test.
The revision is deployed, but traffic cannot flow.
AssignMessage[GenerateStudentsRequest]: index must be greater than zero in id.0

Beispiel-Screenshot

Fehler bei der Bereitstellung für den Umgebungstest.

Ursache

Wenn der in den Elementen <Copy> und/oder <Remove> der Richtlinie "Nachricht zuweisen" angegebene Wert 0 oder eine negative Zahl ist, schlägt die Bereitstellung des API-Proxys fehl.

Wenn Sie beispielsweise mehrere Abfrageparameter mit demselben Namen übergeben, können Sie auf diese als indexierte Ablaufvariablen zugreifen. Wenn Sie die IDs von drei Studenten als Abfrageparameter übergeben möchten, gehen Sie so vor:

https://$EXTERNAL_IP/$PROXY_BASEPATH?school_name=NPS&id=1&id=2&id=3

Nehmen wir außerdem an, Sie möchten auf die folgenden Abfrageparameter mit den Indexnummern 0, 1 und 2 in der Richtlinie "Nachricht zuweisen" wie folgt zugreifen:

id.0
id.1 and
id.2

In diesem Fall schlägt die Bereitstellung des Proxys fehl, da der Index mit 1 beginnen muss. Sie können also auf den ersten Abfrageparameter "id=1" als "id.1" zugreifen. Für den Zugriff auf den zweiten Abfrageparameter "id=2" müssen Sie Index 2, also "id.2", verwenden. In ähnlicher Weise können Sie "id.3" verwenden, um auf den dritten Abfrageparameter "id=3" zuzugreifen.

Weitere Informationen finden Sie in der Dokumentation AssignMessage-Richtlinie Copy Element.

Diagnose

  1. Geben Sie die Richtlinie "Nachricht zuweisen" an, in der der Fehler aufgetreten ist, den Namen des Attributs und den ungültigen Index. Sie finden alle diese Elemente in der Fehlermeldung. Beispiel: Im folgenden Fehler lautet der Richtlinienname GeneratingGeocodingRequest, der Name des Attributs id und der Index 0:

    AssignMessage[GenerateStudentsRequest]: index must be greater than zero in id.0
    
  2. Überprüfen Sie, ob der Attributname und der Index in der fehlgeschlagenen XML-Richtlinie für die Zuweisung von Nachrichten mit dem Attributnamen und dem in der Fehlermeldung angegebenen Index übereinstimmen (Schritt 1 oben). Die folgende Richtlinie gibt beispielsweise das Attribut id und den Index als 0 an, was dem Inhalt der Fehlermeldung entspricht:

    <AssignMessage name="GenerateStudentsRequest">
      <AssignTo createNew="true" type="request">StudentsInfoRequest</AssignTo>
      <Copy source="request">
          <QueryParams>
              <QueryParam name="school_name"/>
              <QueryParam name="id.0"/>
              <QueryParam name="id.1"/>
              <QueryParam name="id.2"/>
          </QueryParams>
      </Copy>
    </AssignMessage>
  3. Wenn der angegebene Wert 0 oder eine negative Zahl ist, ist dies die Ursache des Fehlers.

    In dem oben gezeigten Beispiel Assign Message-Richtlinie versucht man, mit dem Index 0 auf den ersten Wert des Abfrageparameters "id" zuzugreifen. Daher schlägt die Bereitstellung des API-Proxys mit folgendem Fehler fehl:

    AssignMessage[GenerateStudentsRequest]: index must be greater than zero in id.0
    

Lösung

Wenn Sie unter "Nachricht zuweisen" auf mehrere Header, Abfrageparameter oder andere Parameter mit dem gleichen Namen zugreifen, achten Sie darauf, dass der Index immer größer als null ist. Beispiel:

<AssignMessage name="GenerateStudentsRequest">
    <AssignTo createNew="true" type="request">StudentsInfoRequest</AssignTo>
    <Copy source="request">
        <QueryParams>
            <QueryParam name="school_name"/>
            <QueryParam name="id.1"/>
            <QueryParam name="id.2"/>
            <QueryParam name="id.3"/>
        </QueryParams>
    </Copy>
</AssignMessage>

InvalidVariableName

Fehlermeldung

Die Bereitstellung des API-Proxys über die Apigee-Benutzeroberfläche oder die API schlägt mit der folgenden Fehlermeldung fehl:

Error Saving Revision [revision_number]
The revision is deployed, but traffic cannot flow. AssignMessage schema validation failed: invalid variable name - null - in assign variable.

Beispiel für Fehlermeldung

Error Saving Revision 3
AssignMessage schema validation failed: invalid variable name - null - in assign variable.

Beispiel-Screenshot

Fehler beim Speichern von Revision 3.

Ursache

Wenn das untergeordnete Element <Name> leer ist oder nicht im Element <AssignVariable> angegeben ist, schlägt die Bereitstellung des API-Proxys fehl, da kein gültiger Variablenname vorhanden ist, dem ein Wert zugewiesen werden soll. Ein gültiger Variablenname ist erforderlich.

Diagnose

Untersuchen Sie alle Richtlinien zum Zuweisen von Nachrichten im jeweiligen API-Proxy, in dem der Fehler aufgetreten ist. Wenn eine Richtlinie für die Zuweisung von Nachrichten vorhanden ist, in der das untergeordnete Element <Name> leer oder im Element <AssignVariable> nicht angegeben ist, ist dies die Fehlerursache.

Beispiel 1: Für die folgende Nachrichtenzuweisungsrichtlinie ist kein <Name>-Element definiert.

<AssignMessage async="false" continueOnError="false" enabled="true" name="Assign-Message-1">
    <DisplayName>Assign Message-1</DisplayName>
    <Properties/>
    <AssignVariable>
        <Value>abcd1234</Value>
    </AssignVariable>
    <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
    <AssignTo createNew="true" transport="http" type="request">googleBookReq</AssignTo>
</AssignMessage>

Beispiel 2: Die folgende Richtlinie zum Zuweisen von Nachrichten enthält ein leeres <Name>-Element .

<AssignMessage async="false" continueOnError="false" enabled="true" name="Assign-Message-1">
    <DisplayName>Assign Message-1</DisplayName>
    <Properties/>
    <AssignVariable>
        <Name></Name>
        <Value>abcd1234</Value>
    </AssignVariable>
    <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
    <AssignTo createNew="true" transport="http" type="request">googleBookReq</AssignTo>
</AssignMessage>

Lösung

Achten Sie darauf, dass das untergeordnete Element <Name> immer im Element <AssignVariable> der Richtlinie "Nachricht zuweisen" angegeben und nicht leer ist. Beispiel:

<AssignMessage async="false" continueOnError="false" enabled="true" name="Assign-Message-1">
    <DisplayName>Assign Message-1</DisplayName>
    <Properties/>
        <AssignVariable>
        <Name>appSecret</Name>
        <Value>abcd1234</Value>
    </AssignVariable>
    <IgnoreUnresolvedVariables>false</IgnoreUnresolvedVariables>
    <AssignTo createNew="true" transport="http" type="request">googleBookReq</AssignTo>
</AssignMessage>