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

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

منبع در دسترس نیست

کد خطا

steps.xml2json.SourceUnavailable

متن پاسخ خطا

{
    "fault": {
        "faultstring": "XMLToJSON[policy_name]: Source [source_variable] is not available",
        "detail": {
            "errorcode": "steps.xmltojson.SourceUnavailable"
        }
    }
}

مثال پیام خطا

{
    "fault": {
        "faultstring": "XMLToJSON[Convert-XMLToJSON]: Source response is not available",
        "detail": {
            "errorcode": "steps.xml2json.SourceUnavailable"
        }
    }
}

علت

این خطا زمانی رخ می‌دهد که پیام یا متغیر رشته‌ای مشخص شده در عنصر <Source> از سیاست XML to JSON یکی از موارد زیر باشد:

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

برای مثال، این خطا زمانی رخ می‌دهد که قرار باشد سیاست تبدیل XML به JSON در جریان درخواست اجرا شود، اما عنصر <Source> روی متغیر response تنظیم شده باشد، که در جریان درخواست وجود ندارد.

تشخیص

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

    "faultstring": "XMLToJSON[Convert-XMLToJSON]: Source response is not available"
    
  2. در XML مربوط به سیاست XML مربوط به تبدیل ناموفق XML به JSON، بررسی کنید که نام متغیر تنظیم شده در عنصر <Source> با نام متغیر شناسایی شده در رشته خطا (مرحله 1 در بالا) مطابقت داشته باشد. برای مثال، سیاست XML به JSON زیر متغیری به نام response در عنصر <Source> مشخص می‌کند که با آنچه در faultstring است مطابقت دارد:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <XMLToJSON async="false" continueOnError="false" enabled="true" name="Convert-XMLToJSON">
        <DisplayName>Convert-XMLToJSON</DisplayName>
        <Properties/>
        <Format>google</Format>
        <OutputVariable>response</OutputVariable>
        <Source>response</Source>
    </XMLToJSON>
    
  3. تعیین می‌کند که آیا متغیر استفاده شده در عنصر <Source> در جریانی که سیاست تبدیل XML به JSON در آن اجرا می‌شود، تعریف شده و در دسترس است یا خیر.

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

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

    پس علت خطا همین است.

    به عنوان مثال، فرض کنید سیاست تبدیل XML به JSON که در بالا نشان داده شده است، قرار است در جریان درخواست اجرا شود. به یاد بیاورید که متغیر response در عنصر <Source> سیاست XML به JSON استفاده می‌شود. متغیر پاسخ فقط در جریان پاسخ در دسترس است.

    از آنجا که متغیر پاسخ در جریان درخواست وجود ندارد، کد خطا را دریافت می‌کنید:

    steps.xml2json.SourceUnavailable
    

وضوح تصویر

مطمئن شوید که متغیر تنظیم‌شده در عنصر <Source> از سیاست ناموفق تبدیل XML به JSON، تعریف شده و در جریانی که سیاست در آن اجرا می‌شود، وجود دارد.

برای اصلاح سیاست تبدیل XML به JSON مثال بالا، می‌توانید عنصر <Source> را طوری تغییر دهید که از متغیر request ، همانطور که در جریان درخواست وجود دارد، استفاده کند:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<XMLToJSON async="false" continueOnError="false" enabled="true" name="Convert-XMLToJSON">
    <DisplayName>Convert-XMLToJSON</DisplayName>
    <Properties/>
    <Format>google</Format>
    <OutputVariable>response</OutputVariable>
    <Source>request</Source>
</XMLToJSON>

اجرا ناموفق بود

کد خطا

steps.xml2json.ExecutionFailed

متن پاسخ خطا

{
    "fault": {
        "faultstring": "XMLToJSON[policy_name]: Execution failed. reason: Premature end of document while parsing at line [line_number](possibly  around char [character_number])",
        "detail": {
            "errorcode": "steps.xml2json.ExecutionFailed"
        }
    }
}

علل احتمالی

علل احتمالی این خطا عبارتند از:

علت توضیحات
ورودی ناقص محتوای ورودی (XML) خالی است.
ورودی نامعتبر یا ناقص ورودی (XML) ارسال شده به خط‌مشی XML to JSON نامعتبر یا ناقص است.

