XML থেকে JSON নীতি রানটাইম ত্রুটি সমস্যা সমাধান

আপনি Apigee Edge-এর ডকুমেন্টেশন দেখছেন।
Apigee X ডকুমেন্টেশন
.info- তে যান।

উৎস অনুপলব্ধ

ত্রুটি কোড

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 to 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 to JSON পলিসিটি রিকোয়েস্ট ফ্লো-তে এক্সিকিউট হওয়ার কথা। মনে রাখবেন যে, response ভ্যারিয়েবলটি XML to JSON পলিসির <Source> এলিমেন্টে ব্যবহৃত হয়। রেসপন্স ভ্যারিয়েবলটি শুধুমাত্র রেসপন্স ফ্লো-তেই উপলব্ধ থাকে।

    যেহেতু রিকোয়েস্ট ফ্লোতে রেসপন্স ভ্যারিয়েবলটি বিদ্যমান নেই, তাই আপনি এই এরর কোডটি পাচ্ছেন:

    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>

এক্সিকিউশন ব্যর্থ হয়েছে

ত্রুটি কোড

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

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

    উদাহরণস্বরূপ:

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

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

    steps.xml2json.ExecutionFailed
    

    এই ত্রুটিটি তখনো ঘটতে পারে যখন <Source> এলিমেন্টটি response-এ সেট করা থাকে, কিন্তু ব্যাকএন্ড সার্ভার থেকে একটি খালি পেলোড পাঠানো হয়।

সমাধান

নিশ্চিত করুন যে <Source> এলিমেন্টের মাধ্যমে XML to 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 to 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 to JSON পলিসি XML-এ নির্দিষ্ট করা <Source> এলিমেন্টটি পরীক্ষা করুন। উদাহরণস্বরূপ, নিম্নলিখিত XML to 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 To JSON পলিসির <Source> এলিমেন্টে নির্দিষ্ট করা ইনপুটটি একটি বৈধ XML পেলোড কিনা তা যাচাই করুন। যদি ইনপুটটি অবৈধ বা ত্রুটিপূর্ণ হয়, তবে সেটিই ত্রুটির কারণ।

    উপরে দেখানো উদাহরণ XML to JSON পলিসিতে, city.xml ফাইলের মাধ্যমে Extract Variables পলিসিতে নিম্নলিখিত অবৈধ XML পাঠানো হয়েছিল:

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

    অনুরোধটি কীভাবে পাঠানো হয়েছিল, তা দেখানোর জন্য এখানে একটি নমুনা এপিআই কল দেওয়া হলো:

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

    এপিআই-তে পাঠানো এক্সএমএল পেলোডটি অবৈধ, কারণ এক্সএমএল-টিতে <root> এলিমেন্টের জন্য কোনো শেষ ট্যাগ নেই। তাই আপনি এই এরর কোডটি পাচ্ছেন:

    steps.xml2json.ExecutionFailed
    

    এই ত্রুটিটি তখনো ঘটতে পারে যখন <Source> এলিমেন্টটিকে response হিসেবে সেট করা হয়, কিন্তু ব্যাকএন্ড সার্ভার থেকে আসা XML রেসপন্স পেলোডটি অবৈধ বা ত্রুটিপূর্ণ হয়।

সমাধান

নিশ্চিত করুন যে <Source> এলিমেন্টের মাধ্যমে XML to JSON পলিসিতে পাঠানো ইনপুটটি বৈধ এবং ত্রুটিমুক্ত।

উপরে আলোচিত নমুনা XML থেকে JSON পলিসির সমস্যাটি সমাধান করতে, নিম্নরূপে একটি বৈধ XML পেলোড অনুরোধ প্রেরণ করুন:

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

কারণ

XML to JSON পলিসির <Source> এলিমেন্টে নির্দিষ্ট করা ভেরিয়েবলটি যদি স্ট্রিং টাইপের হয় এবং <OutputVariable> এলিমেন্টটি সংজ্ঞায়িত না থাকে, তাহলে এই ত্রুটিটি ঘটে। <Source> এলিমেন্টে সংজ্ঞায়িত ভেরিয়েবলটি string টাইপের হলে <OutputVariable> এলিমেন্টটি থাকা বাধ্যতামূলক।

