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

درحال مشاهده اسناد Apigee Edge هستید.
به اسناد Apigee X بروید.
اطلاعات

SourceUnavailable

کد خطا

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. در خط‌مشی ناموفق JSON به XML، تأیید کنید که نام متغیر تنظیم‌شده در عنصر <Source> با نام متغیر شناسایی‌شده در رشته خطا (مرحله ۱ در بالا) مطابقت داشته باشد. برای مثال، خط‌مشی 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>

ExecutionFailed

کد خطا

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 بررسی کنید و متغیر مشخص‌شده را تعیین کنید. برای مثال، خط‌مشی 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> روی پاسخ تنظیم شده باشد، اما سرور پشتیبان یک بار محتوای خالی را ارسال کند.

وضوح

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

    فرض کنید 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 معتبری را به‌صورت زیر ارسال کنید:

{
  "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» از نوع رشته باشد و عنصر <OutputVariable> تعریف نشده باشد. وقتی متغیر تعریف‌شده در عنصر <Source> از نوع رشته باشد، عنصر <OutputVariable> الزامی است.

تشخیص

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

    برای مثال، به متغیر PostalCode در خط‌مشی JSON به XML بالا نگاه کنید.

    به‌عنوان مثال، درنظر بگیرید که از خط‌مشی «تخصیص پیام» برای تخصیص مقدار به متغیری به‌نام 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 از نوع رشته است.

    اکنون به‌یاد آورید که متغیر 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>

InCompatibleTypes

کد خطا

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. مقدار مشخصه نوع را (درصورت وجود) بررسی کنید.
      2. اگر مشخصه نوع وجود نداشته باشد، متغیر به‌عنوان رشته درنظر گرفته می‌شود.
    3. اگر نوع متغیر مشخص‌شده در <Source> رشته‌ای باشد درحالی‌که نوع <OutputVariable> پیام باشد یا برعکس، این دلیل خطا است. می‌توانید درباره متغیرهای رایج و انواع آن‌ها در مرجع متغیرها بیشتر بدانید.

    به‌عنوان مثال، خط‌مشی «تخصیص پیام» را درنظر بگیرید که برای تخصیص مقدار به متغیری به‌نام 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 از نوع رشته است.

    اکنون به‌یاد آورید که متغیر 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 از نوع رشته را بااستفاده از «خط‌مشی تخصیص پیام» تعریف کنید و از این متغیر در عنصر <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 را شناسایی کنید. می‌توانید این اطلاعات را در پیام خطا پیدا کنید. برای مثال، در خطای زیر، نوع نامعتبر «عدد صحیح» است.

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

    به‌عنوان مثال، فرض کنیم از خط‌مشی 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> معتبری نیست، «پراکسی میانای برنامه‌سازی کاربردی» با این خطا ناموفق می‌شود:

    steps.json2xml.InvalidSourceType
    

وضوح

مطمئن شوید نوع متغیر استفاده‌شده برای مشخص کردن عنصر <Source> معتبر باشد. انواع معتبر <Source> عبارت‌اند از message و string.

برای جلوگیری از خطای بالا در خط‌مشی JSONToXML، می‌توانید از متغیر درخواست که از نوع پیام یا هر رشته دیگری است که پایه‌بار JSON معتبری است استفاده کنید.