JSONtoXML নীতি

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

কি

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

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

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

নমুনা

JSON এবং XML-এর মধ্যে রূপান্তর করার বিষয়ে বিস্তারিত আলোচনার জন্য, http://community.apigee.com/articles/1839/converting-between-xml-and-json-what-you-need-to-k.html দেখুন।

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

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

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


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

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

<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> সংজ্ঞায়িত না করা হয়, তাহলে এটিকে বার্তা হিসাবে গণ্য করা হয় (যা নীতিটি অনুরোধের প্রবাহের সাথে সংযুক্ত হলে অনুরোধের সমাধান করে, অথবা যখন নীতিটি একটি প্রতিক্রিয়া প্রবাহের সাথে সংযুক্ত থাকে তখন প্রতিক্রিয়া)।

যদি সোর্স ভেরিয়েবলের সমাধান না করা যায়, বা একটি নন-মেসেজ টাইপের সমাধান করা যায়, তাহলে নীতি একটি ত্রুটি ছুড়ে দেয়।

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

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

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

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

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

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

<বিকল্প>/<OmitXml ঘোষণা>

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

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

<OmitXmlDeclaration>true</OmitXmlDeclaration>

<বিকল্প>/<NamespaceBlockName>
<বিকল্প>/<DefaultNamespaceNodeName>
<বিকল্প>/<নেমস্পেস বিভাজক> উপাদান

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

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

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

নির্দেশ করে যে #namespaces নামক একটি সম্পত্তি JSON উৎসে বিদ্যমান যাতে ডিফল্ট হিসাবে মনোনীত অন্তত একটি নামস্থান রয়েছে। যেমন:

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

<বিকল্প>/<ObjectRootElementName>

<ObjectRootElementName> যখন আপনি JSON থেকে XML এ রূপান্তর করেন, যার কোনো নামযুক্ত রুট উপাদান নেই, তখন মূল উপাদানের নাম নির্দিষ্ট করে।

উদাহরণস্বরূপ, যদি JSON এর মতো প্রদর্শিত হয়:

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

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

<ObjectRootElementName>Root</ObjectRootElementName>

ফলস্বরূপ XML প্রদর্শিত হয়:

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

<বিকল্প>/<AttributeBlockName>
<বিকল্প>/<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>

<বিকল্প>/<ArrayRootElementName>
<বিকল্প>/<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>

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

XML আউটপুট ইন্ডেন্ট করার জন্য নির্দিষ্ট করে। ডিফল্ট মান false মানে ইন্ডেন্ট করবেন না।

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

<Indent>true</Indent>

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

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

তারপর intdenting ছাড়া আউটপুট হল:

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

ইন্ডেন্টিং সক্ষম করে, আউটপুট হল:

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

<বিকল্প>/<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>

<বিকল্প>/<NullValue> উপাদান

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

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

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

নিম্নলিখিত XML উপাদানে:

<person></person>

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

<person>I_AM_NULL</person>

<বিকল্প>/<InvalidCharsReplacement> উপাদান

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

<InvalidCharsReplacement>_</InvalidCharsReplacement>

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

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

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

<First_Name>John<First_Name>

ব্যবহারের নোট

একটি সাধারণ মধ্যস্থতা পরিস্থিতিতে, অন্তর্মুখী অনুরোধ প্রবাহের উপর একটি JSON থেকে XML নীতি প্রায়ই বহির্গামী প্রতিক্রিয়া প্রবাহের একটি XMLtoJSON নীতির সাথে যুক্ত হয়। এইভাবে নীতিগুলি একত্রিত করার মাধ্যমে, একটি JSON API পরিষেবাগুলির জন্য উন্মুক্ত করা যেতে পারে যা স্থানীয়ভাবে শুধুমাত্র XML সমর্থন করে৷

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

এমন পরিস্থিতিতে যেখানে APIs ব্যবহার করা হয় বিভিন্ন ক্লায়েন্ট অ্যাপ দ্বারা যার জন্য JSON এবং XML প্রয়োজন হতে পারে, শর্তসাপেক্ষে চালানোর জন্য JSON থেকে XML এবং XML থেকে 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>

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