JSONtoXML নীতি

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

কী

এই পলিসি মেসেজগুলোকে জাভাস্ক্রিপ্ট অবজেক্ট নোটেশন (JSON) ফরম্যাট থেকে এক্সটেনসিবল মার্কআপ ল্যাঙ্গুয়েজ (XML)-এ রূপান্তর করে এবং মেসেজগুলো কীভাবে রূপান্তরিত হবে তা নিয়ন্ত্রণ করার জন্য আপনাকে বিভিন্ন বিকল্প প্রদান করে।

আপনি যদি XSL ব্যবহার করে মেসেজ রূপান্তর করতে চান, তাহলে এই পলিসিটি বিশেষভাবে উপযোগী। একটি JSON পেলোডকে XML-এ রূপান্তর করার পর, আপনার প্রয়োজনীয় রূপান্তরটি সম্পাদন করতে একটি কাস্টম স্টাইল শীট সহ XSL ট্রান্সফর্ম পলিসিটি ব্যবহার করুন।

যদি JSON-ফরম্যাটের অনুরোধকে XML-ফরম্যাটের অনুরোধে রূপান্তর করার উদ্দেশ্য থাকে, তাহলে পলিসিটি একটি রিকোয়েস্ট ফ্লো-এর (যেমন, Request / ProxyEndpoint / PostFlow) সাথে সংযুক্ত করা হবে।

নমুনা

JSON এবং XML এর মধ্যে রূপান্তর সম্পর্কে বিস্তারিত আলোচনার জন্য, "রেসপন্স অবজেক্টে JSON অ্যারে থেকে XML অ্যারে রূপান্তর সমস্যা" দেখুন।

একটি অনুরোধ রূপান্তর করা

<JSONToXML name="jsontoxml">
    <Source>request</Source>
    <OutputVariable>request</OutputVariable>
</JSONToXML>

এই কনফিগারেশনটি উৎস হিসেবে JSON-ফরম্যাটের অনুরোধ বার্তা গ্রহণ করে এবং তারপর একটি XML-ফরম্যাটের বার্তা তৈরি করে, যা request OutputVariable'-এ যুক্ত করা হয়। Edge স্বয়ংক্রিয়ভাবে এই ভেরিয়েবলের বিষয়বস্তুকে পরবর্তী প্রক্রিয়াকরণের ধাপের বার্তা হিসেবে ব্যবহার করে।


উপাদান রেফারেন্স

এই পলিসিতে আপনি নিম্নলিখিত উপাদান এবং বৈশিষ্ট্যগুলো কনফিগার করতে পারেন।

<JSONToXML async="false" continueOnError="false" enabled="true" name="JSON-to-XML-1">
    <DisplayName>JSON to XML 1</DisplayName>
    <Source>request</Source>
    <OutputVariable>request</OutputVariable>
    <Options>
        <OmitXmlDeclaration>false</OmitXmlDeclaration>
        <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName>
        <NamespaceSeparator>:</NamespaceSeparator>
        <AttributeBlockName>#attrs</AttributeBlockName>
        <AttributePrefix>@</AttributePrefix>
        <ObjectRootElementName>Root</ObjectRootElementName>
        <ArrayRootElementName>Array</ArrayRootElementName>
        <ArrayItemElementName>Item</ArrayItemElementName>
        <Indent>false</Indent>
        <TextNodeName>#text</TextNodeName>
        <NullValue>I_AM_NULL</NullValue>
        <InvalidCharsReplacement>_</InvalidCharsReplacement>
    </Options>
</JSONToXML>

<JSONToXML> অ্যাট্রিবিউট

নিম্নলিখিত সারণী সমস্ত নীতির মূল উপাদানগুলির জন্য সাধারণ বৈশিষ্ট্যগুলি বর্ণনা করে:

বৈশিষ্ট্য বর্ণনা ডিফল্ট উপস্থিতি
name

নীতির অভ্যন্তরীণ নাম। name বৈশিষ্ট্যের মানটিতে অক্ষর, সংখ্যা, স্পেস, হাইফেন, আন্ডারস্কোর এবং পিরিয়ড থাকতে পারে। এই মান 255 অক্ষরের বেশি হতে পারে না।

