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

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

উৎস অনুপলব্ধ

ত্রুটি কোড

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

কারণ

JSON to XML পলিসির <Source> এলিমেন্টে নির্দিষ্ট করা message ভেরিয়েবলটি যদি নিম্নলিখিতগুলির মধ্যে কোনো একটি হয়, তাহলে এই ত্রুটিটি ঘটে:

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

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

রোগ নির্ণয়

  1. যে JSON to XML পলিসিতে ত্রুটি ঘটেছে সেটি এবং যে ভেরিয়েবলটি পাওয়া যাচ্ছে না তার নাম শনাক্ত করুন। আপনি এই দুটি আইটেমই এরর রেসপন্সের faultstring এলিমেন্টে খুঁজে পাবেন। উদাহরণস্বরূপ, নিম্নলিখিত faultstring এ, পলিসির নাম হলো Convert-JSONToXML এবং ভেরিয়েবলটি হলো response :

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

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

    steps.json2xml.SourceUnavailable
    

সমাধান

নিশ্চিত করুন যে ব্যর্থ JSON থেকে XML পলিসির <Source> এলিমেন্টে সেট করা ভেরিয়েবলটি, যে ফ্লোতে পলিসিটি এক্সিকিউট হয় সেখানে সংজ্ঞায়িত এবং বিদ্যমান আছে।

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

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

ত্রুটি কোড

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 to XML পলিসিতে পাঠানো ইনপুট (JSON) অবৈধ বা ত্রুটিপূর্ণ।

কারণ: ইনপুট পেলোড অনুপস্থিত

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

উদাহরণস্বরূপ, যদি JSON থেকে XML পলিসির <Source> এলিমেন্টটিকে একটি request বা response ভ্যারিয়েবল হিসেবে সেট করা হয় এবং সেগুলিতে একটি JSON পেলোড থাকার কথা থাকে, কিন্তু পেলোডটি খালি থাকে, তাহলে ত্রুটিটি ঘটে।

রোগ নির্ণয়

  1. যে JSON to XML পলিসিতে ত্রুটি ঘটেছে, সেটি শনাক্ত করুন। আপনি এই তথ্যটি এরর রেসপন্সের faultstring এলিমেন্টে খুঁজে পাবেন। উদাহরণস্বরূপ, নিম্নলিখিত faultstring এ, পলিসির নাম হলো Convert-JSONToXML :

    "faultstring": "JSONToXML[Convert-JSONToXML]: Execution failed due to reason: Expecting { or [ at line 1"
    
  2. ব্যর্থ হওয়া JSON to XML পলিসি XML-এর <Source> এলিমেন্টটি পরীক্ষা করুন এবং নির্দিষ্ট ভেরিয়েবলটি নির্ধারণ করুন। উদাহরণস্বরূপ, নিম্নলিখিত JSON to 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> এলিমেন্টটি response-এ সেট করা থাকে, কিন্তু ব্যাকএন্ড সার্ভার থেকে একটি খালি পেলোড পাঠানো হয়।

সমাধান

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

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

  1. city.json নামে একটি ফাইল তৈরি করুন এবং তাতে নিম্নলিখিত বিষয়বস্তু অন্তর্ভুক্ত করুন:

    {
      "Name":"Apigee",
      "City":"Bengaluru",
      "Pincode":"560016"
    }
    
  2. নিম্নলিখিতভাবে একটি cURL কমান্ড ব্যবহার করে API কলটি করুন:

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

কারণ: অবৈধ বা ত্রুটিপূর্ণ ইনপুট

যদি JSON থেকে XML পলিসিটি অবৈধ বা ত্রুটিপূর্ণ ইনপুট পার্স করে, তাহলে আপনি এই ত্রুটিটি পাবেন।

উদাহরণস্বরূপ, যদি JSON to XML পলিসিতে ইনপুট হিসেবে নিম্নলিখিত অবৈধ JSON প্রদান করা হয়,

[
    "args": ["name" : "Google" ]
]

আপনি এই ত্রুটিটি পাবেন:

"faultstring": "JSONToXML[Convert-JSONToXML]: Execution failed due to reason: Expecting { or [ at line 1"

