Przeglądasz dokumentację Apigee Edge.
Otwórz dokumentację Apigee X. Informacje
InvalidIndex
Komunikat o błędzie
Wdrożenie serwera proxy interfejsu API za pomocą interfejsu Edge lub interfejsu Edge Management API kończy się niepowodzeniem i wyświetlany jest ten komunikat o błędzie:
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]
Przykładowy komunikat o błędzie
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
Przykładowy zrzut ekranu
Przyczyna
Jeśli indeks określony w elementach <Copy>
lub <Remove>
w zasadzie przypisywania wiadomości wynosi 0 lub jest liczbą ujemną, wdrożenie serwera proxy interfejsu API nie powiedzie się.
Jeśli na przykład przekazujesz wiele parametrów zapytania o tej samej nazwie, możesz uzyskać do nich dostęp w Edge jako zindeksowane zmienne przepływu. Jeśli chcesz przekazać identyfikatory 3 uczniów jako parametry zapytania, możesz to zrobić w ten sposób:
https://myorg-test.apigee.net/v1/basepath?school_name=NPS&id=1&id=2&id=3
Następnie załóżmy, że próbujesz uzyskać dostęp do tych parametrów zapytania z numerami indeksu 0, 1 i 2 w zasadzie przypisywania wiadomości w następujący sposób:
id.0
id.1 and
id.2
W takim przypadku wdrożenie serwera proxy się nie uda, ponieważ indeks musi zaczynać się od 1. Oznacza to, że dostęp do pierwszego parametru zapytania „id=1” możesz uzyskać jako „id.1”. Aby uzyskać dostęp do drugiego parametru zapytania „id=2”, musisz użyć indeksu 2, tj. „id.2”. Aby uzyskać dostęp do trzeciego parametru zapytania „id=3”, można użyć parametru „id.3”.
Więcej informacji znajdziesz tutaj.
Diagnostyka
Zidentyfikuj zasadę przypisywania wiadomości, w której wystąpił błąd, nazwę atrybutu i nieprawidłowy indeks. Wszystkie te elementy znajdziesz w komunikacie o błędzie. Na przykład w tym błędzie nazwa zasady to
GeneratingGeocodingRequest
, nazwa atrybutu toid
, a indeks to0
:AssignMessage[GenerateStudentsRequest]: index must be greater than zero in id.0
Sprawdź, czy nazwa atrybutu i indeks użyty w nieudanym pliku XML zasady przypisywania wiadomości są zgodne z nazwą atrybutu i indeksem wskazanym w komunikacie o błędzie (krok 1 powyżej). Na przykład ta zasada określa atrybut
id
i indeks jako0
, który jest zgodny z treścią komunikatu o błędzie:<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>
Jeśli podany indeks to 0 lub liczba ujemna, to jest przyczyną błędu.
W przedstawionym powyżej przykładowej zasadzie przypisywania wiadomości próbujesz uzyskać dostęp do pierwszej wartości parametru zapytania „id”, używając indeksu 0. Z tego powodu wdrożenie serwera proxy interfejsu API kończy się niepowodzeniem i wyświetla się błąd:
AssignMessage[GenerateStudentsRequest]: index must be greater than zero in id.0
Rozdzielczość
Gdy w funkcji Przypisz wiadomość uzyskujesz dostęp do wielu nagłówków, parametrów zapytania lub innych parametrów o tej samej nazwie, upewnij się, że indeks jest zawsze większy niż zero. Na przykład:
<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
Komunikat o błędzie
Wdrożenie serwera proxy interfejsu API za pomocą interfejsu Edge lub interfejsu Edge Management API kończy się niepowodzeniem i wyświetlany jest ten komunikat o błędzie:
Error Saving Revision [revision_number] The revision is deployed, but traffic cannot flow. AssignMessage schema validation failed: invalid variable name - null - in assign variable.
Przykładowy komunikat o błędzie
Error Saving Revision 3
AssignMessage schema validation failed: invalid variable name - null - in assign variable.
Przykładowy zrzut ekranu
Przyczyna
Jeśli element podrzędny <Name>
jest pusty lub nie został określony w elemencie <AssignVariable>
, wdrożenie serwera proxy interfejsu API nie powiedzie się, ponieważ nie ma prawidłowej nazwy zmiennej, do której można przypisać wartość. Wymagana jest prawidłowa nazwa zmiennej.
Diagnostyka
Sprawdź wszystkie zasady przypisywania wiadomości na konkretnym serwerze proxy interfejsu API, na którym wystąpił błąd. Jeśli istnieje jakaś zasada przypisywania wiadomości, w której element podrzędny <Name>
jest pusty lub nie został określony w elemencie <AssignVariable>
, to jest przyczyną błędu.
Przykład 1: poniższe zasady przypisywania wiadomości nie mają zdefiniowanego elementu <Name>
.
<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>
Przykład 2: w poniższej zasadzie przypisywania wiadomości występuje pusty element <Name>
.
<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>
Rozdzielczość
Zadbaj o to, aby element podrzędny <Name>
był zawsze określony i nie był pusty w elemencie <AssignVariable>
w zasadach przypisywania wiadomości. Na przykład:
<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>