ঐচ্ছিকভাবে, ম্যানেজমেন্ট UI প্রক্সি এডিটরে নীতিটিকে একটি ভিন্ন, প্রাকৃতিক-ভাষা নামের সাথে লেবেল করতে <DisplayName> উপাদানটি ব্যবহার করুন।

N/A প্রয়োজন
continueOnError

একটি নীতি ব্যর্থ হলে একটি ত্রুটি ফেরত দিতে false সেট করুন৷ এটি বেশিরভাগ নীতির জন্য প্রত্যাশিত আচরণ।

একটি নীতি ব্যর্থ হওয়ার পরেও ফ্লো এক্সিকিউশন চালিয়ে যেতে true সেট করুন৷

মিথ্যা ঐচ্ছিক
enabled

নীতি প্রয়োগ করতে true সেট করুন৷

নীতি বন্ধ করতে false সেট করুন। নীতিটি প্রবাহের সাথে সংযুক্ত থাকলেও তা কার্যকর করা হবে না।

সত্য ঐচ্ছিক
async

এই বৈশিষ্ট্যটি অবমূল্যায়ন করা হয়েছে৷

মিথ্যা অবচয়

<DisplayName> উপাদান

ম্যানেজমেন্ট UI প্রক্সি এডিটরে নীতিটিকে একটি ভিন্ন, প্রাকৃতিক-ভাষা নামের সাথে লেবেল করতে name বৈশিষ্ট্য ছাড়াও ব্যবহার করুন।

<DisplayName>Policy Display Name</DisplayName>
ডিফল্ট

N/A

আপনি এই উপাদানটি বাদ দিলে, নীতির name বৈশিষ্ট্যের মান ব্যবহার করা হবে।

উপস্থিতি ঐচ্ছিক
টাইপ স্ট্রিং

<উৎস> উপাদান

রিকোয়েস্ট বা রেসপন্স ভেরিয়েবল, যেটিতে JSON মেসেজটি রয়েছে এবং যেটিকে আপনি XML-এ রূপান্তর করতে চান।

যদি <Source> সংজ্ঞায়িত না থাকে, তাহলে এটিকে একটি বার্তা হিসেবে গণ্য করা হয় (যা পলিসিটি কোনো অনুরোধ প্রবাহের (request flow) সাথে সংযুক্ত থাকলে অনুরোধে (request) অথবা পলিসিটি কোনো প্রতিক্রিয়া প্রবাহের (response flow) সাথে সংযুক্ত থাকলে প্রতিক্রিয়ায় (response) রূপান্তরিত হয়)।

যদি সোর্স ভেরিয়েবলটি রিজলভ করা না যায়, অথবা এটি কোনো নন-মেসেজ টাইপে রিজলভ হয়, তাহলে পলিসিটি একটি এরর থ্রো করে।

<Source>request</Source>
ডিফল্ট অনুরোধ বা প্রতিক্রিয়া, যা এপিআই প্রক্সি ফ্লোতে পলিসিটি কোথায় যুক্ত করা হয়েছে তার উপর নির্ভর করে নির্ধারিত হয়।
উপস্থিতি ঐচ্ছিক
প্রকার বার্তা

<আউটপুট ভেরিয়েবল> উপাদান

JSON থেকে XML ফরম্যাটে রূপান্তরের আউটপুট সংরক্ষণ করে। এটি সাধারণত উৎসের মানের সমান হয়, অর্থাৎ, সাধারণত একটি JSON অনুরোধকে একটি XML অনুরোধে রূপান্তরিত করা হয়।

JSON বার্তার পেলোড পার্স করে XML-এ রূপান্তর করা হয় এবং XML-ফরম্যাট করা বার্তাটির HTTP Content-type হেডারটি text/xml;charset=UTF-8 এ সেট করা হয়।

যদি OutputVariable নির্দিষ্ট করা না থাকে, তাহলে source OutputVariable হিসেবে গণ্য করা হয়। উদাহরণস্বরূপ, যদি source request হয়, তাহলে OutputVariable ডিফল্টভাবে request এ সেট হয়ে যায়।