علت: فقدان بار ورودی

در سیاست تبدیل XML به JSON اگر محتوای (payload) متغیر مشخص شده در عنصر <Source> خالی باشد، این خطا رخ می‌دهد.

برای مثال، اگر عنصر <Source> در سیاست XML to JSON به عنوان یک متغیر request یا response تنظیم شده باشد و قرار باشد حاوی یک payload XML باشد، در صورت خالی بودن payload این خطا رخ می‌دهد.

تشخیص

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

    "faultstring": "XMLToJSON[Convert-XMLToJSON]: Execution failed. reason: Premature end of document while parsing at line 1(possibly  around char 0)"
    
  2. عنصر <Source> را در XML مربوط به سیاست XML مربوط به تبدیل XML به JSON که با شکست مواجه شده است، بررسی کنید و متغیر مشخص شده را تعیین کنید. برای مثال، سیاست XML به JSON زیر عنصر <Source> را روی request تنظیم کرده است:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <XMLToJSON async="false" continueOnError="false" enabled="true" name="Convert-XMLToJSON">
        <DisplayName>Convert-XMLToJSON</DisplayName>
        <Properties/>
        <Options>
            <RecognizeNumber>true</RecognizeNumber>
            <RecognizeBoolean>true</RecognizeBoolean>
            <RecognizeNull>true</RecognizeNull>
        </Options>
        <OutputVariable>request</OutputVariable>
        <Source>request</Source>
    </XMLToJSON>
    
  3. بررسی کنید که آیا متغیر مشخص شده برای عنصر <Source> در سیاست XMLToJSON خالی است یا خیر. اگر خالی باشد، دلیل خطا همین است.

    در مثال مربوط به سیاست تبدیل XML به JSON که در بالا نشان داده شده است، بار داده درخواست (یعنی بدنه درخواست) که توسط کلاینت ارسال شده بود، خالی بود.

    برای مثال:

    curl -v "http://<org>-<env>.apigee.net/v1/testxmltojson" -H "Content-Type: application/xml"
    

    از آنجا که بار داده درخواست XML خالی است، کد خطا را دریافت می‌کنید:

    steps.xml2json.ExecutionFailed
    

    این خطا همچنین می‌تواند در صورتی رخ دهد که عنصر <Source> روی response تنظیم شده باشد، اما یک payload خالی توسط سرور backend ارسال شود.

وضوح تصویر

مطمئن شوید که ورودی ارسالی به سیاست تبدیل XML به JSON از طریق عنصر <Source> یک فایل XML معتبر و غیر خالی باشد.

برای رفع مشکل مربوط به نمونه سیاست تبدیل XML به JSON، یک فایل XML معتبر ارسال کنید. برای مثال:

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

    <?xml version="1.0" encoding="UTF-8"?>
    <root>
       <City>Bengaluru</City>
       <Name>Apigee</Name>
       <Pincode>560016</Pincode>
    </root>
    
  2. فراخوانی API را با استفاده از دستور cURL به صورت زیر انجام دهید:

    curl -v "http://<org>-<env>.apigee.net/v1/testxmltojson" -H "Content-Type: application/xml" -X POST -d @company.xml
    

علت: ورودی نامعتبر یا ناقص

اگر سیاست تبدیل XML به JSON ورودی نامعتبر یا ناقص را تجزیه کند، این خطا را دریافت خواهید کرد.

برای مثال، اگر XML نامعتبر زیر به عنوان ورودی به سیاست XML to JSON ارائه شود،

<?xml version="1.0" encoding="UTF-8"?>
<root>
   <City>Bengaluru</City>
   <Name>Apigee</Name>
   <Pincode>560016</Pincode>

شما خطا را دریافت خواهید کرد:

"faultstring": "XMLToJSON[Convert-XMLToJSON]: Execution failed. reason: Premature end of document while parsing at line 6(possibly  around char 0)"

