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

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

SourceUnavailable

کد خطا

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 به JSON مشخص شده است، یکی از موارد زیر باشد:

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

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

تشخیص

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

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

ExecutionFailed

کد خطا

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 به JSON» نامعتبر یا ناقص است.

علت: پیام ورودی وجود ندارد

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

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

تشخیص

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

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

وضوح

مطمئن شوید ورودی‌ای که ازطریق عنصر <Source> به خط‌مشی «زبان نشانه‌گذاری توسعه‌پذیر به JSON» ارسال می‌شود یک پایه‌بار «زبان نشانه‌گذاری توسعه‌پذیر» معتبر و غیرخالی باشد.

برای رفع مشکل خط‌مشی نمونه 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
    

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

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

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

    در خط‌مشی XML به JSON نمونه‌ای که در بالا نشان داده شده است، XML نامعتبر زیر ازطریق فایل city.xml به خط‌مشی «استخراج متغیرها» ارسال شده است:

    <?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> روی پاسخ تنظیم شده باشد اما بار پاسخ XML از سرور زیرینه نامعتبر یا دارای ساختار نادرست باشد، این خطا نیز می‌تواند رخ دهد.

وضوح

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

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

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

OutputVariableIsNotAvailable

کد خطا

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

تشخیص

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

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

    <Source>TrackingNumber</Source>
    

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

    steps.xml2json.OutputVariableIsNotAvailable
    

وضوح

مطمئن شوید که اگر متغیر مشخص‌شده در عنصر <Source> «خط‌مشی XMLToJSON» از نوع رشته است، عنصر <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>
    <OutputVariable>response</OutputVariable>
    <Source>TrackingNumber</Source>
</XMLToJSON>

InCompatibleTypes

کد خطا

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

    "faultstring": "XMLToJSON[XMLToJSON_CheckType]: String can not be assigned to message type."
    
  2. در یادداشت «خط‌مشی تبدیل XML به 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» پیدا کنید، جایی که هریک از این متغیرها ابتدا تعریف شده‌اند.
    2. پس‌از اینکه متوجه شدید متغیر در کدام خط‌مشی تعریف و ابتدا تکمیل می‌شود، باید نوع آن متغیر را به این صورت تعیین کنید:
      1. مقدار مشخصه نوع را (درصورت وجود) بررسی کنید.
      2. اگر مشخصه نوع وجود نداشته باشد، متغیر به‌عنوان رشته درنظر گرفته می‌شود.
    3. اگر نوع متغیر مشخص‌شده در <Source> string باشد درحالی‌که نوع <OutputVariable> پیام باشد یا برعکس، این دلیل خطا است. می‌توانید درباره متغیرهای رایج و انواع آن‌ها در مرجع متغیرها بیشتر بدانید.

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

    <OutputVariable>request</OutputVariable>
    

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

    steps.xml2json.InCompatibleTypes
    

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

وضوح

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

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

InvalidSourceType

کد خطا

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

    به‌عنوان مثال، خط‌مشی 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 به JSON» استفاده می‌شود:

    <Source>BookCode</Source>
    

    ازآنجایی‌که نوع این متغیر Integer است که نوع <Source> معتبری نیست، «پراکسی میانای برنامه‌سازی کاربردی» با این خطا ناموفق می‌شود:

    steps.xml2json.InvalidSourceType
    

وضوح

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

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