คุณกำลังดูเอกสารประกอบ 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>
{"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 ที่จะดำเนินการอย่างมีเงื่อนไข ดูตัวแปรและเงื่อนไขสำหรับโฟลว์ เพื่อนำสถานการณ์นี้ไปใช้
สคีมา
ข้อมูลอ้างอิงข้อผิดพลาด
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. | build |
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 . |
build |
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 . |
build |
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. |
build |
steps.jsontoxml.SourceUnavailable |
500 |
This error occurs if the message
variable specified in the <Source> element of the JSON to XML policy is either:
|
build |
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>
หัวข้อที่เกี่ยวข้อง
- XML เป็น JSON: XML เป็น JSON นโยบาย
- การเปลี่ยนรูปแบบ XSL: นโยบายการเปลี่ยนรูปแบบของ XSL