คุณกำลังดูเอกสารประกอบของ Apigee Edge
ไปที่
เอกสารประกอบของ Apigee X info
อะไร
นโยบายนี้จะแปลงข้อความจากรูปแบบ JavaScript Object Notation (JSON) เป็น Extensible Markup Language (XML) ซึ่งจะช่วยให้คุณมีตัวเลือกมากมายในการควบคุมวิธีแปลงข้อความ
นโยบายนี้มีประโยชน์อย่างยิ่งหากคุณต้องการเปลี่ยนรูปแบบข้อความโดยใช้ XSL หลังจาก แปลงเพย์โหลด JSON เป็น XML แล้ว ให้ใช้นโยบาย XSL Transform กับสไตล์ชีตที่กำหนดเองเพื่อ ทำการแปลงรูปแบบที่ต้องการ
สมมติว่าต้องการแปลงคำขอในรูปแบบ JSON เป็นคำขอในรูปแบบ XML นโยบายจะแนบอยู่กับโฟลว์คำขอ (เช่น คำขอ / ProxyEndpoint / PostFlow)
ตัวอย่าง
ดูรายละเอียดเกี่ยวกับการแปลงระหว่าง JSON และ XML ได้ที่ ปัญหาการแปลงอาร์เรย์ JSON เป็นอาร์เรย์ XML ในออบเจ็กต์การตอบกลับ
การแปลงคำขอ
<JSONToXML name="jsontoxml">
<Source>request</Source>
<OutputVariable>request</OutputVariable>
</JSONToXML>การกำหนดค่านี้ใช้ข้อความคำขอในรูปแบบ JSON เป็นแหล่งที่มา จากนั้นสร้างข้อความในรูปแบบ XML ที่ป้อนข้อมูลใน request OutputVariable. 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 |
ตั้งค่าเป็น ตั้งค่าเป็น |
เท็จ | ไม่บังคับ |
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 และตั้งค่าส่วนหัว Content-type
ของ 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> elements
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> elements
<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> element
แปลงอาร์เรย์ 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>
การตั้งค่านี้จะแทนที่ องค์ประกอบ JSON ใดก็ตามที่สร้าง XML ที่ไม่ถูกต้องด้วยสตริง เพื่อช่วยจัดการ XML ที่ไม่ถูกต้องซึ่งอาจทำให้เกิดปัญหากับตัวแยกวิเคราะห์ ตัวอย่างเช่น การตั้งค่าต่อไปนี้
<InvalidCharsReplacement>_</InvalidCharsReplacement>
จะแปลงออบเจ็กต์ JSON นี้
{
"First%%%Name": "John"
}เป็นโครงสร้าง XML นี้
<First_Name>John<First_Name>
หมายเหตุเกี่ยวกับการใช้งาน
ในสถานการณ์การไกล่เกลี่ยทั่วไป นโยบาย JSON เป็น XML ในโฟลว์คำขอขาเข้ามักจะ จับคู่กับนโยบาย XML เป็น JSON ในโฟลว์การตอบกลับขาออก การรวมนโยบายด้วยวิธีนี้จะช่วยให้แสดง API JSON สำหรับบริการที่รองรับเฉพาะ 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 Transform