<OutputVariable>request</OutputVariable>
ডিফল্ট অনুরোধ বা প্রতিক্রিয়া, যা এপিআই প্রক্সি ফ্লোতে পলিসিটি কোথায় যুক্ত করা হয়েছে তার উপর নির্ভর করে নির্ধারিত হয়।
উপস্থিতি <Source> এলিমেন্টে সংজ্ঞায়িত ভেরিয়েবলটি স্ট্রিং টাইপের হলে এই এলিমেন্টটি বাধ্যতামূলক।
প্রকার বার্তা

<বিকল্পসমূহ>/<এক্সএমএল ঘোষণা বাদ দিন>

আউটপুট থেকে XML নেমস্পেস বাদ দেওয়ার জন্য নির্দিষ্ট করে। এর ডিফল্ট মান হলো false , যার অর্থ আউটপুটে নেমস্পেসটি অন্তর্ভুক্ত থাকবে।

উদাহরণস্বরূপ, নিম্নলিখিত সেটিংটি নেমস্পেস বাদ দেওয়ার জন্য পলিসিটি কনফিগার করে:

<OmitXmlDeclaration>true</OmitXmlDeclaration>

<বিকল্পসমূহ>/<নেমস্পেসব্লকনাম>
<বিকল্পসমূহ>/<ডিফল্ট নেমস্পেস নোডের নাম>
<বিকল্প>/<নামস্থানবিভাজক> উপাদান

JSON-এ নেমস্পেসের কোনো সমর্থন নেই, অথচ XML ডকুমেন্টে প্রায়শই এর প্রয়োজন হয়। NamespaceBlockName আপনাকে একটি JSON প্রপার্টি সংজ্ঞায়িত করার সুযোগ দেয়, যা পলিসি দ্বারা উৎপাদিত XML-এ নেমস্পেস সংজ্ঞার উৎস হিসেবে কাজ করে। (এর অর্থ হলো, উৎস JSON-এ অবশ্যই এমন একটি প্রপার্টি থাকতে হবে, যা থেকে প্রাপ্ত XML ব্যবহারকারী অ্যাপ্লিকেশনের প্রত্যাশিত কোনো নেমস্পেসে ম্যাপ করা যায়।)

উদাহরণস্বরূপ, নিম্নলিখিত সেটিংস:

<NamespaceBlockName>#namespaces</NamespaceBlockName>
<DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName>
<NamespaceSeparator>:</NamespaceSeparator>

এটি নির্দেশ করে যে সোর্স JSON-এ #namespaces নামে একটি প্রপার্টি রয়েছে, যাতে ডিফল্ট হিসেবে নির্ধারিত অন্তত একটি নেমস্পেস আছে। উদাহরণস্বরূপ:

{
   "population": {
       "#namespaces": {
           "$default": "http://www.w3.org/1999/people",
           "exp": "http://www.w3.org/1999/explorers"
       },
       "person": "John Smith",
       "exp:person": "Pedro Cabral"
   }
}

রূপান্তরিত হয়:

<population xmlns="http://www.w3.org/1999/people" xmlns:exp="http://www.w3.org/1999/explorers">
  <person>John Smith</person>
  <exp:person>Pedro Cabral</exp:person>
</population>

<বিকল্পসমূহ>/<অবজেক্টরুটএলিমেন্টনাম>

JSON থেকে XML-এ রূপান্তরের সময় <ObjectRootElementName> রুট এলিমেন্টের নাম নির্দিষ্ট করে, কারণ JSON-এ কোনো নামযুক্ত রুট এলিমেন্ট থাকে না।

উদাহরণস্বরূপ, যদি JSON-টি দেখতে এইরকম হয়:

{
  "abc": "123",
  "efg": "234"
}

এবং আপনি <ObjectRootElementName> এভাবে সেট করেছেন:

<ObjectRootElementName>Root</ObjectRootElementName>

ফলস্বরূপ XML-টি নিম্নরূপ দেখায়:

<Root>
   <abc>123</abc>
   <efg>234</efg>
</Root>

<বিকল্পসমূহ>/<অ্যাট্রিবিউটব্লকনাম>
<Options>/<AttributePrefix> উপাদানসমূহ

<AttributeBlockName> আপনাকে নির্দিষ্ট করতে সক্ষম করে যে কখন JSON এলিমেন্টগুলি XML এলিমেন্টের পরিবর্তে XML অ্যাট্রিবিউটে রূপান্তরিত হবে।