রোগ নির্ণয়

  1. যে JSON to XML পলিসিতে ত্রুটি ঘটেছে, সেটি শনাক্ত করুন। আপনি এই তথ্যটি এরর রেসপন্সের faultstring এলিমেন্টে খুঁজে পাবেন। উদাহরণস্বরূপ, নিম্নলিখিত faultstring এ, পলিসির নাম হলো Convert-JSONToXML :

    "faultstring": "JSONToXML[Convert-JSONToXML]: Execution failed due to reason: Expecting { or [ at line 1"
    
  2. ব্যর্থ হওয়া JSON to XML পলিসি XML-এ নির্দিষ্ট করা <Source> এলিমেন্টটি পরীক্ষা করুন। উদাহরণস্বরূপ, নিম্নলিখিত JSON to XML পলিসিতে <Source> এলিমেন্টটি request variable-এ সেট করা আছে:

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

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

    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> এলিমেন্টটিকে response হিসেবে সেট করা হয় কিন্তু JSON রেসপন্স পেলোডটি অবৈধ বা ত্রুটিপূর্ণ হয়।

সমাধান

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

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

{
  "args"  : {

        "name"  :  "Google"
   }
}

আউটপুট ভেরিয়েবল উপলব্ধ নয়

ত্রুটি কোড

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

কারণ

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

রোগ নির্ণয়

  1. যে JSON to 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. এপিআই প্রক্সির মধ্যে সেই কোডটি খুঁজুন যেখানে ভেরিয়েবলটি প্রথম সংজ্ঞায়িত করা হয়েছিল।
    2. প্রথমে যে পলিসিতে ভেরিয়েবলটি সংজ্ঞায়িত এবং পূরণ করা হয়েছে তা বের করার পর, আপনাকে নিম্নলিখিতভাবে সেই ভেরিয়েবলের ধরণ নির্ধারণ করতে হবে:
      1. type অ্যাট্রিবিউটের মান যাচাই করুন (যদি থাকে)।
      2. যদি type অ্যাট্রিবিউটটি উপস্থিত না থাকে, তাহলে ভেরিয়েবলটিকে স্ট্রিং হিসেবে গণ্য করা হয়।
    3. যদি ভেরিয়েবলের টাইপ স্ট্রিং হয়, তাহলে সেটাই ত্রুটির কারণ। আপনি ভেরিয়েবল রেফারেন্স থেকে সাধারণ ভেরিয়েবল এবং তাদের টাইপ সম্পর্কে জানতে পারবেন।

    উদাহরণস্বরূপ, উপরের JSON থেকে XML পলিসিতে PostalCode ভেরিয়েবলটি দেখুন।

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

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

    <Source>PostalCode</Source>
    

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

    steps.json2xml.OutputVariableIsNotAvailable
    

সমাধান

নিশ্চিত করুন যে, যদি JSONToXML পলিসির <Source> এলিমেন্টে নির্দিষ্ট করা ভেরিয়েবলটি স্ট্রিং টাইপের হয়, তাহলে পলিসিটির মধ্যে <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>

অসামঞ্জস্যপূর্ণ প্রকার

ত্রুটি কোড

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 to 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. এপিআই প্রক্সির মধ্যে সেই কোডটি খুঁজুন যেখানে এই ভেরিয়েবলগুলোর প্রত্যেকটি প্রথমে সংজ্ঞায়িত করা হয়েছিল।
    2. প্রথমে যে পলিসিতে ভেরিয়েবলটি সংজ্ঞায়িত এবং পূরণ করা হয়েছে তা বের করার পর, আপনাকে নিম্নলিখিতভাবে সেই ভেরিয়েবলের ধরণ নির্ধারণ করতে হবে:
      1. type অ্যাট্রিবিউটের মান যাচাই করুন (যদি থাকে)।
      2. যদি type অ্যাট্রিবিউটটি উপস্থিত না থাকে, তাহলে ভেরিয়েবলটিকে স্ট্রিং হিসেবে গণ্য করা হয়।
    3. যদি <Source> এ নির্দিষ্ট করা ভেরিয়েবলের টাইপ স্ট্রিং হয় কিন্তু <OutputVariable> এর টাইপ মেসেজ হয়, অথবা এর বিপরীত হয়, তাহলে সেটাই ত্রুটির কারণ। আপনি ভেরিয়েবল রেফারেন্স থেকে সাধারণ ভেরিয়েবল এবং তাদের টাইপ সম্পর্কে জানতে পারবেন।

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

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

    <Source>PostalCode</Source>
    

    একইভাবে, মনে রাখবেন যে response ভেরিয়েবলটি JSONToXML পলিসির <OutputVariable> এলিমেন্টে ব্যবহৃত হয়:

    <OutputVariable>response</OutputVariable>
    

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

    steps.json2xml.InCompatibleTypes
    

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