রোগ নির্ণয়

  1. যে XML to 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. যদি type অ্যাট্রিবিউটটি উপস্থিত না থাকে, তাহলে ভেরিয়েবলটিকে স্ট্রিং হিসেবে গণ্য করা হয়।
    3. যদি ভেরিয়েবলের টাইপ string হয়, তাহলে সেটাই ত্রুটির কারণ। আপনি ভেরিয়েবল রেফারেন্স থেকে সাধারণ ভেরিয়েবল এবং তাদের টাইপ সম্পর্কে জানতে পারবেন।

    উদাহরণস্বরূপ, উপরের XML to JSON পলিসিতে TrackingNumber ভেরিয়েবলটি দেখুন। এটি স্ট্রিং টাইপের। এখন, একটি 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 ভেরিয়েবলটি XML To JSON পলিসির <Source> এলিমেন্টে ব্যবহৃত হয়:

    <Source>TrackingNumber</Source>
    

    যেহেতু TrackingNumber স্ট্রিং টাইপের এবং পলিসিতে <OutputVariable> অনুপস্থিত, তাই আপনি এই এরর কোডটি পাচ্ছেন:

    steps.xml2json.OutputVariableIsNotAvailable
    

সমাধান

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

    উদাহরণস্বরূপ, নিচে দেখানো অনুযায়ী TrackingNumber নামক একটি ভেরিয়েবলে মান সেট করার জন্য ব্যবহৃত একটি Assign Message পলিসির কথা বিবেচনা করুন:

    <?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 To JSON পলিসির <OutputVariable> এলিমেন্টে request ভেরিয়েবলটি ব্যবহৃত হয়:

    <OutputVariable>request</OutputVariable>
    

    যেহেতু TrackingNumber এর টাইপ হলো string এবং response ভেরিয়েবলটির টাইপ হলো message , তাই এদের টাইপ সামঞ্জস্যপূর্ণ নয়, ফলে আপনি এই এরর কোডটি পাচ্ছেন:

    steps.xml2json.InCompatibleTypes
    

    উপরোক্ত ত্রুটিটি তখনো ঘটতে পারে, যখন <Source> এলিমেন্টের ভেরিয়েবলটির টাইপ message হয় কিন্তু <OutputVariable> এলিমেন্টের ভেরিয়েবলটির টাইপ string হয়।

সমাধান

<Source> এলিমেন্ট এবং <OutputVariable> এলিমেন্টে সংজ্ঞায়িত ভেরিয়েবলের টাইপ যেন সর্বদা একই থাকে, তা নিশ্চিত করুন। <Source> এলিমেন্ট এবং <OutputVariable> এলিমেন্টের অন্তর্ভুক্ত ভেরিয়েবলগুলোর টাইপ একই হওয়া বাধ্যতামূলক।

উপরে আলোচিত XML To JSON পলিসিটি সংশোধন করার জন্য, আপনি Assign Message পলিসি ব্যবহার করে TrackingNumber_output নামে string টাইপের আরেকটি ভেরিয়েবল ডিক্লেয়ার করতে পারেন এবং এই ভেরিয়েবলটি XML To 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>

অবৈধ উৎস প্রকার

ত্রুটি কোড

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. যে নির্দিষ্ট এপিআই প্রক্সিতে ব্যর্থতাটি ঘটেছে, সেখানকার সমস্ত এক্সএমএল টু জেএসওএন পলিসি পরীক্ষা করুন। ব্যর্থ হওয়া এক্সএমএল টু জেএসওএন পলিসিতে, <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. যদি type অ্যাট্রিবিউটটি উপস্থিত না থাকে, তাহলে ভেরিয়েবলটিকে স্ট্রিং হিসেবে গণ্য করা হয়।
    3. <Source> এ নির্দিষ্ট করা ভেরিয়েবলের টাইপ যদি message বা string টাইপের না হয়, তাহলে সেটাই ত্রুটির কারণ। আপনি Variables reference থেকে সাধারণ ভেরিয়েবল এবং তাদের টাইপ সম্পর্কে জানতে পারবেন।

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

    <Source>BookCode</Source>
    

    যেহেতু এই ভেরিয়েবলের টাইপ Integer , যা একটি বৈধ <Source> টাইপ নয়, তাই API Proxy এই ত্রুটি সহ ব্যর্থ হয়:

    steps.xml2json.InvalidSourceType
    

সমাধান

<Source> এলিমেন্টটি নির্দিষ্ট করতে ব্যবহৃত ভেরিয়েবলের টাইপটি বৈধ কিনা তা নিশ্চিত করুন। বৈধ <Source> টাইপগুলো হলো message এবং string

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