উদাহরণস্বরূপ, নিম্নলিখিত সেটিংটি #attrs নামের একটি অবজেক্টের ভেতরের প্রোপার্টিগুলোকে XML অ্যাট্রিবিউটে রূপান্তর করে:

<AttributeBlockName>#attrs</AttributeBlockName>

নিম্নলিখিত JSON অবজেক্ট:

{
    "person" : {
        "#attrs" : {
            "firstName" : "John",
            "lastName" : "Smith"
        },
        "occupation" : "explorer",
    }
}

নিম্নলিখিত XML কাঠামোতে রূপান্তরিত হয়:

<person firstName="John" lastName="Smith">
  <occupation>explorer</occupation>
</person>

<AttributePrefix> নির্দিষ্ট প্রিফিক্স দিয়ে শুরু হওয়া প্রপার্টিকে XML অ্যাট্রিবিউটে রূপান্তর করে। যেখানে অ্যাট্রিবিউট প্রিফিক্স @ -এ সেট করা হয়, উদাহরণস্বরূপ:

<AttributePrefix>@</AttributePrefix>

নিম্নলিখিত JSON অবজেক্টটিকে রূপান্তর করে:

{
"person" : {
   "@firstName" : "John",
   "@lastName" : "Smith"
   "occupation" : "explorer",

 }
}

নিম্নলিখিত XML কাঠামোতে:

<person firstName="John" lastName="Smith">
  <occupation>explorer</occupation>
</person>

<বিকল্পসমূহ>/<অ্যারে রুট এলিমেন্টের নাম>
<বিকল্প>/<অ্যারেআইটেমএলিমেন্টনাম> উপাদান

একটি JSON অ্যারে-কে নির্দিষ্ট প্যারেন্ট ও চাইল্ড এলিমেন্টের নামসহ XML এলিমেন্টের একটি তালিকায় রূপান্তর করে।

উদাহরণস্বরূপ, নিম্নলিখিত সেটিংস:

<ArrayRootElementName>Array</ArrayRootElementName>
<ArrayItemElementName>Item</ArrayItemElementName>

নিম্নলিখিত JSON অ্যারেটিকে রূপান্তর করে:

[
"John Cabot",
{
 "explorer": "Pedro Cabral"
},
"John Smith"
]

নিম্নলিখিত XML কাঠামোতে:

<Array>
  <Item>John Cabot</Item>
  <Item>
    <explorer>Pedro Cabral</explorer>
  </Item>
  <Item>John Smith</Item>
</Array>

<বিকল্প>/<ইন্ডেন্ট>

XML আউটপুট ইন্ডেন্ট করা হবে কিনা তা নির্দিষ্ট করে। ডিফল্ট মান হলো false , যার অর্থ কোনো ইন্ডেন্ট করা হবে না।

উদাহরণস্বরূপ, নিম্নলিখিত সেটিংটি আউটপুটকে ইন্ডেন্ট করার জন্য পলিসিটি কনফিগার করে:

<Indent>true</Indent>

যদি JSON ইনপুটটি এই ফর্মে থাকে:

{"n": [1, 2, 3] }

তাহলে ইন্টেন্টিং ছাড়া আউটপুটটি হলো:

<Array><n>1</n><n>2</n><n>3</n></Array>

ইনডেন্টিং সক্রিয় থাকলে আউটপুটটি হলো:

  <Array>
    <n>1</n>
    <n>2</n>
    <n>3</n>
  </Array>

<বিকল্প>/<টেক্সটনোডনাম> উপাদান

একটি JSON প্রপার্টিকে নির্দিষ্ট নামের একটি XML টেক্সট নোডে রূপান্তর করে। উদাহরণস্বরূপ, নিম্নলিখিত সেটিংটি:

<TextNodeName>age</TextNodeName>

এই JSON-কে রূপান্তর করে:

{
    "person": {
        "firstName": "John",
        "lastName": "Smith",
        "age": 25
    }
}

এই XML কাঠামোতে:

<person>
  <firstName>John</firstName>25<lastName>Smith</lastName>
</person>

