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"
        }
    }
}

কারণ

XML থেকে JSON নীতিতে নির্দিষ্ট করা <Source> এলিমেন্টের মেসেজ বা স্ট্রিং ভেরিয়েবল যদি:

  • স্কোপের বাইরে (যে নির্দিষ্ট ফ্লোতে নীতি প্রয়োগ করা হচ্ছে সেখানে উপলভ্য নয়) অথবা
  • সমাধান করা যাচ্ছে না (সংজ্ঞায়িত করা হয়নি)

যেমন, XML থেকে JSON নীতি যদি অনুরোধ ফ্লোতে এক্সিকিউট করার কথা থাকে, কিন্তু <Source> এলিমেন্টটি response ভেরিয়েবলে সেট করা থাকে, যা অনুরোধ ফ্লোতে নেই, তাহলে এই সমস্যাটি হয়।

ডায়াগনসিস

  1. XML থেকে JSON নীতি শনাক্ত করুন যেখানে সমস্যা হয়েছে এবং সেই ভেরিয়েবলের নাম যা উপলভ্য নেই। আপনি সমস্যার উত্তরের faultstring এলিমেন্টে এই দুটি আইটেমই খুঁজে পাবেন। যেমন, নিম্নলিখিত faultstring-এ, নীতির নাম হল Convert-XMLToJSON এবং ভেরিয়েবল হল response:

    "faultstring": "XMLToJSON[Convert-XMLToJSON]: Source response is not available"
    
  2. XML থেকে JSON নীতি XML কাজ না করলে, <Source> এলিমেন্টে সেট করা ভেরিয়েবলের নাম ফল্ট স্ট্রিংয়ে (উপরে #১ ধাপ) শনাক্ত করা ভেরিয়েবলের নামের সাথে মিলছে কিনা তা যাচাই করুন। যেমন, XML থেকে JSON নীতিতে <Source> এলিমেন্টে response নামের একটি ভেরিয়েবল নির্দিষ্ট করা হয়েছে, যা 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 নীতিটি অনুরোধ ফ্লোতে এক্সিকিউট করার কথা। মনে রাখবেন, XML থেকে JSON নীতিতে <Source> এলিমেন্টে response ভেরিয়েবল ব্যবহার করা হয়। উত্তর ভেরিয়েবল শুধুমাত্র উত্তর ফ্লোতে উপলভ্য।

    অনুরোধের ফ্লোতে রেসপন্স ভেরিয়েবল না থাকার কারণে, আপনি এই এরর কোডটি পাবেন:

    steps.xml2json.SourceUnavailable
    

রেজোলিউশন

XML থেকে JSON নীতিতে ব্যর্থ হওয়া <Source> এলিমেন্টে সেট করা ভেরিয়েবলটি যেন সেই ফ্লোতে সংজ্ঞায়িত ও বিদ্যমান থাকে যেখানে নীতিটি এক্সিকিউট হয়।

উপরে দেখানো 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 থেকে JSON নীতিতে পাস করা ইনপুট (XML) ভুল বা ত্রুটিপূর্ণ।

কারণ: ইনপুট পেলোড নেই

XML থেকে JSON নীতিতে, <Source> এলিমেন্টে নির্দিষ্ট করা ভেরিয়েবলের কন্টেন্ট (পেলোড) খালি থাকলে, এই সমস্যাটি হয়।

যেমন, XML থেকে JSON নীতিতে <Source> এলিমেন্টকে 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. XML থেকে JSON নীতি XML-এ কাজ না করা <Source> এলিমেন্ট পরীক্ষা করুন এবং নির্দিষ্ট ভেরিয়েবল নির্ধারণ করুন। যেমন, নিম্নলিখিত 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. XMLToJSON নীতিতে <Source> এলিমেন্টের জন্য নির্দিষ্ট করা ভেরিয়েবল খালি আছে কিনা তা চেক করুন। এটি ফাঁকা থাকলে, সেটিই হল সমস্যার কারণ।

    উপরে দেখানো XML থেকে JSON নীতি সংক্রান্ত উদাহরণে, ক্লায়েন্টের পাঠানো অনুরোধের পেলোড (অর্থাৎ, অনুরোধের বডি) খালি ছিল।

    যেমন:

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

    XML অনুরোধের পেলোড খালি থাকার কারণে, আপনি এই সমস্যার কোডটি পাবেন:

    steps.xml2json.ExecutionFailed
    

    <Source> এলিমেন্টকে উত্তর হিসেবে সেট করা হলে এবং ব্যাকএন্ড সার্ভার খালি পেলোড পাস করলে, এই সমস্যা হতে পারে।

রেজোলিউশন

<Source> এলিমেন্টের মাধ্যমে XML থেকে JSON নীতিতে পাস করা ইনপুটটি যেন একটি সঠিক 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. নিম্নলিখিত cURL কমান্ড ব্যবহার করে API কল করুন:

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

কারণ: ভুল বা ত্রুটিপূর্ণ ইনপুট

XML থেকে JSON নীতি যদি ভুল বা ভুল ফর্ম্যাট করা ইনপুট পার্স করে, তাহলে আপনি এই সমস্যাটি পাবেন।

যেমন, XML থেকে JSON নীতিতে ইনপুট হিসেবে নিম্নলিখিত ভুল XML প্রদান করা হলে,

<?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. XML থেকে JSON নীতি XML-এ উল্লেখ করা <Source> এলিমেন্ট পরীক্ষা করুন। যেমন, নিম্নলিখিত 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. XML থেকে JSON নীতিতে <Source> এলিমেন্টে নির্দিষ্ট করা ইনপুটটি সঠিক XML পেলোড কিনা তা যাচাই করুন। ইনপুট ভুল বা ভুল ফর্ম্যাটে থাকলে, সেটিই সমস্যার কারণ।

    উপরে দেখানো 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
    

    API-তে পাস করা XML পেলোড অবৈধ, কারণ 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"
        }
    }
}

