JSONtoXML নীতি

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

কী

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

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

যদি ধরে নেওয়া হয় যে JSON-ফর্ম্যাট করা অনুরোধকে XML-ফর্ম্যাট করা অনুরোধে কনভার্ট করার উদ্দেশ্য রয়েছে, তাহলে নীতিটি অনুরোধ ফ্লোয়ের সাথে অ্যাটাচ করা হবে (যেমন, অনুরোধ / 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 বৈশিষ্ট্যের মান ব্যবহার করা হবে।

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

<Source> এলিমেন্ট

ভেরিয়েবল, অনুরোধ বা উত্তর, যাতে JSON মেসেজ থাকে যা আপনি XML-এ কনভার্ট করতে চান।

<Source> সংজ্ঞায়িত করা না থাকলে, এটিকে মেসেজ হিসেবে গণ্য করা হয় (যা কোনও অনুরোধ ফ্লোতে নীতি অ্যাটাচ করা থাকলে অনুরোধ হিসেবে সমাধান হয় অথবা কোনও উত্তর ফ্লোতে নীতি অ্যাটাচ করা থাকলে উত্তর হিসেবে সমাধান হয়)।

সোর্স ভেরিয়েবল সমাধান করা না গেলে অথবা মেসেজ নয় এমন কোনও ধরনের সাথে সমাধান করা হলে, নীতি একটি সমস্যা দেখায়।

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

<OutputVariable> এলিমেন্ট

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>
ডিফল্ট অনুরোধ বা উত্তর, API প্রক্সি ফ্লোতে নীতি কোথায় যোগ করা হয়েছে তার উপর নির্ভর করে
উপস্থিতি <Source> এলিমেন্টে সংজ্ঞায়িত ভেরিয়েবল স্ট্রিং ধরনের হলে এই এলিমেন্টটি বাধ্যতামূলক।
টাইপ করুন মেসেজ

<Options>/<OmitXmlDeclaration>

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

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

<OmitXmlDeclaration>true</OmitXmlDeclaration>

<Options>/<NamespaceBlockName>
<Options>/<DefaultNamespaceNodeName>
<Options>/<NamespaceSeparator> এলিমেন্ট

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>

<Options>/<ObjectRootElementName>

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

যেমন, JSON যদি এইভাবে দেখা যায়:

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

এবং আপনি <ObjectRootElementName> হিসেবে এগুলি সেট করেছেন:

<ObjectRootElementName>Root</ObjectRootElementName>

ফলাফল হিসেবে XML এইভাবে দেখা যাবে:

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

<Options>/<AttributeBlockName>
<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>

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

নির্দিষ্ট পেরেন্ট ও চাইল্ড এলিমেন্টের নাম সহ 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>

<Options>/<Indent>

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>

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

নির্দিষ্ট নাম সহ 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>

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

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

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

স্কিমা

সমস্যার রেফারেন্স

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

রানটাইম সমস্যা

নীতি এক্সিকিউট করার সময় এই সমস্যা হতে পারে।

সমস্যার কোড 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 নীতিতে নির্দিষ্ট করা ভেরিয়েবলটি যদি স্ট্রিং টাইপের হয় এবং <OutputVariable> এলিমেন্টটি ডিফাইন করা না থাকে, তাহলে এই সমস্যাটি হয়। <Source> <Source> এলিমেন্টে সংজ্ঞায়িত ভেরিয়েবলটি স্ট্রিং ধরনের হলে, <OutputVariable> এলিমেন্টটি বাধ্যতামূলক।
steps.jsontoxml.SourceUnavailable 500 JSON থেকে XML নীতিতে নির্দিষ্ট করা <Source> এলিমেন্টের message ভেরিয়েবলটি যদি:
  • স্কোপের বাইরে (যে নির্দিষ্ট ফ্লোতে নীতি প্রয়োগ করা হচ্ছে সেখানে উপলভ্য নয়) অথবা
  • সমাধান করা যাচ্ছে না (সংজ্ঞায়িত করা হয়নি)

ডিপ্লয়মেন্ট সংক্রান্ত সমস্যা

কোনওটিই নয়।

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

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

ভেরিয়েবল কোথায় উদাহরণ
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>

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