شما در حال مشاهده اسناد Apigee Edge هستید.
به مستندات Apigee X بروید . اطلاعات
منبع در دسترس نیست
کد خطا
steps.json2xml.SourceUnavailable
بدنه پاسخ به خطا
{ "fault": { "faultstring": "JSONToXML[policy_name]: Source [source_variable] is not available", "detail": { "errorcode": "steps.json2xml.SourceUnavailable" } } }
خطای مثال
{
"fault": {
"faultstring": "JSONToXML[Convert-JSONToXML]: Source response is not available",
"detail": {
"errorcode": "steps.json2xml.SourceUnavailable"
}
}
}
علت
این خطا در صورتی رخ می دهد که متغیر پیام مشخص شده در عنصر <Source>
خط مشی JSON به XML یکی از این موارد باشد:
- خارج از محدوده (در جریان خاصی که سیاست در آن اجرا می شود موجود نیست) یا
- قابل حل نیست (تعریف نشده است)
به عنوان مثال، اگر قرار باشد خط مشی JSON به XML در جریان درخواست اجرا شود، این خطا رخ می دهد، اما عنصر <Source>
روی متغیر response
تنظیم می شود که در جریان درخواست وجود ندارد.
تشخیص
خط مشی JSON به XML را که در آن خطا رخ داده است و نام متغیری که در دسترس نیست شناسایی کنید. شما می توانید هر دوی این موارد را در عنصر
faultstring
پاسخ خطا پیدا کنید. به عنوان مثال، درfaultstring
زیر، نام سیاستConvert-JSONToXML
است و متغیرresponse
است:"faultstring": "JSONToXML[Convert-JSONToXML]: Source response is not available"
در خط مشی XML JSON به XML ناموفق، بررسی کنید که نام متغیر مجموعه در عنصر
<Source>
با نام متغیر شناسایی شده در رشته خطا مطابقت داشته باشد (مرحله شماره 1 در بالا). به عنوان مثال، خط مشی JSON به XML زیر یکresponse
به نام متغیر را در عنصر<Source>
مشخص می کند که با آنچه درfaultstring
است مطابقت دارد:<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <JSONToXML async="false" continueOnError="false" enabled="true" name="Convert-JSONToXML"> <DisplayName>Convert-JSONToXML</DisplayName> <Properties/> <Options> <NullValue>NULL</NullValue> <NamespaceBlockName>#namespaces</NamespaceBlockName> <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName> <NamespaceSeparator>:</NamespaceSeparator> <TextNodeName>#text</TextNodeName> <AttributeBlockName>#attrs</AttributeBlockName> <AttributePrefix>@</AttributePrefix> <InvalidCharsReplacement>_</InvalidCharsReplacement> <ObjectRootElementName>Root</ObjectRootElementName> <ArrayRootElementName>Array</ArrayRootElementName> <ArrayItemElementName>Item</ArrayItemElementName> </Options> <OutputVariable>request</OutputVariable> <Source>response</Source> </JSONToXML>
تعیین کنید که آیا متغیر مورد استفاده در عنصر
<Source>
در جریانی که در آن خط مشی JSON به XML در حال اجرا است، تعریف شده و در دسترس است یا خیر.اگر متغیر یکی از این موارد باشد:
- خارج از محدوده (در جریان خاصی که سیاست در آن اجرا می شود موجود نیست) یا
- قابل حل نیست (تعریف نشده است)
پس این دلیل خطا است.
به عنوان مثال، فرض کنید سیاست JSON به XML نشان داده شده در بالا قرار است در جریان درخواست اجرا شود. به یاد بیاورید که متغیر
response
در عنصر<Source>
خط مشی JSON به XML استفاده می شود. متغیر پاسخ فقط در جریان پاسخ موجود است.از آنجایی که متغیر
response
در جریان درخواست وجود ندارد، کد خطا را دریافت می کنید:steps.json2xml.SourceUnavailable
قطعنامه
مطمئن شوید که مجموعه متغیر در عنصر <Source>
خط مشی ناموفق JSON به XML تعریف شده است و در جریانی که خط مشی اجرا می شود وجود دارد.
برای اصلاح مثال JSON به XML که در بالا نشان داده شده است، می توانید عنصر <Source>
را برای استفاده از متغیر request
تغییر دهید، زیرا در جریان درخواست وجود دارد:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<JSONToXML async="false" continueOnError="false" enabled="true" name="Convert-JSONToXML">
<DisplayName>Convert-JSONToXML</DisplayName>
<Properties/>
<Options>
<NullValue>NULL</NullValue>
<NamespaceBlockName>#namespaces</NamespaceBlockName>
<DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName>
<NamespaceSeparator>:</NamespaceSeparator>
<TextNodeName>#text</TextNodeName>
<AttributeBlockName>#attrs</AttributeBlockName>
<AttributePrefix>@</AttributePrefix>
<InvalidCharsReplacement>_</InvalidCharsReplacement>
<ObjectRootElementName>Root</ObjectRootElementName>
<ArrayRootElementName>Array</ArrayRootElementName>
<ArrayItemElementName>Item</ArrayItemElementName>
</Options>
<OutputVariable>request</OutputVariable>
<Source>request</Source>
</JSONToXML>
اجرا ناموفق بود
کد خطا
steps.json2xml.ExecutionFailed
بدنه پاسخ به خطا
{ "fault": { "faultstring": "JSONToXML[policy_name]: Execution failed due to reason: Expecting { or [ at line 1", "detail": { "errorcode": "steps.json2xml.ExecutionFailed" } } }
علل احتمالی
دلایل احتمالی این خطا عبارتند از:
علت | توضیحات |
محموله ورودی وجود ندارد | محموله ورودی (JSON) خالی است. |
ورودی نامعتبر یا نادرست | ورودی (JSON) ارسال شده به خط مشی JSON به XML نامعتبر یا نادرست است. |
علت: از دست رفتن بار ورودی
در خط مشی JSON به XML اگر محتوای (بارگذاری بار) متغیر مشخص شده در عنصر <Source>
خالی باشد، این خطا رخ می دهد.
برای مثال، اگر عنصر <Source>
در خطمشی JSON به XML بهعنوان متغیر request
یا response
تنظیم شده باشد و قرار باشد حاوی یک بار JSON باشد، اما اگر بار خالی باشد، خطا رخ میدهد.
تشخیص
خط مشی JSON به XML را در جایی که خطا رخ داده است شناسایی کنید. شما می توانید این اطلاعات را در عنصر
faultstring
پاسخ خطا پیدا کنید. به عنوان مثال، درfaultstring
زیر، نام خط مشیConvert-JSONToXML
است:"faultstring": "JSONToXML[Convert-JSONToXML]: Execution failed due to reason: Expecting { or [ at line 1"
عنصر
<Source>
را در خط مشی ناموفق JSON به XML XML بررسی کنید و متغیر مشخص شده را تعیین کنید. به عنوان مثال، خط مشی JSON به XML زیر دارای عنصر<Source>
برایrequest
است:<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <JSONToXML async="false" continueOnError="false" enabled="true" name="Convert-JSONToXML"> <DisplayName>Convert-JSONToXML</DisplayName> <Properties/> <Options> <NullValue>NULL</NullValue> <NamespaceBlockName>#namespaces</NamespaceBlockName> <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName> <NamespaceSeparator>:</NamespaceSeparator> <TextNodeName>#text</TextNodeName> <AttributeBlockName>#attrs</AttributeBlockName> <AttributePrefix>@</AttributePrefix> <InvalidCharsReplacement>_</InvalidCharsReplacement> <ObjectRootElementName>Root</ObjectRootElementName> <ArrayRootElementName>Array</ArrayRootElementName> <ArrayItemElementName>Item</ArrayItemElementName> </Options> <OutputVariable>request</OutputVariable> <Source>request</Source> </JSONToXML>
بررسی کنید که آیا متغیر مشخص شده برای عنصر
<Source>
در خط مشی خالی است یا خیر. اگر خالی است، دلیل این خطا است.در مثال سیاست JSON به XML نشان داده شده در بالا، بار درخواست (یعنی بدنه درخواست) که توسط مشتری ارسال شده است خالی است.
به عنوان مثال:
curl -v "http://<org>-<env>.apigee.net/v1/testjsontoxml" -H "Content-Type: application/json"
از آنجایی که بار پاسخ JSON خالی است، کد خطا را دریافت می کنید:
steps.json2xml.ExecutionFailed
این خطا همچنین می تواند رخ دهد اگر عنصر
<Source>
روی پاسخ تنظیم شده باشد، اما یک بار خالی توسط سرور backend ارسال شود.
قطعنامه
اطمینان حاصل کنید که ورودی ارسال شده به خط مشی JSON به XML در عنصر <Source>
دارای بار JSON معتبر و خالی است.
برای رفع مشکل نمونه خط مشی JSON به XML، یک بار معتبر JSON ارسال کنید. به عنوان مثال:
یک فایل با نام
city.json
با محتوای زیر ایجاد کنید:{ "Name":"Apigee", "City":"Bengaluru", "Pincode":"560016" }
تماس API را با استفاده از دستور cURL به صورت زیر انجام دهید:
curl -v "http://<org>-<env>.apigee.net/v1/testxmltojson" -H "Content-Type: application/json" -X POST -d @company.json
علت: ورودی نامعتبر یا نادرست
اگر خط مشی JSON به XML ورودی نامعتبر یا بد شکل را تجزیه می کند، این خطا را دریافت می کنید.
به عنوان مثال، اگر JSON نامعتبر زیر به عنوان ورودی خط مشی JSON به XML ارائه شود،
[
"args": ["name" : "Google" ]
]
خطا را دریافت خواهید کرد:
"faultstring": "JSONToXML[Convert-JSONToXML]: Execution failed due to reason: Expecting { or [ at line 1"
تشخیص
خط مشی JSON به XML را در جایی که خطا رخ داده است شناسایی کنید. شما می توانید این اطلاعات را در عنصر
faultstring
پاسخ خطا پیدا کنید. به عنوان مثال، درfaultstring
زیر، نام خط مشیConvert-JSONToXML
است:"faultstring": "JSONToXML[Convert-JSONToXML]: Execution failed due to reason: Expecting { or [ at line 1"
عنصر
<Source>
مشخص شده در خط مشی XML JSON به XML ناموفق را بررسی کنید. به عنوان مثال، سیاست JSON به XML زیر دارای عنصر<Source>
برای متغیرrequest
است:<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <JSONToXML async="false" continueOnError="false" enabled="true" name="Convert-JSONToXML"> <DisplayName>Convert-JSONToXML</DisplayName> <Properties/> <Options> <NullValue>NULL</NullValue> <NamespaceBlockName>#namespaces</NamespaceBlockName> <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName> <NamespaceSeparator>:</NamespaceSeparator> <TextNodeName>#text</TextNodeName> <AttributeBlockName>#attrs</AttributeBlockName> <AttributePrefix>@</AttributePrefix> <InvalidCharsReplacement>_</InvalidCharsReplacement> <ObjectRootElementName>Root</ObjectRootElementName> <ArrayRootElementName>Array</ArrayRootElementName> <ArrayItemElementName>Item</ArrayItemElementName> </Options> <OutputVariable>request</OutputVariable> <Source>request</Source> </JSONToXML>
اگر ورودی مشخص شده در عنصر
<Source>
یک بار JSON معتبر باشد، اعتبارسنجی کنید. اگر ورودی نامعتبر یا نادرست باشد، دلیل این خطا است.فرض کنید JSON نامعتبر زیر به خط مشی منتقل شده است
[ "args": ["name" : "Google" ] ]
در اینجا نمونه فراخوانی API است که نحوه ارسال درخواست را نشان می دهد:
curl -v "http://<org>-<env>.apigee.net/v1/testjsontoxml" -H "Content-Type: application/json" -X POST -d '[ "args" : ["name" : "Google" ]]'
محموله JSON ارسال شده در درخواست نامعتبر است زیرا شی JSON با براکت ([ ]) شروع و پایان مییابد. به همین دلیل کد خطا را دریافت می کنید:
steps.json2xml.ExecutionFailed
اگر عنصر
<Source>
روی پاسخ تنظیم شده باشد، اما بار پاسخ JSON نامعتبر یا نادرست باشد، این خطا ممکن است رخ دهد.
قطعنامه
اطمینان حاصل کنید که ورودی ارسال شده به خط مشی JSON به XML در عنصر <Source>
معتبر است و بدشکل نیست.
برای رفع مشکل نمونه خط مشی JSON به XML که در بالا مورد بحث قرار گرفت، یک درخواست معتبر JSON payload را به شرح زیر ارسال کنید:
{
"args" : {
"name" : "Google"
}
}
OutputVariableIsNotAvailable
کد خطا
steps.json2xml.OutputVariableIsNotAvailable
بدنه پاسخ به خطا
{ "fault": { "faultstring": "JSONToXML[policy_name]: Output variable is not available.", "detail": { "errorcode": "steps.json2xml.OutputVariableIsNotAvailable" } } }
خطای مثال
{
"fault": {
"faultstring": "JSONToXML[Check-JSONToXML]: Output variable is not available.",
"detail": {
"errorcode": "steps.json2xml.OutputVariableIsNotAvailable"
}
}
}
علت
اگر متغیر مشخص شده در عنصر <Source>
سیاست JSON به XML از نوع string باشد و عنصر <OutputVariable>
تعریف نشده باشد، این خطا رخ می دهد. عنصر <OutputVariable>
زمانی اجباری است که متغیر تعریف شده در عنصر <Source>
از نوع رشته باشد.
تشخیص
خط مشی JSON به XML را که در آن خطا رخ داده است شناسایی کنید. این را می توانید در عنصر
faultstring
پاسخ خطا پیدا کنید. به عنوان مثال، درfaultstring
زیر، نام خط مشیCheck-JSONToXML
است:"faultstring": "JSONToXML[Check-JSONToXML]: Output variable is not available."
در خط مشی JSON به XML ناموفق، اگر
<OutputVariable>
وجود نداشته باشد، اعتبارسنجی کنید.نمونه خط مشی JSONToXML زیر یک عنصر
<OutputVariable>
ندارد:<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <JSONToXML async="false" continueOnError="false" enabled="true" name="JSONToXML"> <DisplayName>Check-JSONToXML</DisplayName> <Properties/> <Options> <NullValue>NULL</NullValue> <NamespaceBlockName>#namespaces</NamespaceBlockName> <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName> <NamespaceSeparator>:</NamespaceSeparator> <TextNodeName>#text</TextNodeName> <AttributeBlockName>#attrs</AttributeBlockName> <AttributePrefix>@</AttributePrefix> <InvalidCharsReplacement>_</InvalidCharsReplacement> <ObjectRootElementName>Root</ObjectRootElementName> <ArrayRootElementName>Array</ArrayRootElementName> <ArrayItemElementName>Item</ArrayItemElementName> </Options> <Source>PostalCode</Source> </JSONToXML>
نوع متغیر مشخص شده در عنصر
<Source>
را تعیین کنید:- کد را در API Proxy جایی که متغیر ابتدا تعریف شده است، قرار دهید.
- هنگامی که سیاستی را که ابتدا متغیر در آن تعریف و پر شده است، مشخص کردید، باید نوع آن متغیر را به صورت زیر تعیین کنید:
- مقدار ویژگی type (در صورت وجود) را بررسی کنید.
- اگر ویژگی type وجود نداشته باشد، متغیر به عنوان یک رشته در نظر گرفته می شود.
- اگر نوع متغیر رشته ای است، پس دلیل خطا همین است. در مرجع Variables می توانید با متغیرهای رایج و انواع آنها آشنا شوید.
به عنوان مثال، به متغیر
PostalCode
در خط مشی JSON به XML بالا نگاه کنید.به عنوان مثال، در نظر بگیرید که یک خط مشی Assign Message برای تخصیص یک مقدار به متغیری به نام
PostalCode
مطابق شکل زیر استفاده می شود:<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <AssignMessage async="false" continueOnError="false" enabled="true" name="Assign_PostalCode"> <DisplayName>Assign_PostalCode</DisplayName> <Properties/> <AssignVariable> <Name>PostalCode</Name> <Value>{"value":"56008"}</Value> <Ref/> </AssignVariable> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
توجه داشته باشید که نوع متغیر تنظیم شده در
<AssignVariable>
رشته است. بنابراین متغیرPostalCode
از نوع string است.اکنون، به یاد بیاورید که متغیر
PostalCode
در عنصر<Source>
خط مشی JSONToXML استفاده می شود:<Source>PostalCode</Source>
از آنجایی که
PostalCode
از نوع رشته ای است و عنصر<OutputVariable>
وجود ندارد، کد خطا را دریافت می کنید:steps.json2xml.OutputVariableIsNotAvailable
قطعنامه
اطمینان حاصل کنید که اگر متغیر مشخص شده در عنصر <Source>
سیاست JSONToXML از نوع رشته باشد، عنصر <OutputVariable>
در خط مشی تعریف شده است.
به منظور تصحیح خط مشی JSONToXML که در بالا توضیح داده شد، یک عنصر <OutputVariable>
را مطابق شکل زیر اضافه کنید.
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<JSONToXML async="false" continueOnError="false" enabled="true" name="JSONToXML">
<DisplayName>Check-JSONToXML</DisplayName>
<Properties/>
<Options>
<NullValue>NULL</NullValue>
<NamespaceBlockName>#namespaces</NamespaceBlockName>
<DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName>
<NamespaceSeparator>:</NamespaceSeparator>
<TextNodeName>#text</TextNodeName>
<AttributeBlockName>#attrs</AttributeBlockName>
<AttributePrefix>@</AttributePrefix>
<InvalidCharsReplacement>_</InvalidCharsReplacement>
<ObjectRootElementName>Root</ObjectRootElementName>
<ArrayRootElementName>Array</ArrayRootElementName>
<ArrayItemElementName>Item</ArrayItemElementName>
</Options>
<OutputVariable>response</OutputVariable>
<Source>PostalCode</Source>
</JSONToXML>
انواع ناسازگار
کد خطا
steps.json2xml.InCompatibleTypes
بدنه پاسخ به خطا
{ "fault": { "faultstring": "JSONToXML[policy_name]: String can not be assigned to message type.", "detail": { "errorcode": "steps.json2xml.InCompatibleTypes" } } }
خطای مثال
{
"fault": {
"faultstring": "JSONToXML[JSONToXML_checktype]: String can not be assigned to message type.",
"detail": {
"errorcode": "steps.json2xml.InCompatibleTypes"
}
}
}
علت
این خطا در صورتی رخ می دهد که نوع متغیر تعریف شده در عنصر <Source>
و عنصر <OutputVariable>
یکسان نباشد. اجباری است که نوع متغیرهای موجود در عنصر <Source>
و عنصر <OutputVariable>
مطابقت داشته باشد.
انواع معتبر message
و string
هستند.
تشخیص
خط مشی JSON به XML را که در آن خطا رخ داده است شناسایی کنید. این را می توانید در عنصر
faultstring
پاسخ خطا پیدا کنید. به عنوان مثال، درfaultstring
زیر، نام خط مشیJSONToXML_checktype
است:"faultstring": "JSONToXML[JSONToXML_checktype]: String can not be assigned to message type."
در خط مشی JSON به XML ناموفق، مقادیر مشخص شده در
<OutputVariable>
و<Source>
را یادداشت کنید.سیاست مثال زیر را در نظر بگیرید:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <JSONToXML async="false" continueOnError="false" enabled="true" name="JSONToXML_checktype"> <DisplayName>JSONToXML_checktype</DisplayName> <Properties/> <Options> <NullValue>NULL</NullValue> <NamespaceBlockName>#namespaces</NamespaceBlockName> <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName> <NamespaceSeparator>:</NamespaceSeparator> <TextNodeName>#text</TextNodeName> <AttributeBlockName>#attrs</AttributeBlockName> <AttributePrefix>@</AttributePrefix> <InvalidCharsReplacement>_</InvalidCharsReplacement> <ObjectRootElementName>Root</ObjectRootElementName> <ArrayRootElementName>Array</ArrayRootElementName> <ArrayItemElementName>Item</ArrayItemElementName> </Options> <OutputVariable>response</OutputVariable> <Source>PostalCode</Source> </JSONToXML>
نوع متغیر مشخص شده در عناصر
<Source>
و<OutputVariable>
را تعیین کنید:- کد را در پروکسی API که در آن ابتدا هر یک از این متغیرها تعریف شده است، قرار دهید.
- هنگامی که سیاستی را که ابتدا متغیر در آن تعریف و پر شده است، مشخص کردید، باید نوع آن متغیر را به صورت زیر تعیین کنید:
- مقدار ویژگی type (در صورت وجود) را بررسی کنید.
- اگر ویژگی type وجود نداشته باشد، متغیر به عنوان یک رشته در نظر گرفته می شود.
- اگر نوع متغیر مشخص شده در
<Source>
رشته ای باشد در حالی که نوع<OutputVariable>
پیام است یا برعکس، آنگاه علت خطا همین است. در مرجع Variables می توانید با متغیرهای رایج و انواع آنها آشنا شوید.
به عنوان مثال، یک خط مشی Assign Message را در نظر بگیرید که برای تخصیص یک مقدار به متغیری به نام
PostalCode
مانند شکل زیر استفاده می شود:<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <AssignMessage async="false" continueOnError="false" enabled="true" name="Assign_PostalCode"> <DisplayName>Assign_PostalCode</DisplayName> <Properties/> <AssignVariable> <Name>PostalCode</Name> <Value>{"value":"56008"}</Value> <Ref/> </AssignVariable> <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables> <AssignTo createNew="false" transport="http" type="request"/> </AssignMessage>
توجه داشته باشید که نوع متغیر تنظیم شده در
<AssignVariable>
string است. بنابراین، متغیرPostalCode
از نوع رشته است.اکنون، به یاد بیاورید که متغیر
PostalCode
در عنصر<Source>
خط مشی JSONToXML استفاده می شود:<Source>PostalCode</Source>
به طور مشابه، به یاد بیاورید که متغیر
response
در عنصر<OutputVariable>
سیاست JSONToXML استفاده می شود:<OutputVariable>response</OutputVariable>
از آنجایی که
PostalCode
از نوع رشته ای است در حالی که متغیرresponse
از نوع پیام است، انواع ناسازگار هستند، بنابراین کد خطا را دریافت می کنید:steps.json2xml.InCompatibleTypes
اگر متغیر موجود در عنصر
<Source>
از نوعmessage
باشد، اما متغیر موجود در عنصر<OutputVariable>
از نوع رشته باشد، خطای فوق می تواند رخ دهد.
قطعنامه
اطمینان حاصل کنید که نوع متغیر تعریف شده در عنصر <Source>
و عنصر <OutputVariable>
همیشه یکسان هستند. اجباری است که نوع متغیرهای موجود در عنصر <Source>
و عنصر <OutputVariable>
مطابقت داشته باشد. یعنی مطمئن شوید که نوع عناصر <Source>
و <OutputVariable>
هر دو از نوع رشته یا پیام هستند.
برای تصحیح خطمشی JSON به XML که در بالا توضیح داده شد، میتوانید متغیر دیگری از نوع PostalCode_output
با استفاده از Assign Message Policy اعلام کنید و از این متغیر در عنصر <OutputVariable>
سیاست JSON به XML استفاده کنید.
تغییر خط مشی پیام اختصاص دادن:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AssignMessage async="false" continueOnError="false" enabled="true" name="Assign_PostalCode">
<DisplayName>Assign_PostalCode</DisplayName>
<Properties/>
<AssignVariable>
<Name>PostalCode</Name>
<Value>{"value":"56008"}</Value>
<Ref/>
</AssignVariable>
<AssignVariable>
<Name>PostalCode_output</Name>
<Ref/>
</AssignVariable>
<IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
<AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>
سیاست JSONToXML اصلاح شده:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<JSONToXML async="false" continueOnError="false" enabled="true" name="JSONToXML">
<DisplayName>JSONToXML_checktype</DisplayName>
<Properties/>
<Options>
<NullValue>NULL</NullValue>
<NamespaceBlockName>#namespaces</NamespaceBlockName>
<DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName>
<NamespaceSeparator>:</NamespaceSeparator>
<TextNodeName>#text</TextNodeName>
<AttributeBlockName>#attrs</AttributeBlockName>
<AttributePrefix>@</AttributePrefix>
<InvalidCharsReplacement>_</InvalidCharsReplacement>
<ObjectRootElementName>Root</ObjectRootElementName>
<ArrayRootElementName>Array</ArrayRootElementName>
<ArrayItemElementName>Item</ArrayItemElementName>
</Options>
<OutputVariable>PostalCode_output</OutputVariable>
<Source>PostalCode</Source>
</JSONToXML>
InvalidSourceType
کد خطا
steps.json2xml.InvalidSourceType
بدنه پاسخ به خطا
{ "fault": { "faultstring": "JSONToXML[class invalid_class]: Invalid source type class invalid_class. Valid source types are [message, string].", "detail": { "errorcode": "steps.json2xml.InvalidSourceType" } } }
خطای مثال
{
"fault": {
"faultstring": "JSONToXML[class java.lang.Integer]: Invalid source type class java.lang.Integer. Valid source types are [message, string].",
"detail": {
"errorcode": "steps.json2xml.InvalidSourceType"
}
}
}
علت
این خطا در صورتی رخ می دهد که نوع متغیر مورد استفاده برای تعریف عنصر <Source>
نامعتبر باشد. انواع معتبر متغیر message
و string
هستند.
تشخیص
نوع منبع نامعتبر مورد استفاده در خط مشی JSON به XML را شناسایی کنید. شما می توانید این اطلاعات را در پیام خطا پیدا کنید. برای مثال در خطای زیر نوع نامعتبر Integer است.
"faultstring": "JSONToXML[class java.lang.Integer]: Invalid source type class java.lang.Integer. Valid source types are [message, string]."
همه خطمشیهای JSON به XML را در پروکسی API خاصی که در آن شکست رخ داده است، بررسی کنید. در خط مشی JSON به XML ناموفق، نام متغیر مشخص شده در
<Source>
را یادداشت کنید.در اینجا یک خط مشی نمونه است که متغیری به نام EmployeeID در عنصر
<Source>
مشخص شده است:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<JSONToXML async="false" continueOnError="false" enabled="true" name="JSONToXML">
<DisplayName>Check_SourceType</DisplayName>
<Properties/>
<Options>
<NullValue>NULL</NullValue>
<NamespaceBlockName>#namespaces</NamespaceBlockName>
<DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName>
<NamespaceSeparator>:</NamespaceSeparator>
<TextNodeName>#text</TextNodeName>
<AttributeBlockName>#attrs</AttributeBlockName>
<AttributePrefix>@</AttributePrefix>
<InvalidCharsReplacement>_</InvalidCharsReplacement>
<ObjectRootElementName>Root</ObjectRootElementName>
<ArrayRootElementName>Array</ArrayRootElementName>
<ArrayItemElementName>Item</ArrayItemElementName>
</Options>
<OutputVariable>request</OutputVariable>
<Source>EmployeeID</Source>
</JSONToXML>
نوع متغیر مشخص شده در عنصر
<Source>
را تعیین کنید:- کد را در پروکسی API که در آن ابتدا این متغیر تعریف شده است، قرار دهید.
- هنگامی که سیاستی را که ابتدا متغیر در آن تعریف و پر شده است، مشخص کردید، باید نوع آن متغیر را به صورت زیر تعیین کنید:
- مقدار ویژگی type (در صورت وجود) را بررسی کنید.
- اگر ویژگی type وجود نداشته باشد، متغیر به عنوان یک رشته در نظر گرفته می شود.
- اگر نوع متغیر مشخص شده در
<Source>
نه پیامی باشد و نه نوع رشته ای، پس علت خطا همین است. در مرجع Variables می توانید با متغیرهای رایج و انواع آنها آشنا شوید.
به عنوان مثال، اجازه دهید در نظر بگیریم که خط مشی ExtractVariables برای استخراج مقدار از یک بار JSON استفاده می شود و مقدار را بر روی متغیر
EmployeeID
از نوع عدد صحیح مطابق شکل زیر تنظیم می کند:<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <ExtractVariables name="ExtractJSONVariables"> <Source>request</Source> <JSONPayload> <Variable name="EmployeeID" type="integer"> <JSONPath>$.ID</JSONPath> </Variable> </JSONPayload> </ExtractVariables>
اکنون، به یاد بیاورید که متغیر
EmployeeID
در عنصر<Source>
خط مشی JSONToXML استفاده می شود:<Source>EmployeeID</Source>
از آنجایی که نوع این متغیر
Integer
است که یک نوع<Source>
معتبر نیست، پروکسی API با خطای زیر خراب می شود:steps.json2xml.InvalidSourceType
قطعنامه
اطمینان حاصل کنید که نوع متغیر مورد استفاده برای تعیین عنصر <Source>
معتبر است. انواع معتبر <Source>
message
و string
هستند.
برای جلوگیری از خطای بالا با خط مشی JSONToXML، می توانید از متغیر درخواست که از نوع پیام یا هر رشته دیگری که یک بار JSON معتبر است استفاده کنید.