تشخیص

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

    "faultstring": "XMLToJSON[Convert-XMLToJSON]: Execution failed. reason: Premature end of document while parsing at line 6(possibly  around char 0)"
    
  2. عنصر <Source> مشخص شده در سیاست XML به JSON ناموفق را بررسی کنید. برای مثال، سیاست XML به JSON زیر عنصر <Source> را روی متغیر request تنظیم کرده است:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
        <XMLToJSON async="false" continueOnError="false" enabled="true" name="Convert-XMLToJSON">
        <DisplayName>Convert-XMLToJSON</DisplayName>
        <Properties/>
        <Options>
            <RecognizeNumber>true</RecognizeNumber>
            <RecognizeBoolean>true</RecognizeBoolean>
            <RecognizeNull>true</RecognizeNull>
        </Options>
        <OutputVariable>request</OutputVariable>
        <Source>request</Source>
    </XMLToJSON>
    
  3. اعتبارسنجی کنید که آیا ورودی مشخص شده در عنصر <Source> در سیاست XML To JSON یک XML payload معتبر است یا خیر. اگر ورودی نامعتبر یا ناقص باشد، دلیل خطا همین است.

    در مثال سیاست تبدیل XML به JSON که در بالا نشان داده شده است، XML نامعتبر زیر از طریق فایل city.xml به سیاست Extract Variables ارسال شده است:

    <?xml version="1.0" encoding="UTF-8"?>
    <root>
       <City>Bengaluru</City>
       <Name>Apigee</Name>
       <Pincode>560016</Pincode>
    

    در اینجا نمونه فراخوانی API را مشاهده می‌کنید که نحوه ارسال درخواست را نشان می‌دهد:

    curl -v "http://<org>-<env>.apigee.net/v1/testxmltpjson" -H "Content-Type: application/xml" -X POST -d @city.xml
    

    بار داده XML ارسالی به API نامعتبر است، زیرا XML تگ پایانی برای عنصر <root> ندارد. بنابراین کد خطا را دریافت می‌کنید:

    steps.xml2json.ExecutionFailed
    

    این خطا همچنین می‌تواند در صورتی رخ دهد که عنصر <Source> روی response تنظیم شده باشد اما payload پاسخ XML از سرور backend نامعتبر یا ناقص باشد.

وضوح تصویر

اطمینان حاصل کنید که ورودی ارسالی به سیاست تبدیل XML به JSON از طریق عنصر <Source> معتبر بوده و ناقص نباشد.

برای رفع مشکل مربوط به نمونه سیاست تبدیل XML به JSON که در بالا مورد بحث قرار گرفت، یک درخواست معتبر XML payload به شرح زیر ارسال کنید:

<?xml version="1.0" encoding="UTF-8"?>
<root>
   <City>Bengaluru</City>
   <Name>Apigee</Name>
   <Pincode>560016</Pincode>
</root>

متغیر خروجی در دسترس نیست

کد خطا

steps.xml2json.OutputVariableIsNotAvailable

متن پاسخ خطا

{
    "fault": {
        "faultstring": "XMLToJSON[policy_name]: Output variable is not available.",
        "detail": {
            "errorcode": "steps.xml2json.OutputVariableIsNotAvailable"
        }
    }
}

مثال پیام خطا

{
    "fault": {
        "faultstring": "XMLToJSON[Convert-XMLToJSON]: Output variable is not available.",
        "detail": {
            "errorcode": "steps.xml2json.OutputVariableIsNotAvailable"
        }
    }
}

علت

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