সমাধান

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

উপরে আলোচিত JSON to XML পলিসিটি সংশোধন করার জন্য, আপনি Assign Message পলিসি ব্যবহার করে PostalCode_output নামে স্ট্রিং টাইপের আরেকটি ভেরিয়েবল ডিক্লেয়ার করতে পারেন এবং JSON to XML পলিসির <OutputVariable> এলিমেন্টে এই ভেরিয়েবলটি ব্যবহার করতে পারেন।

সংশোধিত বার্তা নির্ধারণ নীতি:

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

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

ত্রুটি কোড

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 পলিসিতে ব্যবহৃত অবৈধ সোর্স টাইপটি শনাক্ত করুন। আপনি এই তথ্যটি এরর মেসেজে খুঁজে পেতে পারেন। উদাহরণস্বরূপ, নিম্নলিখিত এররটিতে, অবৈধ টাইপটি হলো Integer।

    "faultstring": "JSONToXML[class java.lang.Integer]: Invalid source type class java.lang.Integer. Valid source types are [message, string]."
    
  2. যে নির্দিষ্ট এপিআই প্রক্সিতে ব্যর্থতা ঘটেছে, সেখানকার সমস্ত JSON to XML পলিসি পরীক্ষা করুন। ব্যর্থ হওয়া JSON to XML পলিসিতে, <Source> এ উল্লেখিত ভেরিয়েবলের নামটি লিখে রাখুন।

    এখানে একটি নমুনা পলিসি দেওয়া হল যেখানে <Source> এলিমেন্টে EmployeeID নামের ভেরিয়েবলটি নির্দিষ্ট করা আছে:

<?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. এপিআই প্রক্সির মধ্যে সেই কোডটি খুঁজুন যেখানে এই ভেরিয়েবলটি প্রথম সংজ্ঞায়িত করা হয়েছিল।
    2. প্রথমে যে পলিসিতে ভেরিয়েবলটি সংজ্ঞায়িত এবং পূরণ করা হয়েছে তা বের করার পর, আপনাকে নিম্নলিখিতভাবে সেই ভেরিয়েবলের ধরণ নির্ধারণ করতে হবে:
      1. type অ্যাট্রিবিউটের মান যাচাই করুন (যদি থাকে)।
      2. যদি type অ্যাট্রিবিউটটি উপস্থিত না থাকে, তাহলে ভেরিয়েবলটিকে স্ট্রিং হিসেবে গণ্য করা হয়।
    3. <Source> এ নির্দিষ্ট করা ভেরিয়েবলের টাইপ যদি message বা string টাইপের না হয়, তাহলে সেটাই ত্রুটির কারণ। আপনি Variables reference থেকে সাধারণ ভেরিয়েবল এবং তাদের টাইপ সম্পর্কে জানতে পারবেন।

    উদাহরণস্বরূপ, ধরা যাক একটি JSON পেলোড থেকে মান বের করার জন্য ExtractVariables পলিসি ব্যবহার করা হয়েছে এবং নিচে দেখানো অনুযায়ী সেই মানটি 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 ভেরিয়েবলটি JSONToXML পলিসির <Source> এলিমেন্টে ব্যবহৃত হয়:

    <Source>EmployeeID</Source>
    

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

    steps.json2xml.InvalidSourceType
    

সমাধান

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

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