عیب یابی خطای زمان اجرا خط مشی JSON به XML

شما در حال مشاهده اسناد 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 تنظیم می شود که در جریان درخواست وجود ندارد.

تشخیص

  1. خط مشی JSON به XML را که در آن خطا رخ داده است و نام متغیری که در دسترس نیست شناسایی کنید. شما می توانید هر دوی این موارد را در عنصر faultstring پاسخ خطا پیدا کنید. به عنوان مثال، در faultstring زیر، نام سیاست Convert-JSONToXML است و متغیر response است:

    "faultstring": "JSONToXML[Convert-JSONToXML]: Source response is not available"
    
  2. در خط مشی 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>
    
  3. تعیین کنید که آیا متغیر مورد استفاده در عنصر <Source> در جریانی که در آن خط مشی JSON به XML در حال اجرا است، تعریف شده و در دسترس است یا خیر.

  4. اگر متغیر یکی از این موارد باشد:

    • خارج از محدوده (در جریان خاصی که سیاست در آن اجرا می شود موجود نیست) یا
    • قابل حل نیست (تعریف نشده است)

    پس این دلیل خطا است.

    به عنوان مثال، فرض کنید سیاست 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 باشد، اما اگر بار خالی باشد، خطا رخ می‌دهد.

تشخیص

  1. خط مشی JSON به XML را در جایی که خطا رخ داده است شناسایی کنید. شما می توانید این اطلاعات را در عنصر faultstring پاسخ خطا پیدا کنید. به عنوان مثال، در faultstring زیر، نام خط مشی Convert-JSONToXML است:

    "faultstring": "JSONToXML[Convert-JSONToXML]: Execution failed due to reason: Expecting { or [ at line 1"
    
  2. عنصر <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>
    
  3. بررسی کنید که آیا متغیر مشخص شده برای عنصر <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 ارسال کنید. به عنوان مثال:

  1. یک فایل با نام city.json با محتوای زیر ایجاد کنید:

    {
      "Name":"Apigee",
      "City":"Bengaluru",
      "Pincode":"560016"
    }
    
  2. تماس 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"

تشخیص

  1. خط مشی JSON به XML را در جایی که خطا رخ داده است شناسایی کنید. شما می توانید این اطلاعات را در عنصر faultstring پاسخ خطا پیدا کنید. به عنوان مثال، در faultstring زیر، نام خط مشی Convert-JSONToXML است:

    "faultstring": "JSONToXML[Convert-JSONToXML]: Execution failed due to reason: Expecting { or [ at line 1"
    
  2. عنصر <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>
    
  3. اگر ورودی مشخص شده در عنصر <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> از نوع رشته باشد.

تشخیص

  1. خط مشی JSON به XML را که در آن خطا رخ داده است شناسایی کنید. این را می توانید در عنصر faultstring پاسخ خطا پیدا کنید. به عنوان مثال، در faultstring زیر، نام خط مشی Check-JSONToXML است:

    "faultstring": "JSONToXML[Check-JSONToXML]: Output variable is not available."
    
  2. در خط مشی 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>
    
  3. نوع متغیر مشخص شده در عنصر <Source> را تعیین کنید:

    1. کد را در API Proxy جایی که متغیر ابتدا تعریف شده است، قرار دهید.
    2. هنگامی که سیاستی را که ابتدا متغیر در آن تعریف و پر شده است، مشخص کردید، باید نوع آن متغیر را به صورت زیر تعیین کنید:
      1. مقدار ویژگی type (در صورت وجود) را بررسی کنید.
      2. اگر ویژگی type وجود نداشته باشد، متغیر به عنوان یک رشته در نظر گرفته می شود.
    3. اگر نوع متغیر رشته ای است، پس دلیل خطا همین است. در مرجع 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 هستند.

تشخیص

  1. خط مشی JSON به XML را که در آن خطا رخ داده است شناسایی کنید. این را می توانید در عنصر faultstring پاسخ خطا پیدا کنید. به عنوان مثال، در faultstring زیر، نام خط مشی JSONToXML_checktype است:

    "faultstring": "JSONToXML[JSONToXML_checktype]: String can not be assigned to message type."
    
  2. در خط مشی 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>
    
    
  3. نوع متغیر مشخص شده در عناصر <Source> و <OutputVariable> را تعیین کنید:

    1. کد را در پروکسی API که در آن ابتدا هر یک از این متغیرها تعریف شده است، قرار دهید.
    2. هنگامی که سیاستی را که ابتدا متغیر در آن تعریف و پر شده است، مشخص کردید، باید نوع آن متغیر را به صورت زیر تعیین کنید:
      1. مقدار ویژگی type (در صورت وجود) را بررسی کنید.
      2. اگر ویژگی type وجود نداشته باشد، متغیر به عنوان یک رشته در نظر گرفته می شود.
    3. اگر نوع متغیر مشخص شده در <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 هستند.

تشخیص

  1. نوع منبع نامعتبر مورد استفاده در خط مشی JSON به XML را شناسایی کنید. شما می توانید این اطلاعات را در پیام خطا پیدا کنید. برای مثال در خطای زیر نوع نامعتبر Integer است.

    "faultstring": "JSONToXML[class java.lang.Integer]: Invalid source type class java.lang.Integer. Valid source types are [message, string]."
    
  2. همه خط‌مشی‌های 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>
  1. نوع متغیر مشخص شده در عنصر <Source> را تعیین کنید:

    1. کد را در پروکسی API که در آن ابتدا این متغیر تعریف شده است، قرار دهید.
    2. هنگامی که سیاستی را که ابتدا متغیر در آن تعریف و پر شده است، مشخص کردید، باید نوع آن متغیر را به صورت زیر تعیین کنید:
      1. مقدار ویژگی type (در صورت وجود) را بررسی کنید.
      2. اگر ویژگی type وجود نداشته باشد، متغیر به عنوان یک رشته در نظر گرفته می شود.
    3. اگر نوع متغیر مشخص شده در <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 معتبر است استفاده کنید.