আপনি Apigee Edge ডকুমেন্টেশন দেখছেন।
Apigee X ডকুমেন্টেশনে যান । তথ্য
কি
এই নীতিটি জাভাস্ক্রিপ্ট অবজেক্ট নোটেশন (JSON) ফর্ম্যাট থেকে বার্তাগুলিকে এক্সটেনসিবল মার্কআপ ল্যাঙ্গুয়েজে (XML) রূপান্তর করে, যা আপনাকে বার্তাগুলি কীভাবে রূপান্তরিত হয় তা নিয়ন্ত্রণ করার জন্য বেশ কয়েকটি বিকল্প দেয়।
XSL ব্যবহার করে বার্তা রূপান্তর করতে চাইলে এই নীতিটি বিশেষভাবে কার্যকর। JSON পেলোডকে XML-এ রূপান্তর করার পরে, আপনার প্রয়োজনীয় রূপান্তরটি সম্পাদন করতে একটি কাস্টম স্টাইল শীট সহ XSL ট্রান্সফর্ম নীতি ব্যবহার করুন।
ধরে নিচ্ছি যে উদ্দেশ্য হল একটি JSON-ফরম্যাটেড অনুরোধকে একটি XML-ফরম্যাটেড অনুরোধে রূপান্তর করা, নীতিটি একটি অনুরোধ প্রবাহের সাথে সংযুক্ত করা হবে (উদাহরণস্বরূপ, অনুরোধ / প্রক্সিএন্ডপয়েন্ট / পোস্টফ্লো)।
নমুনা
JSON এবং XML এর মধ্যে রূপান্তর সম্পর্কে বিস্তারিত আলোচনার জন্য, প্রতিক্রিয়া অবজেক্টে JSON অ্যারে থেকে XML অ্যারে রূপান্তর সমস্যাটি দেখুন।
একটি অনুরোধ রূপান্তর করা হচ্ছে
<JSONToXML name="jsontoxml">
<Source>request</Source>
<OutputVariable>request</OutputVariable>
</JSONToXML> এই কনফিগারেশনটি JSON-ফরম্যাটেড রিকোয়েস্ট মেসেজকে সোর্স হিসেবে গ্রহণ করে এবং তারপর একটি XML-ফরম্যাটেড মেসেজ তৈরি করে যা OutputVariable 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 | নীতির অভ্যন্তরীণ নাম। ঐচ্ছিকভাবে, ম্যানেজমেন্ট UI প্রক্সি এডিটরে নীতিটিকে একটি ভিন্ন, প্রাকৃতিক-ভাষা নামের সাথে লেবেল করতে | N/A | প্রয়োজন |
continueOnError | একটি নীতি ব্যর্থ হলে একটি ত্রুটি ফেরত দিতে একটি নীতি ব্যর্থ হওয়ার পরেও ফ্লো এক্সিকিউশন চালিয়ে যেতে | মিথ্যা | ঐচ্ছিক |
enabled | নীতি প্রয়োগ করতে নীতি বন্ধ করতে | সত্য | ঐচ্ছিক |
async | এই বৈশিষ্ট্যটি অবমূল্যায়ন করা হয়েছে৷ | মিথ্যা | অবচয় |
<DisplayName> উপাদান
ম্যানেজমেন্ট UI প্রক্সি এডিটরে নীতিটিকে একটি ভিন্ন, প্রাকৃতিক-ভাষা নামের সাথে লেবেল করতে name বৈশিষ্ট্য ছাড়াও ব্যবহার করুন।
<DisplayName>Policy Display Name</DisplayName>
| ডিফল্ট | N/A আপনি এই উপাদানটি বাদ দিলে, নীতির |
|---|---|
| উপস্থিতি | ঐচ্ছিক |
| টাইপ | স্ট্রিং |
<সূত্র> উপাদান
যে ভেরিয়েবল, অনুরোধ বা প্রতিক্রিয়ায় 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> এলিমেন্টে সংজ্ঞায়িত ভ্যারিয়েবলটি যখন স্ট্রিং ধরণের হয় তখন এই এলিমেন্টটি বাধ্যতামূলক। |
| আদর্শ | বার্তা |
<বিকল্প>/<অস্বীকৃতিXmlঘোষণা>
আউটপুট থেকে XML নেমস্পেস বাদ দেওয়ার জন্য নির্দিষ্ট করে। ডিফল্ট মান হল false যার অর্থ আউটপুটে নেমস্পেস অন্তর্ভুক্ত করা।
উদাহরণস্বরূপ, নিম্নলিখিত সেটিংটি নীতিটিকে নেমস্পেস বাদ দেওয়ার জন্য কনফিগার করে:
<OmitXmlDeclaration>true</OmitXmlDeclaration>
<বিকল্প>/<নামস্থানব্লকনাম>
<বিকল্প>/<ডিফল্টনামস্থান>নোডনাম>
<বিকল্প>/<নামস্থানবিভাজক> উপাদান
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> যখন আপনি JSON থেকে, যার কোন নামকৃত রুট উপাদান নেই, XML এ রূপান্তর করেন তখন রুট উপাদানের নাম নির্দিষ্ট করে।
উদাহরণস্বরূপ, যদি JSON এইভাবে প্রদর্শিত হয়:
{
"abc": "123",
"efg": "234"
}এবং আপনি <ObjectRootElementName> কে এইভাবে সেট করেছেন:
<ObjectRootElementName>Root</ObjectRootElementName>
ফলস্বরূপ XMLটি এইভাবে প্রদর্শিত হবে:
<Root> <abc>123</abc> <efg>234</efg> </Root>
<বিকল্প>/<অ্যাট্রিবিউটব্লকনাম>
<বিকল্প>/<অ্যাট্রিবিউটপ্রিফিক্স> উপাদান
<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>
<বিকল্প>/<NullValue> উপাদান
একটি নাল মান নির্দেশ করে। ডিফল্টরূপে মানটি হল NULL ।
উদাহরণস্বরূপ নিম্নলিখিত সেটিং:
<NullValue>I_AM_NULL</NullValue>
{"person" : "I_AM_NULL"}নিম্নলিখিত XML উপাদানে:
<person></person>
যেখানে Null মানের জন্য কোন মান (অথবা I_AM_NULL ব্যতীত অন্য কোন মান) নির্দিষ্ট করা নেই, সেখানে একই পেলোড রূপান্তরিত হয়:
<person>I_AM_NULL</person>
<বিকল্প>/<অবৈধ অক্ষর প্রতিস্থাপন> উপাদান
পার্সারের সাথে সমস্যা সৃষ্টি করতে পারে এমন অবৈধ XML পরিচালনা করতে সহায়তা করার জন্য, এই সেটিংটি স্ট্রিং দিয়ে অবৈধ XML তৈরি করে এমন যেকোনো JSON উপাদানকে প্রতিস্থাপন করে। উদাহরণস্বরূপ, নিম্নলিখিত সেটিং:
<InvalidCharsReplacement>_</InvalidCharsReplacement>
এই JSON অবজেক্টটিকে রূপান্তর করে
{
"First%%%Name": "John"
}এই XML কাঠামোতে:
<First_Name>John<First_Name>
ব্যবহারবিধি
একটি সাধারণ মধ্যস্থতার পরিস্থিতিতে, ইনবাউন্ড রিকোয়েস্ট ফ্লো-এর উপর একটি JSON থেকে XML নীতি প্রায়শই আউটবাউন্ড রেসপন্স ফ্লো-এর উপর একটি XMLtoJSON নীতির সাথে যুক্ত করা হয়। এইভাবে নীতিগুলিকে একত্রিত করে, একটি JSON API এমন পরিষেবাগুলির জন্য উন্মুক্ত করা যেতে পারে যা স্থানীয়ভাবে শুধুমাত্র XML সমর্থন করে।
XML নীতিতে ডিফল্ট (খালি) JSON প্রয়োগ করা এবং প্রয়োজন অনুসারে পুনরাবৃত্তিমূলকভাবে কনফিগারেশন উপাদান যোগ করা প্রায়শই কার্যকর।
যেসব পরিস্থিতিতে API গুলি বিভিন্ন ক্লায়েন্ট অ্যাপ দ্বারা ব্যবহৃত হয় যার জন্য JSON এবং XML প্রয়োজন হতে পারে, সেখানে শর্তসাপেক্ষে কার্যকর করার জন্য JSON থেকে XML এবং XML থেকে JSON নীতিগুলি কনফিগার করে প্রতিক্রিয়ার ফর্ম্যাট গতিশীলভাবে সেট করা যেতে পারে। এই দৃশ্যকল্প বাস্তবায়নের জন্য ফ্লো ভেরিয়েবল এবং শর্তাবলী দেখুন।
স্কিমা
ত্রুটির উল্লেখ
এই বিভাগটি ফল্ট কোড এবং ত্রুটি বার্তাগুলি বর্ণনা করে যেগুলি ফেরত দেওয়া হয় এবং ত্রুটি ভেরিয়েবলগুলি যেগুলি এজ দ্বারা সেট করা হয় যখন এই নীতিটি একটি ত্রুটি ট্রিগার করে৷ এই তথ্যটি জানা গুরুত্বপূর্ণ যে আপনি ত্রুটিগুলি পরিচালনা করার জন্য ত্রুটির নিয়ম তৈরি করছেন কিনা। আরও জানতে, নীতিগত ত্রুটি এবং হ্যান্ডলিং ফল্ট সম্পর্কে আপনার যা জানা দরকার তা দেখুন৷
রানটাইম ত্রুটি
নীতি কার্যকর করার সময় এই ত্রুটিগুলি ঘটতে পারে৷
| ফল্ট কোড | HTTP স্থিতি | কারণ | ঠিক করুন |
|---|---|---|---|
steps.jsontoxml.ExecutionFailed | 500 | ইনপুট পেলোড (JSON) খালি বা JSON থেকে XML নীতিতে পাঠানো ইনপুট (JSON) অবৈধ বা বিকৃত। | build |
steps.jsontoxml.InCompatibleTypes | 500 | এই ত্রুটিটি ঘটে যদি <Source> উপাদানে সংজ্ঞায়িত ভেরিয়েবলের ধরন এবং <OutputVariable> উপাদান একই না হয়। এটা বাধ্যতামূলক যে <Source> উপাদানের মধ্যে থাকা ভেরিয়েবলের ধরন এবং <OutputVariable> উপাদান মিলে যায়। বৈধ প্রকারগুলি হল message এবং string । | build |
steps.jsontoxml.InvalidSourceType | 500 | <Source> উপাদানটিকে সংজ্ঞায়িত করতে ব্যবহৃত ভেরিয়েবলের ধরনটি অবৈধ হলে এই ত্রুটিটি ঘটে। ভেরিয়েবলের বৈধ প্রকারগুলি হল message এবং string । | build |
steps.jsontoxml.OutputVariableIsNotAvailable | 500 | JSON থেকে XML নীতির <Source> উপাদানে উল্লেখিত ভেরিয়েবল টাইপ স্ট্রিং এবং <OutputVariable> উপাদানটি সংজ্ঞায়িত না হলে এই ত্রুটি ঘটে। <OutputVariable> উপাদানটি বাধ্যতামূলক যখন <Source> এলিমেন্টে সংজ্ঞায়িত ভেরিয়েবল টাইপ স্ট্রিং হয়। | build |
steps.jsontoxml.SourceUnavailable | 500 | এই ত্রুটিটি ঘটে যদি JSON থেকে XML নীতির <Source> উপাদানে নির্দিষ্ট করা বার্তা পরিবর্তনশীল হয়:
| build |
স্থাপনার ত্রুটি
কোনোটিই নয়।
ফল্ট ভেরিয়েবল
রানটাইম ত্রুটি ঘটলে এই ভেরিয়েবলগুলি সেট করা হয়। আরও তথ্যের জন্য, নীতি ত্রুটি সম্পর্কে আপনার যা জানা দরকার তা দেখুন।
| ভেরিয়েবল | যেখানে | উদাহরণ |
|---|---|---|
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>সম্পর্কিত বিষয়
- XML থেকে JSON: XML থেকে JSON নীতি
- XSL রূপান্তর: XSL রূপান্তর নীতি
আপনি Apigee Edge ডকুমেন্টেশন দেখছেন।
Apigee X ডকুমেন্টেশনে যান । তথ্য
কি
এই নীতিটি জাভাস্ক্রিপ্ট অবজেক্ট নোটেশন (JSON) ফর্ম্যাট থেকে বার্তাগুলিকে এক্সটেনসিবল মার্কআপ ল্যাঙ্গুয়েজে (XML) রূপান্তর করে, যা আপনাকে বার্তাগুলি কীভাবে রূপান্তরিত হয় তা নিয়ন্ত্রণ করার জন্য বেশ কয়েকটি বিকল্প দেয়।
XSL ব্যবহার করে বার্তা রূপান্তর করতে চাইলে এই নীতিটি বিশেষভাবে কার্যকর। JSON পেলোডকে XML-এ রূপান্তর করার পরে, আপনার প্রয়োজনীয় রূপান্তরটি সম্পাদন করতে একটি কাস্টম স্টাইল শীট সহ XSL ট্রান্সফর্ম নীতি ব্যবহার করুন।
ধরে নিচ্ছি যে উদ্দেশ্য হল একটি JSON-ফরম্যাটেড অনুরোধকে একটি XML-ফরম্যাটেড অনুরোধে রূপান্তর করা, নীতিটি একটি অনুরোধ প্রবাহের সাথে সংযুক্ত করা হবে (উদাহরণস্বরূপ, অনুরোধ / প্রক্সিএন্ডপয়েন্ট / পোস্টফ্লো)।
নমুনা
JSON এবং XML এর মধ্যে রূপান্তর সম্পর্কে বিস্তারিত আলোচনার জন্য, প্রতিক্রিয়া অবজেক্টে JSON অ্যারে থেকে XML অ্যারে রূপান্তর সমস্যাটি দেখুন।
একটি অনুরোধ রূপান্তর করা হচ্ছে
<JSONToXML name="jsontoxml">
<Source>request</Source>
<OutputVariable>request</OutputVariable>
</JSONToXML> এই কনফিগারেশনটি JSON-ফরম্যাটেড রিকোয়েস্ট মেসেজকে সোর্স হিসেবে গ্রহণ করে এবং তারপর একটি XML-ফরম্যাটেড মেসেজ তৈরি করে যা OutputVariable 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 | নীতির অভ্যন্তরীণ নাম। ঐচ্ছিকভাবে, ম্যানেজমেন্ট UI প্রক্সি এডিটরে নীতিটিকে একটি ভিন্ন, প্রাকৃতিক-ভাষা নামের সাথে লেবেল করতে | N/A | প্রয়োজন |
continueOnError | একটি নীতি ব্যর্থ হলে একটি ত্রুটি ফেরত দিতে একটি নীতি ব্যর্থ হওয়ার পরেও ফ্লো এক্সিকিউশন চালিয়ে যেতে | মিথ্যা | ঐচ্ছিক |
enabled | নীতি প্রয়োগ করতে নীতি বন্ধ করতে | সত্য | ঐচ্ছিক |
async | এই বৈশিষ্ট্যটি অবমূল্যায়ন করা হয়েছে৷ | মিথ্যা | অবচয় |
<DisplayName> উপাদান
ম্যানেজমেন্ট UI প্রক্সি এডিটরে নীতিটিকে একটি ভিন্ন, প্রাকৃতিক-ভাষা নামের সাথে লেবেল করতে name বৈশিষ্ট্য ছাড়াও ব্যবহার করুন।
<DisplayName>Policy Display Name</DisplayName>
| ডিফল্ট | N/A আপনি এই উপাদানটি বাদ দিলে, নীতির |
|---|---|
| উপস্থিতি | ঐচ্ছিক |
| টাইপ | স্ট্রিং |
<সূত্র> উপাদান
যে ভেরিয়েবল, অনুরোধ বা প্রতিক্রিয়ায় 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> এলিমেন্টে সংজ্ঞায়িত ভ্যারিয়েবলটি যখন স্ট্রিং ধরণের হয় তখন এই এলিমেন্টটি বাধ্যতামূলক। |
| আদর্শ | বার্তা |
<বিকল্প>/<অস্বীকৃতিXmlঘোষণা>
আউটপুট থেকে XML নেমস্পেস বাদ দেওয়ার জন্য নির্দিষ্ট করে। ডিফল্ট মান হল false যার অর্থ আউটপুটে নেমস্পেস অন্তর্ভুক্ত করা।
উদাহরণস্বরূপ, নিম্নলিখিত সেটিংটি নীতিটিকে নেমস্পেস বাদ দেওয়ার জন্য কনফিগার করে:
<OmitXmlDeclaration>true</OmitXmlDeclaration>
<বিকল্প>/<নামস্থানব্লকনাম>
<বিকল্প>/<ডিফল্টনামস্থান>নোডনাম>
<বিকল্প>/<নামস্থানবিভাজক> উপাদান
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> যখন আপনি JSON থেকে, যার কোন নামকৃত রুট উপাদান নেই, XML এ রূপান্তর করেন তখন রুট উপাদানের নাম নির্দিষ্ট করে।
উদাহরণস্বরূপ, যদি JSON এইভাবে প্রদর্শিত হয়:
{
"abc": "123",
"efg": "234"
}এবং আপনি <ObjectRootElementName> কে এইভাবে সেট করেছেন:
<ObjectRootElementName>Root</ObjectRootElementName>
ফলস্বরূপ XMLটি এইভাবে প্রদর্শিত হবে:
<Root> <abc>123</abc> <efg>234</efg> </Root>
<বিকল্প>/<অ্যাট্রিবিউটব্লকনাম>
<বিকল্প>/<অ্যাট্রিবিউটপ্রিফিক্স> উপাদান
<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>
<বিকল্প>/<NullValue> উপাদান
একটি নাল মান নির্দেশ করে। ডিফল্টরূপে মানটি হল NULL ।
উদাহরণস্বরূপ নিম্নলিখিত সেটিং:
<NullValue>I_AM_NULL</NullValue>
{"person" : "I_AM_NULL"}নিম্নলিখিত XML উপাদানে:
<person></person>
যেখানে Null মানের জন্য কোন মান (অথবা I_AM_NULL ব্যতীত অন্য কোন মান) নির্দিষ্ট করা নেই, সেখানে একই পেলোড রূপান্তরিত হয়:
<person>I_AM_NULL</person>
<বিকল্প>/<অবৈধ অক্ষর প্রতিস্থাপন> উপাদান
পার্সারের সাথে সমস্যা সৃষ্টি করতে পারে এমন অবৈধ XML পরিচালনা করতে সহায়তা করার জন্য, এই সেটিংটি স্ট্রিং দিয়ে অবৈধ XML তৈরি করে এমন যেকোনো JSON উপাদানকে প্রতিস্থাপন করে। উদাহরণস্বরূপ, নিম্নলিখিত সেটিং:
<InvalidCharsReplacement>_</InvalidCharsReplacement>
এই JSON অবজেক্টটিকে রূপান্তর করে
{
"First%%%Name": "John"
}এই XML কাঠামোতে:
<First_Name>John<First_Name>
ব্যবহারবিধি
একটি সাধারণ মধ্যস্থতার পরিস্থিতিতে, ইনবাউন্ড রিকোয়েস্ট ফ্লো-এর উপর একটি JSON থেকে XML নীতি প্রায়শই আউটবাউন্ড রেসপন্স ফ্লো-এর উপর একটি XMLtoJSON নীতির সাথে যুক্ত করা হয়। এইভাবে নীতিগুলিকে একত্রিত করে, একটি JSON API এমন পরিষেবাগুলির জন্য উন্মুক্ত করা যেতে পারে যা স্থানীয়ভাবে শুধুমাত্র XML সমর্থন করে।
XML নীতিতে ডিফল্ট (খালি) JSON প্রয়োগ করা এবং প্রয়োজন অনুসারে পুনরাবৃত্তিমূলকভাবে কনফিগারেশন উপাদান যোগ করা প্রায়শই কার্যকর।
যেসব পরিস্থিতিতে API গুলি বিভিন্ন ক্লায়েন্ট অ্যাপ দ্বারা ব্যবহৃত হয় যার জন্য JSON এবং XML প্রয়োজন হতে পারে, সেখানে শর্তসাপেক্ষে কার্যকর করার জন্য JSON থেকে XML এবং XML থেকে JSON নীতিগুলি কনফিগার করে প্রতিক্রিয়ার ফর্ম্যাট গতিশীলভাবে সেট করা যেতে পারে। এই দৃশ্যকল্প বাস্তবায়নের জন্য ফ্লো ভেরিয়েবল এবং শর্তাবলী দেখুন।
স্কিমা
ত্রুটির উল্লেখ
এই বিভাগটি ফল্ট কোড এবং ত্রুটি বার্তাগুলি বর্ণনা করে যেগুলি ফেরত দেওয়া হয় এবং ত্রুটি ভেরিয়েবলগুলি যেগুলি এজ দ্বারা সেট করা হয় যখন এই নীতিটি একটি ত্রুটি ট্রিগার করে৷ এই তথ্যটি জানা গুরুত্বপূর্ণ যে আপনি ত্রুটিগুলি পরিচালনা করার জন্য ত্রুটির নিয়ম তৈরি করছেন কিনা। আরও জানতে, নীতিগত ত্রুটি এবং হ্যান্ডলিং ফল্ট সম্পর্কে আপনার যা জানা দরকার তা দেখুন৷
রানটাইম ত্রুটি
নীতি কার্যকর করার সময় এই ত্রুটিগুলি ঘটতে পারে৷
| ফল্ট কোড | HTTP স্থিতি | কারণ | ঠিক করুন |
|---|---|---|---|
steps.jsontoxml.ExecutionFailed | 500 | ইনপুট পেলোড (JSON) খালি বা JSON থেকে XML নীতিতে পাঠানো ইনপুট (JSON) অবৈধ বা বিকৃত। | build |
steps.jsontoxml.InCompatibleTypes | 500 | এই ত্রুটিটি ঘটে যদি <Source> উপাদানে সংজ্ঞায়িত ভেরিয়েবলের ধরন এবং <OutputVariable> উপাদান একই না হয়। এটা বাধ্যতামূলক যে <Source> উপাদানের মধ্যে থাকা ভেরিয়েবলের ধরন এবং <OutputVariable> উপাদান মিলে যায়। বৈধ প্রকারগুলি হল message এবং string । | build |
steps.jsontoxml.InvalidSourceType | 500 | <Source> উপাদানটিকে সংজ্ঞায়িত করতে ব্যবহৃত ভেরিয়েবলের ধরনটি অবৈধ হলে এই ত্রুটিটি ঘটে। ভেরিয়েবলের বৈধ প্রকারগুলি হল message এবং string । | build |
steps.jsontoxml.OutputVariableIsNotAvailable | 500 | JSON থেকে XML নীতির <Source> উপাদানে উল্লেখিত ভেরিয়েবল টাইপ স্ট্রিং এবং <OutputVariable> উপাদানটি সংজ্ঞায়িত না হলে এই ত্রুটি ঘটে। <OutputVariable> উপাদানটি বাধ্যতামূলক যখন <Source> এলিমেন্টে সংজ্ঞায়িত ভেরিয়েবল টাইপ স্ট্রিং হয়। | build |
steps.jsontoxml.SourceUnavailable | 500 | এই ত্রুটিটি ঘটে যদি JSON থেকে XML নীতির <Source> উপাদানে নির্দিষ্ট করা বার্তা পরিবর্তনশীল হয়:
| build |
স্থাপনার ত্রুটি
কোনোটিই নয়।
ফল্ট ভেরিয়েবল
রানটাইম ত্রুটি ঘটলে এই ভেরিয়েবলগুলি সেট করা হয়। আরও তথ্যের জন্য, নীতি ত্রুটি সম্পর্কে আপনার যা জানা দরকার তা দেখুন।
| ভেরিয়েবল | যেখানে | উদাহরণ |
|---|---|---|
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>সম্পর্কিত বিষয়
- XML থেকে JSON: XML থেকে JSON নীতি
- XSL রূপান্তর: XSL রূপান্তর নীতি