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

আপনি Apigee Edge ডকুমেন্টেশন দেখছেন।
Apigee X ডকুমেন্টেশন দেখুন।
তথ্য

SourceUnavailable

সমস্যার কোড

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 থেকে XML নীতিতে নির্দিষ্ট করা <Source> এলিমেন্টের message ভেরিয়েবলটি যদি:

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

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

ডায়াগনসিস

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

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

    অনুরোধের ফ্লোতে 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>

ExecutionFailed

সমস্যার কোড

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

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

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

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

ডায়াগনসিস

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

    "faultstring": "JSONToXML[Convert-JSONToXML]: Execution failed due to reason: Expecting { or [ at line 1"
    
  2. নীতি XML-এর 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>
    
  3. নীতিতে <Source> এলিমেন্টের জন্য নির্দিষ্ট করা ভেরিয়েবল খালি আছে কিনা তা চেক করুন। এটি ফাঁকা থাকলে, সেটিই হল সমস্যার কারণ।

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

    যেমন:

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

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

    steps.json2xml.ExecutionFailed
    

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

রেজোলিউশন

<Source> এলিমেন্টে JSON থেকে 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 থেকে XML নীতিতে ইনপুট হিসেবে নিম্নলিখিত ভুল JSON প্রদান করা হলে,

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

আপনি এই সমস্যাটি দেখতে পাবেন:

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

ডায়াগনসিস

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

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

    ধরে নিন যে নিচে উল্লেখ করা ভুল JSON নীতিতে পাস করা হয়েছে

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

    অনুরোধ কীভাবে পাস করা হয়েছে তা দেখানোর জন্য এখানে API কলের নমুনা দেওয়া হল:

    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> এলিমেন্টটি যদি উত্তরে সেট করা থাকে কিন্তু JSON উত্তরের পেলোড ভুল বা ভুল ফর্ম্যাটে থাকে, তাহলেও এই সমস্যা হতে পারে।

সমাধান

<Source> এলিমেন্টে JSON থেকে XML নীতিতে পাস করা ইনপুট সঠিক ও ত্রুটিপূর্ণ নয় কিনা তা নিশ্চিত করুন।

উপরে আলোচনা করা নমুনা JSON থেকে XML নীতি সংক্রান্ত সমস্যা সমাধান করতে, নিম্নলিখিত পদ্ধতিতে একটি সঠিক JSON পেলোড অনুরোধ পাস করুন:

{
  "args"  : {

        "name"  :  "Google"
   }
}

OutputVariableIsNotAvailable

সমস্যার কোড

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

ডায়াগনসিস

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

    যেমন, উপরে JSON থেকে XML নীতিতে PostalCode ভেরিয়েবলটি দেখুন।

    যেমন, ধরে নিন যে একটি Assign Message নীতি ব্যবহার করে নিচে দেখানো PostalCode নামের ভেরিয়েবলে একটি ভ্যালু অ্যাসাইন করা হয়েছে:

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

InCompatibleTypes

সমস্যার কোড

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

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

    <?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> এলিমেন্টের ভেরিয়েবল স্ট্রিং ধরনের হলে উপরে উল্লেখ করা সমস্যাটি হতে পারে।

রেজোলিউশন

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

উপরে আলোচনা করা JSON থেকে XML নীতি সংশোধন করতে, আপনি Assign Message Policy ব্যবহার করে PostalCode_output স্ট্রিং টাইপের আরেকটি ভেরিয়েবল ঘোষণা করতে পারেন এবং JSON থেকে 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>

InvalidSourceType

সমস্যার কোড

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

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