যদি TextNodeName নির্দিষ্ট করা না থাকে, তাহলে একটি টেক্সট নোডের জন্য ডিফল্ট সেটিং ব্যবহার করে XML তৈরি করা হয়:

<person>
  <firstName>John</firstName>
  <age>25</age>
  <lastName>Smith</lastName>
</person>

<Options>/<NullValue> এলিমেন্ট

নাল মান নির্দেশ করে। ডিফল্টরূপে মানটি NULL থাকে।

উদাহরণস্বরূপ নিম্নলিখিত সেটিং:

<NullValue>I_AM_NULL</NullValue>
নিম্নলিখিত JSON অবজেক্টটিকে রূপান্তর করে:
{"person" : "I_AM_NULL"}

নিম্নলিখিত XML এলিমেন্টে:

<person></person>

যেখানে Null মানের জন্য কোনো মান (অথবা I_AM_NULL ব্যতীত অন্য কোনো মান) নির্দিষ্ট করা হয়, সেখানে একই পেলোডটি রূপান্তরিত হয়:

<person>I_AM_NULL</person>

<Options>/<InvalidCharsReplacement> এলিমেন্ট

পার্সারের জন্য সমস্যা সৃষ্টি করতে পারে এমন অবৈধ XML পরিচালনা করতে সাহায্য করার জন্য, এই সেটিংটি অবৈধ XML তৈরি করে এমন যেকোনো JSON এলিমেন্টকে একটি স্ট্রিং দিয়ে প্রতিস্থাপন করে। উদাহরণস্বরূপ, নিম্নলিখিত সেটিংটি:

<InvalidCharsReplacement>_</InvalidCharsReplacement>

এই JSON অবজেক্টটিকে রূপান্তর করে

{
    "First%%%Name": "John"
}

এই XML কাঠামোতে:

<First_Name>John<First_Name>

ব্যবহারের নির্দেশাবলী

একটি সাধারণ মিডিয়েশন পরিস্থিতিতে, ইনবাউন্ড রিকোয়েস্ট ফ্লো-এর জন্য একটি JSON to XML পলিসির সাথে প্রায়শই আউটবাউন্ড রেসপন্স ফ্লো-এর জন্য একটি XMLtoJSON পলিসি যুক্ত করা হয়। এভাবে পলিসিগুলোকে একত্রিত করার মাধ্যমে, যেসব সার্ভিস স্বাভাবিকভাবে শুধু XML সাপোর্ট করে, তাদের জন্যও একটি JSON API উন্মুক্ত করা যেতে পারে।

অনেক সময় ডিফল্ট (খালি) JSON থেকে XML পলিসি প্রয়োগ করা এবং প্রয়োজন অনুযায়ী পর্যায়ক্রমে কনফিগারেশন উপাদান যোগ করা সুবিধাজনক হয়।

যেসব ক্ষেত্রে বিভিন্ন ক্লায়েন্ট অ্যাপ এপিআই ব্যবহার করে এবং সেগুলোর জন্য JSON ও XML উভয়েরই প্রয়োজন হতে পারে, সেখানে শর্তসাপেক্ষে কার্যকর করার জন্য JSON to XML এবং XML to JSON পলিসি কনফিগার করার মাধ্যমে রেসপন্সের ফরম্যাট ডায়নামিকভাবে সেট করা যেতে পারে। এই সিনারিওটির বাস্তবায়নের জন্য ফ্লো ভ্যারিয়েবল এবং কন্ডিশন দেখুন।

স্কিমা

ত্রুটির রেফারেন্স

এই বিভাগটি ফল্ট কোড এবং ত্রুটি বার্তাগুলি বর্ণনা করে যেগুলি ফেরত দেওয়া হয় এবং ত্রুটি ভেরিয়েবলগুলি যেগুলি এজ দ্বারা সেট করা হয় যখন এই নীতিটি একটি ত্রুটি ট্রিগার করে৷ এই তথ্যটি জানা গুরুত্বপূর্ণ যে আপনি ত্রুটিগুলি পরিচালনা করার জন্য ত্রুটির নিয়ম তৈরি করছেন কিনা। আরও জানতে, নীতিগত ত্রুটি এবং হ্যান্ডলিং ফল্ট সম্পর্কে আপনার যা জানা দরকার তা দেখুন৷