تشخیص

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

    "faultstring": "XMLToJSON[Convert-XMLToJSON]: Output variable is not available."
    
  2. در خط‌مشی شکست‌خورده‌ی تبدیل XML به JSON، اگر <OutputVariable> وجود ندارد، اعتبارسنجی کنید.

    در اینجا یک نمونه از سیاست تبدیل XML به JSON آورده شده است که عنصر <OutputVariable> در آن وجود ندارد.

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <XMLToJSON async="false" continueOnError="false" enabled="true" name="Convert-XMLToJSON">
        <DisplayName>Convert-XMLToJSON</DisplayName>
        <Properties/>
        <Format>google</Format>
        <Source>TrackingNumber</Source>
    </XMLToJSON>
    
    
  3. نوع متغیر مشخص شده در عنصر <Source> را تعیین می‌کند:

    1. کد را در بسته API Proxy، جایی که متغیر ابتدا تعریف شده است، پیدا کنید.
    2. پس از اینکه سیاستی را که متغیر در آن تعریف و پر می‌شود، مشخص کردید، باید نوع آن متغیر را به شرح زیر تعیین کنید:
      1. مقدار ویژگی نوع (type) را (در صورت وجود) بررسی کنید.
      2. اگر ویژگی نوع وجود نداشته باشد، متغیر به عنوان یک رشته در نظر گرفته می‌شود.
    3. اگر نوع متغیر string باشد، علت خطا همین است. می‌توانید در مرجع Variables درباره متغیرهای رایج و انواع آنها اطلاعات کسب کنید.

    برای مثال، به متغیر TrackingNumber در سیاست XML به JSON بالا نگاه کنید. این متغیر از نوع رشته است. حال، یک سیاست Assign Message را در نظر بگیرید که برای تنظیم مقدار به متغیری به نام TrackingNumber استفاده می‌شود، همانطور که در زیر نشان داده شده است:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <AssignMessage async="false" continueOnError="false" enabled="true" name="Assign_TrackingNumber">
        <DisplayName>Assign_TrackingNumber</DisplayName>
        <Properties/>
        <AssignVariable>
            <Name>TrackingNumber</Name>
            <Value><![CDATA[<Code>560075393539898</Code>]]></Value>
            <Ref/>
        </AssignVariable>
        <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
        <AssignTo createNew="false" transport="http" type="request"/>
    </AssignMessage>
    

    توجه داشته باشید که نوع متغیر تنظیم شده از طریق <AssignVariable> رشته است. بنابراین متغیر TrackingNumber از نوع رشته است.

    حال، به یاد بیاورید که متغیر TrackingNumber در عنصر <Source> از سیاست XML To JSON استفاده می‌شود:

    <Source>TrackingNumber</Source>
    

    از آنجایی که TrackingNumber از نوع رشته است و <OutputVariable> در این سیاست وجود ندارد، کد خطا را دریافت می‌کنید:

    steps.xml2json.OutputVariableIsNotAvailable
    

وضوح تصویر

مطمئن شوید که اگر متغیر مشخص شده در عنصر <Source> از XMLToJSON Policy از نوع رشته است، عنصر <OutputVariable> در این مورد اجباری است.

برای اصلاح سیاست XML To JSON که در بالا مورد بحث قرار گرفت، عنصر <OutputVariable> را مطابق شکل زیر اضافه کنید.

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<XMLToJSON async="false" continueOnError="false" enabled="true" name="Convert-XMLToJSON">
    <DisplayName>Convert-XMLToJSON</DisplayName>
    <Properties/>
    <Format>google</Format>
    <OutputVariable>response</OutputVariable>
    <Source>TrackingNumber</Source>
</XMLToJSON>

انواع ناسازگار

کد خطا

steps.xml2json.InCompatibleTypes

متن پاسخ خطا

{
    "fault": {
        "faultstring": "XMLToJSON[policy_name]: String can not be assigned to message type.",
        "detail": {
            "errorcode": "steps.xml2json.InCompatibleTypes"
        }
    }
}

مثال پیام خطا

{
    "fault": {
        "faultstring": "XMLToJSON[XMLToJSON_CheckType]: String can not be assigned to message type.",
        "detail": {
            "errorcode": "steps.xml2json.InCompatibleTypes"
        }
    }
}

علت

این خطا زمانی رخ می‌دهد که نوع متغیر تعریف‌شده در عنصر <Source> و عنصر <OutputVariable> یکسان نباشند. الزامی است که نوع متغیرهای موجود در عنصر <Source> و عنصر <OutputVariable> با هم مطابقت داشته باشند.

The valid types are message and string.

