คุณกำลังดูเอกสารประกอบของ Apigee Edge
ไปที่เอกสารประกอบของ Apigee X ข้อมูล
อะไร
นโยบายนี้จะแปลงข้อความจากรูปแบบ JavaScript Object Notation (JSON) เป็นภาษามาร์กอัป (XML) ที่ขยายได้ คุณจึงมีตัวเลือกมากมายในการควบคุมวิธีแปลงข้อความ
นโยบายนี้จะมีประโยชน์อย่างยิ่งหากคุณต้องการเปลี่ยนรูปแบบข้อความโดยใช้ XSL หลังจากแปลงเพย์โหลด JSON เป็น XML ให้ใช้นโยบายการแปลง XSL กับสไตล์ชีตที่กำหนดเองเพื่อดำเนินการเปลี่ยนรูปแบบที่คุณต้องการ
สมมติว่าเป้าหมายคือการแปลงคำขอรูปแบบ JSON เป็นคำขอรูปแบบ XML ระบบจะแนบนโยบายไปกับโฟลว์คำขอ (เช่น Request / ProxyEndpoint / PostFlow)
ลองฟัง
สำหรับการสนทนาโดยละเอียดเกี่ยวกับการแปลงระหว่าง 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
ExportVariable 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 |
ชื่อภายในของนโยบาย ค่าของแอตทริบิวต์ (ไม่บังคับ) ใช้องค์ประกอบ |
ไม่มีข้อมูล | จำเป็น |
continueOnError |
ตั้งค่าเป็น ตั้งค่าเป็น |
false | ไม่บังคับ |
enabled |
ตั้งค่าเป็น ตั้งค่าเป็น |
จริง | ไม่บังคับ |
async |
แอตทริบิวต์นี้เลิกใช้งานแล้ว |
false | เลิกใช้ |
องค์ประกอบ <DisplayName>
ใช้เพิ่มเติมจากแอตทริบิวต์ name
เพื่อติดป้ายกำกับนโยบายในเครื่องมือแก้ไขพร็อกซี UI การจัดการด้วยชื่อที่เป็นภาษาธรรมชาติที่แตกต่างออกไป
<DisplayName>Policy Display Name</DisplayName>
ค่าเริ่มต้น |
ไม่มีข้อมูล หากคุณไม่ใส่องค์ประกอบนี้ ระบบจะใช้ค่าของแอตทริบิวต์ |
---|---|
การมีบุคคลอยู่ | ไม่บังคับ |
Type | สตริง |
องค์ประกอบ <Source>
ตัวแปร คำขอ หรือการตอบกลับที่มีข้อความ JSON ที่ต้องการแปลงเป็น XML
หากไม่ได้กำหนด <Source>
ระบบจะถือว่าเป็นข้อความ (ซึ่งจะส่งคำขอเมื่อแนบนโยบายไว้กับขั้นตอนการส่งคำขอ หรือตอบกลับเมื่อแนบนโยบายไว้กับขั้นตอนการตอบกลับ)
หากแก้ไขตัวแปรแหล่งที่มาไม่ได้ หรือแปลงเป็นประเภทที่ไม่ใช่ข้อความ นโยบายจะแสดงข้อผิดพลาด
<Source>request</Source>
ค่าเริ่มต้น | คำขอหรือการตอบกลับ ซึ่งกำหนดโดยตำแหน่งที่นโยบายเพิ่มลงในโฟลว์พร็อกซี API |
การปรากฏ | ไม่บังคับ |
ประเภท | ข้อความ |
องค์ประกอบ <ExportVariable>
จัดเก็บเอาต์พุตของการแปลงรูปแบบ JSON เป็น XML ซึ่งโดยปกติแล้วจะเป็นค่าเดียวกับแหล่งที่มา กล่าวคือ โดยปกติแล้วระบบจะแปลงคำขอ JSON เป็นคำขอ XML
ระบบจะแยกวิเคราะห์และแปลงเพย์โหลดของข้อความ JSON เป็น XML และมีการตั้งค่าส่วนหัวประเภทเนื้อหา HTTP ของข้อความรูปแบบ XML เป็น text/xml;charset=UTF-8
หากไม่ได้ระบุ OutputVariable
ระบบจะถือว่า source
เป็น OutputVariable
เช่น หาก source
คือ request
แล้ว OutputVariable
จะมีค่าเริ่มต้นเป็น request
<OutputVariable>request</OutputVariable>
ค่าเริ่มต้น | คำขอหรือการตอบกลับ ซึ่งกำหนดโดยตำแหน่งที่นโยบายเพิ่มลงในโฟลว์พร็อกซี API |
การปรากฏ | องค์ประกอบนี้จำเป็นเมื่อตัวแปรที่กำหนดไว้ในองค์ประกอบ <Source> เป็นประเภทสตริง |
ประเภท | ข้อความ |
<ตัวเลือก>/<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>
ระบุว่าพร็อพเพอร์ตี้ที่เรียกว่า #namespaces
มีอยู่ใน JSON แหล่งที่มาซึ่งมีเนมสเปซอย่างน้อย 1 รายการที่กำหนดให้เป็นค่าเริ่มต้น เช่น
{ "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>
<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 Array ต่อไปนี้
[ "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>
องค์ประกอบ <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 ค่าเริ่มต้นคือ NULL
ตัวอย่างเช่น การตั้งค่าต่อไปนี้
<NullValue>I_AM_NULL</NullValue>แปลงออบเจ็กต์ JSON ต่อไปนี้
{"person" : "I_AM_NULL"}
ลงในองค์ประกอบ XML ต่อไปนี้
<person></person>
ในกรณีที่ไม่ได้ระบุค่า (หรือค่าอื่นที่ไม่ใช่ I_AM_NULL
) สำหรับค่า Null เพย์โหลดเดียวกันจะเปลี่ยนเป็น
<person>I_AM_NULL</person>
องค์ประกอบ <Options>/< invalidCharsReplacement>
การตั้งค่านี้จะแทนที่องค์ประกอบ JSON ที่สร้าง XML ที่ไม่ถูกต้องด้วยสตริงเพื่อช่วยจัดการ XML ที่ไม่ถูกต้องซึ่งอาจทำให้เกิดปัญหากับโปรแกรมแยกวิเคราะห์ ตัวอย่างเช่น การตั้งค่าต่อไปนี้
<InvalidCharsReplacement>_</InvalidCharsReplacement>
แปลงออบเจ็กต์ JSON นี้
{ "First%%%Name": "John" }
ในโครงสร้าง XML นี้:
<First_Name>John<First_Name>
หมายเหตุการใช้งาน
ในสถานการณ์สื่อกลางทั่วไป นโยบาย JSON เป็น XML บนโฟลว์คำขอขาเข้ามักจะจับคู่กับนโยบาย XMLtoJSON ในขั้นตอนการตอบสนองขาออก การรวมนโยบายด้วยวิธีนี้จะทำให้ระบบแสดง JSON API สำหรับบริการที่รองรับเฉพาะ XML ตั้งแต่แรกได้
คุณควรใช้ JSON เริ่มต้น (ว่างเปล่า) กับนโยบาย XML และเพิ่มองค์ประกอบการกำหนดค่าซ้ำตามที่จำเป็น
สำหรับสถานการณ์ที่แอปไคลเอ็นต์หลากหลายใช้ API ซึ่งอาจต้องใช้ JSON และ XML ก็สามารถกำหนดรูปแบบของการตอบกลับแบบไดนามิกได้โดยกำหนดค่านโยบาย JSON เป็น XML และ XML เป็น JSON เพื่อดำเนินการตามเงื่อนไข ดูตัวแปรและเงื่อนไขสำหรับโฟลว์สำหรับการนำสถานการณ์นี้ไปใช้
สคีมา
การอ้างอิงข้อผิดพลาด
ส่วนนี้จะอธิบายโค้ดข้อผิดพลาดและข้อความแสดงข้อผิดพลาดที่แสดงผลและตัวแปรข้อผิดพลาดที่ Edge กําหนดเมื่อนโยบายนี้ทําให้เกิดข้อผิดพลาด ข้อมูลนี้เป็นสิ่งสำคัญที่ต้องทราบหากคุณกำลังกำหนดกฎข้อผิดพลาดเพื่อจัดการกับข้อผิดพลาด ดูข้อมูลเพิ่มเติมได้ที่สิ่งที่คุณต้องทราบเกี่ยวกับข้อผิดพลาดของนโยบายและการจัดการข้อผิดพลาด
ข้อผิดพลาดเกี่ยวกับรันไทม์
ข้อผิดพลาดเหล่านี้อาจเกิดขึ้นเมื่อนโยบายทำงาน
รหัสข้อผิดพลาด | สถานะ HTTP | สาเหตุ | แก้ไข |
---|---|---|---|
steps.jsontoxml.ExecutionFailed |
500 | เพย์โหลดอินพุต (JSON) ว่างเปล่าหรืออินพุต (JSON) ที่ส่งไปยังนโยบาย JSON ไปยัง XML ไม่ถูกต้องหรือผิดรูปแบบ | build |
steps.jsontoxml.InCompatibleTypes |
500 | ข้อผิดพลาดนี้เกิดขึ้นหากประเภทของตัวแปรที่กำหนดไว้ในองค์ประกอบ <Source> และองค์ประกอบ <OutputVariable> ไม่เหมือนกัน ต้องระบุประเภทของตัวแปรที่อยู่ในองค์ประกอบ <Source> และองค์ประกอบ <OutputVariable> ให้ตรงกัน ประเภทที่ถูกต้องคือ message และ string |
build |
steps.jsontoxml.InvalidSourceType |
500 | ข้อผิดพลาดนี้เกิดขึ้นหากประเภทของตัวแปรที่ใช้กำหนดองค์ประกอบ <Source> ไม่ถูกต้อง ประเภทตัวแปรที่ใช้ได้คือ message และ string |
build |
steps.jsontoxml.OutputVariableIsNotAvailable |
500 | ข้อผิดพลาดนี้เกิดขึ้นหากตัวแปรที่ระบุในองค์ประกอบ <Source> ของนโยบาย JSON เป็น XML อยู่ในรูปแบบสตริงและไม่ได้กำหนดองค์ประกอบ <OutputVariable>
คุณจำเป็นต้องระบุองค์ประกอบ <OutputVariable> เมื่อตัวแปรที่กำหนดไว้ในองค์ประกอบ <Source> เป็นสตริงประเภท |
build |
steps.jsontoxml.SourceUnavailable |
500 |
ข้อผิดพลาดนี้เกิดขึ้นหากตัวแปร message ที่ระบุในองค์ประกอบ <Source> ของนโยบาย JSON เป็น XML มีลักษณะอย่างใดอย่างหนึ่งต่อไปนี้
|
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