কারণ

XML থেকে JSON নীতিতে নির্দিষ্ট করা ভেরিয়েবলটি যদি <Source> এলিমেন্টের স্ট্রিং টাইপের হয় এবং <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 হলে, এটিই হল সমস্যার কারণ। আপনি ভেরিয়েবেল রেফারেন্স থেকে সাধারণ ভেরিয়েবেল ও সেগুলির ধরন সম্পর্কে জানতে পারবেন।

    যেমন, উপরে XML থেকে JSON নীতিতে TrackingNumber ভেরিয়েবলটি দেখুন। এটি স্ট্রিং টাইপের। এখন, একটি অ্যাসাইন মেসেজ নীতি বিবেচনা করুন যা নিচে দেখানো 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 হল স্ট্রিং ধরনের।

    এখন, মনে রাখবেন যে XML থেকে JSON নীতিতে <Source> এলিমেন্টে TrackingNumber ভেরিয়েবল ব্যবহার করা হয়:

    <Source>TrackingNumber</Source>
    

    যেহেতু TrackingNumber হল স্ট্রিং টাইপের এবং <OutputVariable> নীতিতে উল্লেখ করা নেই, তাই আপনি এই সমস্যার কোড পাবেন:

    steps.xml2json.OutputVariableIsNotAvailable
    

রেজোলিউশন

XMLToJSON নীতির <Source> এলিমেন্টে নির্দিষ্ট করা ভেরিয়েবলটি যদি স্ট্রিং টাইপের হয়, তাহলে এই ক্ষেত্রে <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>-এর ধরন মেসেজ হলে অথবা এর বিপরীত হলে, এটিই হল সমস্যার কারণ। আপনি ভেরিয়েবেল রেফারেন্স থেকে সাধারণ ভেরিয়েবেল ও সেগুলির ধরন সম্পর্কে জানতে পারবেন।

    উদাহরণস্বরূপ, একটি 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 ভেরিয়েবলটি XMLToJSON নীতির <Source> এলিমেন্টে ব্যবহার করা হয়:

    <Source>TrackingNumber</Source>
    

    একইভাবে, মনে রাখবেন যে XML থেকে JSON নীতিতে <OutputVariable> এলিমেন্টের মধ্যে request ভেরিয়েবল ব্যবহার করা হয়:

    <OutputVariable>request</OutputVariable>
    

    TrackingNumber হল string ধরনের এবং response ভেরিয়েবল হল message ধরনের, তাই এগুলি মানানসই ধরন নয় এবং আপনি এই এরর কোডটি পাবেন:

    steps.xml2json.InCompatibleTypes
    

    <Source> এলিমেন্টের ভেরিয়েবল message ধরনের হলেও <OutputVariable> এলিমেন্টের ভেরিয়েবল স্ট্রিং ধরনের হলে উপরে উল্লেখ করা সমস্যাটি হতে পারে।

রেজোলিউশন

<Source> এলিমেন্ট ও <OutputVariable> এলিমেন্টে ভেরিয়েবলের ধরন সবসময় একই হতে হবে। <Source> এলিমেন্ট ও <OutputVariable> এলিমেন্টের মধ্যে থাকা ভেরিয়েবলের ধরন একই হতে হবে।

উপরে আলোচনা করা XML থেকে JSON নীতি সংশোধন করতে, আপনি Assign Message নীতি ব্যবহার করে string ধরনের আরেকটি ভেরিয়েবল TrackingNumber_output ঘোষণা করতে পারেন এবং XML থেকে JSON নীতির <OutputVariable> এলিমেন্টে এই ভেরিয়েবল ব্যবহার করতে পারেন।

অ্যাসাইন মেসেজ নীতিতে পরিবর্তন করা হয়েছে:

<?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. যেখানে সমস্যা হয়েছে সেই নির্দিষ্ট API প্রক্সিতে XML থেকে JSON সংক্রান্ত সব নীতি পরীক্ষা করুন। 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 কোনওটিই না হলে, এটিই হল সমস্যার কারণ। আপনি ভেরিয়েবেল রেফারেন্স থেকে সাধারণ ভেরিয়েবেল ও সেগুলির ধরন সম্পর্কে জানতে পারবেন।

    যেমন, XML পেলোড থেকে ভ্যালু এক্সট্র্যাক্ট করতে এবং নিচে দেখানো BookCode ভেরিয়েবলের ভ্যালু integer টাইপ হিসেবে সেট করতে ExtractVariables নীতি ব্যবহার করা হয়:

    <?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>
    

    এখন, মনে রাখবেন যে XML থেকে JSON নীতিতে <Source> এলিমেন্টে BookCode ভেরিয়েবল ব্যবহার করা হয়:

    <Source>BookCode</Source>
    

    কারণ এই ভেরিয়েবলের ধরন হল Integer, যা সঠিক <Source> ধরন নয়, তাই API Proxy এই সমস্যার মেসেজ সহ ব্যর্থ হয়:

    steps.xml2json.InvalidSourceType
    

রেজোলিউশন

<Source> এলিমেন্ট নির্দিষ্ট করার জন্য ব্যবহৃত ভেরিয়েবলের ধরন সঠিক কিনা তা নিশ্চিত করুন। সঠিক <Source> ধরন হল message ও string।

XML থেকে JSON নীতিতে উপরের সমস্যা এড়াতে, আপনি request ভেরিয়েবল ব্যবহার করতে পারেন, এটি message টাইপের অথবা অন্য কোনও স্ট্রিং যা একটি বৈধ XML পেলোড।