تشخیص

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

    "faultstring": "XMLToJSON[XMLToJSON_CheckType]: String can not be assigned to message type."
    
  2. در خط‌مشی شکست‌خورده‌ی XML To JSON، به مقادیر مشخص‌شده در <OutputVariable> توجه کنید.

    در اینجا یک نمونه از سیاست XMLToJSON که عنصر <OutputVariable> ندارد، آورده شده است.

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <XMLToJSON async="false" continueOnError="false" enabled="true" name="XMLToJSON_CheckType">
        <DisplayName>XMLToJSON_CheckType</DisplayName>
        <Properties/>
        <Format>google</Format>
        <OutputVariable>request</OutputVariable>
        <Source>TrackingNumber</Source>
    </XMLToJSON>
    
  3. نوع متغیر مشخص شده در عناصر <Source> و <OutputVariable> را تعیین می‌کند:

    1. کد را در بسته‌ی API Proxy پیدا کنید، جایی که هر یک از این متغیرها ابتدا تعریف شده‌اند.
    2. پس از اینکه سیاستی را که متغیر در آن تعریف و پر می‌شود، مشخص کردید، باید نوع آن متغیر را به شرح زیر تعیین کنید:
      1. مقدار ویژگی نوع (type) را (در صورت وجود) بررسی کنید.
      2. اگر ویژگی نوع وجود نداشته باشد، متغیر به عنوان یک رشته در نظر گرفته می‌شود.
    3. اگر نوع متغیر مشخص شده در <Source> string باشد در حالی که نوع <OutputVariable> پیام باشد یا برعکس، علت خطا همین است. می‌توانید در مرجع متغیرها درباره متغیرهای رایج و انواع آنها اطلاعات کسب کنید.

    به عنوان مثال، یک سیاست Assign Message را در نظر بگیرید که برای تنظیم مقدار به متغیری به نام TrackingNumber استفاده می‌شود، همانطور که در زیر نشان داده شده است:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <AssignMessage async="false" continueOnError="false" enabled="true" name="Assign_TrackingNumber">
        <DisplayName>Assign_TrackingNumber</DisplayName>
        <Properties/>
        <AssignVariable>
            <Name>TrackingNumber</Name>
            <Value><![CDATA[<Code>560075393539898</Code>]]></Value>
            <Ref/>
        </AssignVariable>
        <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
        <AssignTo createNew="false" transport="http" type="request"/>
    </AssignMessage>
    

    توجه داشته باشید که نوع متغیر تنظیم شده از طریق <AssignVariable> رشته است. بنابراین متغیر TrackingNumber از نوع رشته است.

    حال، به یاد بیاورید که متغیر TrackingNumber در عنصر <Source> از سیاست XMLToJSON استفاده می‌شود:

    <Source>TrackingNumber</Source>
    

    به طور مشابه، به یاد داشته باشید که متغیر request در عنصر <OutputVariable> از سیاست XML To JSON استفاده می‌شود:

    <OutputVariable>request</OutputVariable>
    

    از آنجا که TrackingNumber از نوع string است در حالی که متغیر response از نوع message است، آنها انواع ناسازگاری هستند، بنابراین کد خطا را دریافت می‌کنید:

    steps.xml2json.InCompatibleTypes
    

    خطای فوق همچنین می‌تواند در صورتی رخ دهد که متغیر موجود در عنصر <Source> از نوع message باشد اما متغیر موجود در عنصر <OutputVariable> از نوع رشته باشد.

وضوح تصویر

مطمئن شوید که نوع متغیر تعریف شده در عنصر <Source> و عنصر <OutputVariable> همیشه یکسان باشد. الزامی است که نوع متغیرهای موجود در عنصر <Source> و عنصر <OutputVariable> با هم مطابقت داشته باشند.

برای اصلاح سیاست XML To JSON که در بالا مورد بحث قرار گرفت، می‌توانید متغیر دیگری TrackingNumber_output از نوع string با استفاده از Assign Message Policy تعریف کنید و از این متغیر در عنصر <OutputVariable> از سیاست XML To JSON استفاده کنید.

سیاست تغییر یافته‌ی اختصاص پیام:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<AssignMessage async="false" continueOnError="false" enabled="true" name="Assign_TrackingNumber">
    <DisplayName>Assign_TrackingNumber</DisplayName>
    <Properties/>
    <AssignVariable>
        <Name>TrackingNumber</Name>
        <Value><![CDATA[<Code>560098</Code>]]></Value>
        <Ref/>
    </AssignVariable>
    <AssignVariable>
        <Name>TrackingNumber_output</Name>
        <Ref/>
    </AssignVariable>
    <IgnoreUnresolvedVariables>true</IgnoreUnresolvedVariables>
    <AssignTo createNew="false" transport="http" type="request"/>
