คุณกำลังดูเอกสารประกอบ 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
ขอบ
จะใช้เนื้อหาของตัวแปรนี้เป็นข้อความโดยอัตโนมัติสำหรับขั้นตอนการประมวลผลถัดไป
การอ้างอิงองค์ประกอบ
องค์ประกอบและแอตทริบิวต์ที่คุณกำหนดค่าได้ในนโยบายนี้มีดังนี้
<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 |
ตั้งค่าเป็น ตั้งค่าเป็น |
เท็จ | ไม่บังคับ |
enabled |
ตั้งค่าเป็น ตั้งค่าเป็น |
จริง | ไม่บังคับ |
async |
แอตทริบิวต์นี้เลิกใช้งานแล้ว |
เท็จ | เลิกใช้ |
<DisplayName> องค์ประกอบ
ใช้เพิ่มเติมจากแอตทริบิวต์ name
เพื่อติดป้ายกำกับนโยบายใน
เครื่องมือแก้ไขพร็อกซี UI การจัดการด้วยชื่อที่เป็นภาษาธรรมชาติต่างกัน
<DisplayName>Policy Display Name</DisplayName>
ค่าเริ่มต้น |
ไม่มี หากไม่ใส่องค์ประกอบนี้ ค่าของแอตทริบิวต์ |
---|---|
การมีบุคคลอยู่ | ไม่บังคับ |
ประเภท | สตริง |
<Source> องค์ประกอบ
ตัวแปร คำขอ หรือการตอบกลับที่มีข้อความ JSON ที่คุณต้องการแปลงเป็น XML
หากไม่ได้กำหนด <Source>
จะถือว่าเป็นข้อความ (ซึ่งแปลค่า
เพื่อขอเมื่อมีการแนบนโยบายกับขั้นตอนคำขอ หรือตอบกลับเมื่อมีการแนบนโยบาย
กับขั้นตอนการตอบกลับ)
หากแก้ไขตัวแปรแหล่งที่มาไม่ได้ หรือไม่แปลงตัวแปรเป็นประเภทที่ไม่ใช่ข้อความ นโยบาย เกิดข้อผิดพลาด
<Source>request</Source>
ค่าเริ่มต้น | คำขอหรือการตอบกลับ ซึ่งกำหนดโดยตำแหน่งที่เพิ่มนโยบายลงในโฟลว์พร็อกซี API |
การตรวจหาบุคคล | ไม่บังคับ |
ประเภท | ข้อความ |
<OutputVariable> องค์ประกอบ
จัดเก็บเอาต์พุตของการแปลงรูปแบบ 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> เป็นสตริงประเภท |
ประเภท | ข้อความ |
<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>
บ่งชี้ว่ามีพร็อพเพอร์ตี้ที่ชื่อ #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>
<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 ค่าเริ่มต้นคือ 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> องค์ประกอบ
เพื่อช่วยในการจัดการ XML ที่ไม่ถูกต้องซึ่งอาจทำให้เกิดปัญหากับโปรแกรมแยกวิเคราะห์ การตั้งค่านี้จะแทนที่ องค์ประกอบ JSON ใดๆ ที่สร้าง XML ที่ไม่ถูกต้องพร้อมด้วยสตริง ตัวอย่างเช่น URL ต่อไปนี้ การตั้งค่า:
<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 |
ข้อผิดพลาดนี้จะเกิดขึ้นหากข้อความ
ตัวแปรที่ระบุในองค์ประกอบ <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