شما در حال مشاهده اسناد Apigee Edge هستید.
به مستندات Apigee X بروید . اطلاعات
UnresolvedVariable
کد خطا
steps.assignmessage.UnresolvedVariable
بدنه پاسخ به خطا
{ "fault": { "faultstring": "AssignMessage[policy_name]: unable to resolve variable [variable_name]", "detail": { "errorcode": "steps.assignmessage.UnresolvedVariable" } } }
علت
این خطا در صورتی رخ می دهد که متغیر مشخص شده در خط مشی Assign Message یکی از این موارد باشد:
- خارج از محدوده (در جریان خاصی که سیاست در آن اجرا می شود موجود نیست) یا
- قابل حل نیست (تعریف نشده است)
به عنوان مثال، اگر خط مشی Assign Message در جریان درخواست اجرا شود، این خطا رخ می دهد، اما ویژگی source
در عنصر <Copy>
روی متغیر response
یا error
یا هر متغیر سفارشی دیگری که در جریان درخواست وجود ندارد تنظیم شود.
تشخیص
خط مشی پیام را تعیین کنید که در آن خطا رخ داده است و نام متغیری را که در دسترس نیست مشخص کنید. شما می توانید هر دوی این موارد را در عنصر
faultstring
پاسخ خطا پیدا کنید.به عنوان مثال، در
faultstring
زیر، نام سیاستgoogleBook
و متغیرvar
است:"faultstring": "AssignMessage[googleBook]: unable to resolve variable var"
در XML ناموفق Assign Message Policy، بررسی کنید که نام متغیر مورد استفاده با نام متغیر شناسایی شده در رشته خطا مطابقت داشته باشد (مرحله شماره 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 نشان داده شده در بالا در جریان درخواست اجرا می شود. بررسی کنید که آیا متغیر
var
در هر یک از سیاستهایی که قبل از خطمشی Assign Message در جریان درخواست اجرا میشوند، تعریف شده است یا خیر. اگر متغیر تعریف نشده باشد، کد خطا را دریافت خواهید کرد:steps.assignmessage.UnresolvedVariable
قطعنامه
اطمینان حاصل کنید که متغیر اشاره شده در خط مشی وجود دارد و در جریان خاص، جایی که خط مشی Assign Message در حال اجرا است، موجود است.
برای تصحیح سیاست مثال نشان داده شده در بالا، می توانید ویژگی منبع را در عنصر <Copy>
تغییر دهید تا متغیر درخواست یا هر متغیر سفارشی دیگری از نوع پیام باشد که در جریان درخواست وجود دارد.
<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" } } }
علت
اگر مشخصه source
در عنصر <Copy>
روی متغیری تنظیم شود که از نوع پیام نیست، این خطا رخ می دهد.
متغیرهای نوع پیام، کل درخواستها و پاسخهای HTTP را نشان میدهند. متغیرهای جریان لبه داخلی request
، response
و message
از نوع پیام هستند. برای کسب اطلاعات بیشتر در مورد متغیرهای پیام، به مرجع متغیرها مراجعه کنید.
تشخیص
خط مشی پیام را تعیین کنید که در آن خطا رخ داده است و نام متغیری که نوع آن نادرست است را مشخص کنید. شما می توانید هر دوی این موارد را در عنصر
faultstring
پاسخ خطا پیدا کنید. به عنوان مثال، درfaultstring
زیر، نام سیاستGenerateGeocodingRequest
و متغیرPostalCode
است:"faultstring": "AssignMessage[GenerateGeocodingRequest]: value of variable PostalCode is not of type Message"
در XML ناموفق Assign Message Policy، بررسی کنید که نام مجموعه متغیر در عنصر
<Copy>
با نام متغیر شناسایی شده در رشته خطا مطابقت داشته باشد (مرحله شماره 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>
تعیین کنید که آیا این متغیر از نوع پیام است یا خیر:
- کد را در بسته API Proxy، جایی که متغیر ابتدا تعریف شده است، قرار دهید.
- هنگامی که سیاستی را که ابتدا متغیر در آن تعریف و پر شده است، مشخص کردید، باید نوع آن متغیر را به صورت زیر تعیین کنید:
- مقدار ویژگی type (در صورت وجود) را بررسی کنید.
- اگر ویژگی type وجود نداشته باشد، متغیر به عنوان یک رشته در نظر گرفته می شود.
- اگر نوع متغیر غیر پیامی باشد (مثلاً رشته ای)، پس علت خطا همین است. در مرجع Variables می توانید با متغیرهای رایج و انواع آنها آشنا شوید.
برای مثال، به متغیر PostalCode در XML بالا نگاه کنید. مقدار متغیر جریان
request.queryparam.postalcode
در عنصر<AssignVariable>
به آن اختصاص داده می شود. این مقدار یک رشته است، زیرا هیچ ویژگی نوع در انتساب متغیر وجود ندارد.اکنون، به یاد بیاورید که متغیر PostalCode در عنصر
<Copy>
خط مشی Assign Message استفاده می شود:<Copy source="PostalCode"> <QueryParams> <QueryParam name="PostalCode" /> </QueryParams> </Copy>
از آنجایی که PostalCode از نوع پیام نیست (در این مثال یک رشته است)، کد خطا را دریافت می کنید:
steps.assignmessage.VariableOfNonMsgType
قطعنامه
اطمینان حاصل کنید که ویژگی source
در عنصر <Copy>
در خط مشی ناموفق Assign Message روی متغیر جریان نوع پیام موجود تنظیم شده است.
برای تصحیح خط مشی، می توانید ویژگی source
را در عنصر <Copy>
تغییر دهید تا متغیری از نوع پیام را مشخص کنید. به عنوان مثال، اگر قرار است خط مشی Assign Message در جریان درخواست اجرا شود، می توانید request
متغیر نوع پیام یا هر متغیر سفارشی دیگری از نوع پیام استفاده کنید.
<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>