現在、Apigee と Apigee ハイブリッドのドキュメントを表示しています。
Apigee Edge のドキュメントを表示する。
UnresolvedVariable
エラーコード
steps.assignmessage.UnresolvedVariable
エラー レスポンスの本文
{ "fault": { "faultstring": "AssignMessage[policy_name]: unable to resolve variable [variable_name]", "detail": { "errorcode": "steps.assignmessage.UnresolvedVariable" } } }
原因
このエラーは、AssignMessage ポリシーで指定された変数が次のいずれかの場合に発生します。
- 範囲外(ポリシーが実行されている特定のフローで使用できない)
- 解決できない(定義されていない)
たとえば、Assign Message ポリシーがリクエスト フローで実行されているのに、<Copy>
要素の source
属性がリクエスト フローに存在しない response
変数、error
変数、またはその他のカスタム変数に設定されている場合にこのエラーが発生します。
診断
エラーが発生した Assign Message ポリシーと使用できない変数の名前を特定します。どちらの項目もエラー レスポンスの
faultstring
要素にあります。たとえば、次の
faultstring
では、googleBook
がポリシー名、var
が変数です。"faultstring": "AssignMessage[googleBook]: unable to resolve variable var"
エラーが発生した Assign Message ポリシーの XML で、使用されている変数名が faultstring(上記の手順 1)で特定された変数名と一致しているかどうかを確認します。たとえば、次のポリシーでは、
<Copy>
要素のソース属性をvar
という名前の変数に設定しています。これは、faultstring
の内容と一致します。<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>
変数が定義されていて、Assign Message ポリシーが実行されているフローで使用できるかどうかを確認します。
変数が次のいずれかの状態になっていないか確認します。
- 範囲外(ポリシーが実行されている特定のフローで使用できない)
- 解決できない(定義されていない)
いずれかの状態が当てはまる場合、それがエラーの原因です。
たとえば、上記の Assign Message ポリシーがリクエスト フローで実行されるとします。リクエスト フローで Assign Message ポリシーの前に実行されるポリシーに変数
var
が定義されているかどうかを確認します。この変数が定義されていない場合は、次のようなエラーコードが表示されます。steps.assignmessage.UnresolvedVariable
解決策
ポリシーで参照される変数があり、Assign Message ポリシーが実行されている特定のフローで使用できることを確認します。
上記のポリシーの例を修正するには、<Copy>
要素のソース属性をリクエスト変数またはリクエスト フローに存在する message 型の他のカスタム変数に変更します。
<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
エラーコード
steps.assignmessage.VariableOfNonMsgType
エラー レスポンスの本文
{ "fault": { "faultstring": "AssignMessage[policy_name]: value of variable [variable] is not of type Message", "detail": { "errorcode": "steps.assignmessage.VariableOfNonMsgType" } } }
原因
このエラーは、<Copy>
要素の source
属性が message 型ではない変数に設定されている場合に発生します。
message 型の変数は HTTP リクエストおよびレスポンス全体を表します。組み込みの Apigee フロー変数である request
、response
、message
は message 型です。message 変数の詳細については、変数リファレンスをご覧ください。
診断
エラーが発生した Assign Message ポリシーと、型が正しくない変数の名前を特定します。どちらの項目もエラー レスポンスの
faultstring
要素にあります。たとえば、次のfaultstring
では、GenerateGeocodingRequest
がポリシー名、PostalCode
が変数です。"faultstring": "AssignMessage[GenerateGeocodingRequest]: value of variable PostalCode is not of type Message"
エラーが発生した JSON to XML ポリシーの XML で、
<Copy>
要素に設定された変数の名前が faultstring(上記の手順 1)で特定された変数名と一致していることを確認します。たとえば、次のポリシーはソース属性をPostalCode
という名前の変数に設定しており、これはfaultstring
の内容と一致します。<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>
この変数が message 型であるかどうかを判定します。
- API プロキシ バンドル内で、最初にその変数が定義されたコードを特定します。
- 変数が最初に定義されて値が入力されたポリシーを特定したら、次のようにして変数の型を特定する必要があります。
- 型属性の値を確認します(存在する場合)。
- 型属性が存在しない場合、その変数は文字列とみなされます。
- 変数の型が message 以外(文字列など)の場合、それがエラーの原因です。よく使われる変数とその型については、変数リファレンスをご覧ください。
たとえば、上記の XML の PostalCode 変数を見てみましょう。フロー変数
request.queryparam.postalcode
の値が<AssignVariable>
要素に割り当てられています。変数の割り当てに型属性が存在しないため、この値は文字列です。PostalCode 変数は Assign Message ポリシーの
<Copy>
要素で使われていることに注意してください。<Copy source="PostalCode"> <QueryParams> <QueryParam name="PostalCode" /> </QueryParams> </Copy>
PostalCode は message 型ではないため(この例では文字列)、次のようなエラーコードが表示されます。
steps.assignmessage.VariableOfNonMsgType
解決策
エラーが発生した Assign Message ポリシーの <Copy>
要素の source
属性が、既存の message 型のフロー変数に設定されていることを確認します。
ポリシーを修正するには、<Copy>
要素の source
属性を変更して message. 型の変数を指定します。たとえば、Assign Message ポリシーがリクエスト フローで実行されると想定される場合は、message 型の変数 request
、または message 型の他のカスタム変数を使用できます。
<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>