রানটাইম ত্রুটি

নীতি কার্যকর করার সময় এই ত্রুটিগুলি ঘটতে পারে৷

ফল্ট কোড HTTP স্থিতি কারণ ঠিক করুন
steps.jsontoxml.ExecutionFailed 500 ইনপুট পেলোড (JSON) খালি বা JSON থেকে XML নীতিতে পাঠানো ইনপুট (JSON) অবৈধ বা বিকৃত।
steps.jsontoxml.InCompatibleTypes 500 এই ত্রুটিটি ঘটে যদি <Source> উপাদানে সংজ্ঞায়িত ভেরিয়েবলের ধরন এবং <OutputVariable> উপাদান একই না হয়। এটা বাধ্যতামূলক যে <Source> উপাদানের মধ্যে থাকা ভেরিয়েবলের ধরন এবং <OutputVariable> উপাদান মিলে যায়। বৈধ প্রকারগুলি হল message এবং string
steps.jsontoxml.InvalidSourceType 500 <Source> উপাদানটিকে সংজ্ঞায়িত করতে ব্যবহৃত ভেরিয়েবলের ধরনটি অবৈধ হলে এই ত্রুটিটি ঘটে। ভেরিয়েবলের বৈধ প্রকারগুলি হল message এবং string
steps.jsontoxml.OutputVariableIsNotAvailable 500 JSON থেকে XML নীতির <Source> উপাদানে উল্লেখিত ভেরিয়েবল টাইপ স্ট্রিং এবং <OutputVariable> উপাদানটি সংজ্ঞায়িত না হলে এই ত্রুটি ঘটে। <OutputVariable> উপাদানটি বাধ্যতামূলক যখন <Source> এলিমেন্টে সংজ্ঞায়িত ভেরিয়েবল টাইপ স্ট্রিং হয়।
steps.jsontoxml.SourceUnavailable 500 এই ত্রুটিটি ঘটে যদি JSON থেকে XML নীতির <Source> উপাদানে নির্দিষ্ট করা বার্তা পরিবর্তনশীল হয়:
  • সুযোগের বাইরে (নির্দিষ্ট প্রবাহে উপলব্ধ নয় যেখানে নীতিটি কার্যকর করা হচ্ছে) বা
  • সমাধান করা যাবে না (সংজ্ঞায়িত করা হয় না)

স্থাপনার ত্রুটি

কোনোটিই নয়।

ফল্ট ভেরিয়েবল

রানটাইম ত্রুটি ঘটলে এই ভেরিয়েবলগুলি সেট করা হয়। আরও তথ্যের জন্য, নীতি ত্রুটি সম্পর্কে আপনার যা জানা দরকার তা দেখুন।

ভেরিয়েবল যেখানে উদাহরণ
fault.name=" fault_name " fault_name হল ফল্টের নাম, যা উপরে রানটাইম ত্রুটির সারণীতে তালিকাভুক্ত করা হয়েছে। ফল্ট নামটি ফল্ট কোডের শেষ অংশ। fault.name Matches "SourceUnavailable"
jsontoxml. policy_name .failed policy_name হল সেই নীতির ব্যবহারকারী-নির্দিষ্ট নাম যা ত্রুটিটি ফেলেছে। jsontoxml.JSON-to-XML-1.failed = true

উদাহরণ ত্রুটি প্রতিক্রিয়া

{
  "fault": {
    "faultstring": "JSONToXML[JSON-to-XML-1]: Source xyz is not available",
    "detail": {
      "errorcode": "steps.json2xml.SourceUnavailable"
    }
  }
}

উদাহরণ দোষ নিয়ম

<FaultRule name="JSON To XML Faults">
    <Step>
        <Name>AM-SourceUnavailableMessage</Name>
        <Condition>(fault.name Matches "SourceUnavailable") </Condition>
    </Step>
    <Step>
        <Name>AM-BadJSON</Name>
        <Condition>(fault.name = "ExecutionFailed")</Condition>
    </Step>
    <Condition>(jsontoxml.JSON-to-XML-1.failed = true) </Condition>
</FaultRule>

সম্পর্কিত বিষয়