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 নীতি কনফিগার করে প্রতিক্রিয়ার বিন্যাস গতিশীলভাবে সেট করা যেতে পারে। এই দৃশ্যের বাস্তবায়নের জন্য ফ্লো ভেরিয়েবল এবং শর্তাবলী দেখুন।

স্কিমাস

ত্রুটি উল্লেখ

This section describes the fault codes and error messages that are returned and fault variables that are set by Edge when this policy triggers an error. This information is important to know if you are developing fault rules to handle faults. To learn more, see What you need to know about policy errors and Handling faults.

Runtime errors

These errors can occur when the policy executes.

Fault code HTTP status Cause Fix
steps.jsontoxml.ExecutionFailed 500 The input payload (JSON) is empty or the input (JSON) passed to JSON to XML policy is invalid or malformed.
steps.jsontoxml.InCompatibleTypes 500 This error occurs if the type of the variable defined in the <Source> element and the <OutputVariable> element are not the same. It is mandatory that the type of the variables contained within the <Source> element and the <OutputVariable> element matches. The valid types are message and string.
steps.jsontoxml.InvalidSourceType 500 This error occurs if the type of the variable used to define the <Source> element is invalid. The valid types of variable are message and string.
steps.jsontoxml.OutputVariableIsNotAvailable 500 This error occurs if the variable specified in the <Source> element of the JSON to XML Policy is of type string and the <OutputVariable> element is not defined. The <OutputVariable> element is mandatory when the variable defined in the <Source> element is of type string.
steps.jsontoxml.SourceUnavailable 500 This error occurs if the message variable specified in the <Source> element of the JSON to XML policy is either:
  • out of scope (not available in the specific flow where the policy is being executed) or
  • can't be resolved (is not defined)

Deployment errors

None.

Fault variables

These variables are set when a runtime error occurs. For more information, see What you need to know about policy errors.

Variables Where Example
fault.name="fault_name" fault_name is the name of the fault, as listed in the Runtime errors table above. The fault name is the last part of the fault code. fault.name Matches "SourceUnavailable"
jsontoxml.policy_name.failed policy_name is the user-specified name of the policy that threw the fault. jsontoxml.JSON-to-XML-1.failed = true

Example error response

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

Example fault rule

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

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