</AssignMessage>

سیاست XMLToJSON اصلاح‌شده:

  <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
  <XMLToJSON async="false" continueOnError="false" enabled="true" name="XMLToJSON_CheckType">
      <DisplayName>XMLToJSON_CheckType</DisplayName>
      <Properties/>
      <Format>google</Format>
      <OutputVariable>TrackingNumber_output</OutputVariable>
      <Source>TrackingNumber</Source>
  </XMLToJSON>

نوع منبع نامعتبر

کد خطا

steps.xml2json.InvalidSourceType

متن پاسخ خطا

{
    "fault": {
        "faultstring": "XMLToJSON[class invalid_class]: Invalid source type class invalid_class. Valid source types are [message, string].",
        "detail": {
            "errorcode": "steps.xml2json.InvalidSourceType"
        }
    }
}

مثال پیام خطا

{
    "fault": {
        "faultstring": "XMLToJSON[class java.lang.Integer]: Invalid source type class java.lang.Integer. Valid source types are [message, string].",
        "detail": {
            "errorcode": "steps.xml2json.InvalidSourceType"
        }
    }
}

علت

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

تشخیص

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

    "faultstring": "XMLToJSON[class java.lang.Integer]: Invalid source type class java.lang.Integer. Valid source types are [message, string]."
    
  2. تمام سیاست‌های تبدیل XML به JSON را در API Proxy خاص که در آن خرابی رخ داده است، بررسی کنید. در سیاست XML به JSON خراب، نام متغیر مشخص شده در <Source> را یادداشت کنید.

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <XMLToJSON async="false" continueOnError="false" enabled="true" name="XMLToJSON_CheckType">
        <DisplayName>XMLToJSON_CheckType</DisplayName>
        <Properties/>
        <Format>google</Format>
        <OutputVariable>response</OutputVariable>
        <Source>BookCode</Source>
    </XMLToJSON>
    
  3. نوع متغیر مشخص شده در عنصر <Source> را تعیین می‌کند:

    1. کد را در بسته API Proxy، جایی که این متغیر ابتدا تعریف شده است، پیدا کنید.
    2. پس از اینکه سیاستی را که متغیر در آن تعریف و پر می‌شود، مشخص کردید، باید نوع آن متغیر را به شرح زیر تعیین کنید:
      1. مقدار ویژگی نوع (type) را (در صورت وجود) بررسی کنید.
      2. اگر ویژگی نوع وجود نداشته باشد، متغیر به عنوان یک رشته در نظر گرفته می‌شود.
    3. اگر نوع متغیر مشخص شده در <Source> نه از message باشد و نه از نوع string ، علت خطا همین است. می‌توانید در مرجع متغیرها (Variables) درباره متغیرهای رایج و انواع آنها اطلاعات کسب کنید.

    به عنوان مثال، یک سیاست ExtractVariables را در نظر بگیرید که برای استخراج مقدار از یک فایل XML استفاده می‌شود و مقدار متغیر BookCode را از نوع integer تنظیم می‌کند، همانطور که در زیر نشان داده شده است:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <ExtractVariables async="false" continueOnError="false" enabled="true" name="Extract_BookCode">
        <DisplayName>Extract_BookCode</DisplayName>
        <Properties/>
        <Source>request</Source>
        <XMLPayload stopPayloadProcessing="false">
            <Variable name="BookCode" type="integer">
                <XPath>/root/BookCode</XPath>
            </Variable>
        </XMLPayload>
    </ExtractVariables>
    

    حال، به یاد بیاورید که متغیر BookCode در عنصر <Source> از سیاست XML To JSON استفاده می‌شود:

    <Source>BookCode</Source>
    

    از آنجا که نوع این متغیر Integer است که یک نوع معتبر <Source> نیست، API Proxy با خطای زیر مواجه می‌شود:

    steps.xml2json.InvalidSourceType
    

وضوح تصویر

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

برای جلوگیری از خطای فوق در رابطه با سیاست XML To JSON، می‌توانید از متغیر request که از نوع message است یا هر رشته دیگری که یک بار داده XML معتبر است، استفاده کنید.