Bạn đang xem tài liệu về Apigee Edge.
Chuyển đến
Tài liệu về Apigee X. thông tin
Nội dung
Chính sách này chuyển đổi các thông báo từ định dạng JavaScript Object Notation (JSON) thành định dạng có thể mở rộng ngôn ngữ đánh dấu (XML), cung cấp cho bạn một vài tuỳ chọn để kiểm soát cách chuyển đổi thư.
Chính sách này đặc biệt hữu ích nếu bạn muốn chuyển đổi tin nhắn bằng ABI. Sau chuyển đổi tải trọng JSON sang XML, hãy sử dụng chính sách Chuyển đổi BII với biểu định kiểu tuỳ chỉnh để thực hiện phép biến đổi cần thiết.
Giả sử mục đích là chuyển đổi một yêu cầu có định dạng JSON thành một yêu cầu có định dạng XML, chính sách sẽ được đính kèm vào Luồng yêu cầu (ví dụ: Request / ProxyEndpoint / PostFlow).
Mẫu
Để thảo luận chi tiết về cách chuyển đổi giữa JSON và XML, vui lòng xem http://community.apigee.com/articles/1839/converting-between-xml-and-json-what-you-need-to-k.html.
Chuyển đổi yêu cầu
<JSONToXML name="jsontoxml"> <Source>request</Source> <OutputVariable>request</OutputVariable> </JSONToXML>
Cấu hình này lấy thông báo yêu cầu ở định dạng JSON làm nguồn, sau đó tạo một thông báo
Thông báo ở định dạng XML được điền sẵn trong OutputVariable request
. Cạnh
tự động sử dụng nội dung của biến này làm thông báo cho bước xử lý tiếp theo.
Tham chiếu phần tử
Sau đây là các phần tử và thuộc tính mà bạn có thể thiết lập theo chính sách này.
<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> thuộc tính
Bảng sau đây mô tả những thuộc tính chung cho tất cả phần tử mẹ của chính sách:
Thuộc tính | Mô tả | Mặc định | Sự hiện diện |
---|---|---|---|
name |
Tên nội bộ của chính sách. Giá trị của thuộc tính (Không bắt buộc) Bạn có thể dùng phần tử |
Không áp dụng | Bắt buộc |
continueOnError |
Đặt thành Đặt thành |
false | Không bắt buộc |
enabled |
Hãy đặt thành Đặt thành |
đúng | Không bắt buộc |
async |
Thuộc tính này không được dùng nữa. |
false | Không được dùng nữa |
<DisplayName> phần tử
Hãy sử dụng cùng với thuộc tính name
để gắn nhãn chính sách trong phần
trình chỉnh sửa proxy giao diện người dùng quản lý có tên ngôn ngữ tự nhiên khác.
<DisplayName>Policy Display Name</DisplayName>
Mặc định |
Không áp dụng Nếu bạn bỏ qua phần tử này, giá trị của thuộc tính |
---|---|
Sự hiện diện | Không bắt buộc |
Loại | Chuỗi |
<Source> phần tử
Biến, yêu cầu hoặc phản hồi chứa thông báo JSON mà bạn muốn chuyển đổi thành XML.
Nếu bạn không xác định <Source>
, thì đó sẽ được coi là thông báo (sẽ giải quyết vấn đề này
để yêu cầu khi chính sách này được đính kèm vào quy trình yêu cầu hoặc phản hồi khi chính sách được đính kèm
vào quy trình phản hồi).
Nếu biến nguồn không thể được phân giải hoặc phân giải thành một loại không phải là thông báo, thì chính sách gửi lỗi.
<Source>request</Source>
Mặc định | yêu cầu hoặc phản hồi, được xác định theo vị trí mà chính sách được thêm vào luồng proxy API |
Sự hiện diện | Không bắt buộc |
Loại | tin nhắn |
<OutputVariable> phần tử
Lưu trữ đầu ra của quá trình chuyển đổi định dạng JSON sang XML. Giá trị này thường giống với nguồn, tức là thường thì yêu cầu JSON được chuyển đổi thành yêu cầu XML.
Tải trọng của thông báo JSON được phân tích cú pháp và chuyển đổi thành XML và loại nội dung HTTP
phần đầu thư của thông báo theo định dạng XML được đặt thành text/xml;charset=UTF-8
.
Nếu không chỉ định OutputVariable
, source
sẽ được coi là
OutputVariable
. Ví dụ: nếu source
là request
,
thì OutputVariable
mặc định là request
.
<OutputVariable>request</OutputVariable>
Mặc định | yêu cầu hoặc phản hồi, được xác định theo vị trí mà chính sách được thêm vào luồng proxy API |
Sự hiện diện | Phần tử này là bắt buộc khi biến được xác định trong phần tử <Source> thuộc loại chuỗi. |
Loại | tin nhắn |
<Options>/<OmitXmlDeclaration>
Chỉ định để loại bỏ không gian tên XML khỏi kết quả. Giá trị mặc định là false
nghĩa là đưa không gian tên vào dữ liệu đầu ra.
Ví dụ: chế độ cài đặt sau đây sẽ định cấu hình chính sách để bỏ qua không gian tên:
<OmitXmlDeclaration>true</OmitXmlDeclaration>
<Options>/<NamespaceBlockName>
<Options>/<DefaultNamespaceNodeName>
<Options>/<NamespaceSeparator> phần tử
JSON không hỗ trợ vùng chứa tên, trong khi các tài liệu XML thường yêu cầu vùng chứa tên đó.
NamespaceBlockName
cho phép bạn xác định một thuộc tính JSON đóng vai trò là nguồn của không gian tên
định nghĩa trong XML do chính sách tạo ra. (Điều này có nghĩa là JSON nguồn phải
cung cấp một thuộc tính có thể được liên kết vào một không gian tên mà ứng dụng mong đợi
sử dụng XML kết quả).
Ví dụ: các chế độ cài đặt sau:
<NamespaceBlockName>#namespaces</NamespaceBlockName> <DefaultNamespaceNodeName>$default</DefaultNamespaceNodeName> <NamespaceSeparator>:</NamespaceSeparator>
cho biết rằng thuộc tính có tên là #namespaces
tồn tại trong JSON nguồn
chứa ít nhất một không gian tên được chỉ định làm không gian tên mặc định. Ví dụ:
{ "population": { "#namespaces": { "$default": "http://www.w3.org/1999/people", "exp": "http://www.w3.org/1999/explorers" }, "person": "John Smith", "exp:person": "Pedro Cabral" } }
chuyển đổi thành:
<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> chỉ định tên phần tử gốc khi bạn chuyển đổi từ JSON (không có gốc được đặt tên) sang XML.
Ví dụ: nếu JSON xuất hiện dưới dạng:
{ "abc": "123", "efg": "234" }
Và bạn đặt <ObjectRootElementName> là:
<ObjectRootElementName>Root</ObjectRootElementName>
XML kết quả có dạng:
<Root> <abc>123</abc> <efg>234</efg> </Root>
<Options>/<AttributeBlockName>
<Options>/<AttributePrefix> phần tử
<AttributeBlockName>
cho phép bạn chỉ định thời điểm các phần tử JSON được
được chuyển đổi thành thuộc tính XML (thay vì phần tử XML).
Ví dụ: chế độ cài đặt sau đây chuyển đổi các thuộc tính bên trong một đối tượng có tên
#attrs
vào các thuộc tính XML:
<AttributeBlockName>#attrs</AttributeBlockName>
Đối tượng JSON sau:
{ "person" : { "#attrs" : { "firstName" : "John", "lastName" : "Smith" }, "occupation" : "explorer", } }
sẽ được chuyển đổi sang cấu trúc XML sau:
<person firstName="John" lastName="Smith"> <occupation>explorer</occupation> </person>
<AttributePrefix>
chuyển đổi thuộc tính bắt đầu bằng tiền tố đã chỉ định
vào các thuộc tính XML. Trong trường hợp tiền tố thuộc tính được đặt thành @
, ví dụ:
<AttributePrefix>@</AttributePrefix>
Chuyển đổi đối tượng JSON sau:
{ "person" : { "@firstName" : "John", "@lastName" : "Smith" "occupation" : "explorer", } }
cho cấu trúc XML sau:
<person firstName="John" lastName="Smith"> <occupation>explorer</occupation> </person>
<Options>/<ArrayRootElementName>
<Options>/<ArrayItemElementName> phần tử
Chuyển đổi một mảng JSON thành danh sách các phần tử XML có phần tử mẹ và phần tử con được chỉ định tên.
Ví dụ: các chế độ cài đặt sau:
<ArrayRootElementName>Array</ArrayRootElementName> <ArrayItemElementName>Item</ArrayItemElementName>
chuyển đổi mảng JSON sau:
[ "John Cabot", { "explorer": "Pedro Cabral" }, "John Smith" ]
thành cấu trúc XML sau:
<Array> <Item>John Cabot</Item> <Item> <explorer>Pedro Cabral</explorer> </Item> <Item>John Smith</Item> </Array>
<Options>/<Indent>
Chỉ định thụt lề đầu ra XML. Giá trị mặc định là false
nghĩa là không thụt lề.
Ví dụ: chế độ cài đặt sau đây định cấu hình chính sách để thụt lề đầu ra:
<Indent>true</Indent>
Nếu dữ liệu đầu vào JSON có dạng:
{"n": [1, 2, 3] }
Sau đó, kết quả không thụt lề là:
<Array><n>1</n><n>2</n><n>3</n></Array>
Khi bật tính năng thụt lề, kết quả sẽ là:
<Array> <n>1</n> <n>2</n> <n>3</n> </Array>
<Options>/<TextNodeName> phần tử
Chuyển đổi một thuộc tính JSON thành một nút văn bản XML có tên đã chỉ định. Ví dụ: cài đặt sau đây:
<TextNodeName>age</TextNodeName>
chuyển đổi JSON này:
{ "person": { "firstName": "John", "lastName": "Smith", "age": 25 } }
vào cấu trúc XML này:
<person> <firstName>John</firstName>25<lastName>Smith</lastName> </person>
Nếu bạn không chỉ định TextNodeName
, XML sẽ được tạo theo chế độ cài đặt mặc định
cho một nút văn bản:
<person> <firstName>John</firstName> <age>25</age> <lastName>Smith</lastName> </person>
<Options>/<NullValue> phần tử
Biểu thị một giá trị rỗng. Theo mặc định, giá trị là NULL
.
Ví dụ: chế độ cài đặt sau đây:
<NullValue>I_AM_NULL</NullValue>Chuyển đổi đối tượng JSON sau:
{"person" : "I_AM_NULL"}
vào phần tử XML sau:
<person></person>
Khi không có giá trị nào (hoặc một giá trị không phải I_AM_NULL
) được chỉ định cho giá trị Null,
thì cùng một tải trọng đó sẽ chuyển đổi thành:
<person>I_AM_NULL</person>
<Options>/<InvalidCharsReplacement> phần tử
Để hỗ trợ xử lý XML không hợp lệ có thể gây ra sự cố cho trình phân tích cú pháp, chế độ cài đặt này sẽ thay thế bất kỳ phần tử JSON nào tạo XML không hợp lệ chứa chuỗi. Ví dụ: như sau cài đặt:
<InvalidCharsReplacement>_</InvalidCharsReplacement>
Chuyển đổi đối tượng JSON này
{ "First%%%Name": "John" }
vào cấu trúc XML này:
<First_Name>John<First_Name>
Lưu ý về cách sử dụng
Trong trường hợp dàn xếp điển hình, chính sách JSON thành XML trong luồng yêu cầu đến thường kết hợp với chính sách XMLtoJSON trên quy trình phản hồi đi. Bằng cách kết hợp các chính sách theo cách này, API JSON có thể xuất hiện đối với các dịch vụ vốn chỉ hỗ trợ XML.
Thông thường, bạn nên áp dụng JSON mặc định (trống) cho chính sách XML và liên tục thêm các phần tử cấu hình theo yêu cầu.
Đối với các trường hợp API được sử dụng bởi các ứng dụng khác nhau có thể yêu cầu JSON và XML, định dạng của phản hồi có thể được đặt một cách linh động bằng cách định cấu hình JSON thành XML và XML để Chính sách JSON để thực thi có điều kiện. Xem Các biến và điều kiện của luồng để triển khai tình huống này.
Giản đồ
Tham chiếu lỗi
Phần này mô tả các mã lỗi và thông báo lỗi được trả về cũng như các biến lỗi do Edge đặt khi chính sách này kích hoạt lỗi. Thông tin này rất quan trọng nếu bạn đang phát triển các quy tắc lỗi để xử lý lỗi. Để tìm hiểu thêm, hãy xem bài viết Những điều bạn cần biết về lỗi chính sách và Xử lý lỗi.
Lỗi thời gian chạy
Những lỗi này có thể xảy ra khi chính sách này thực thi.
Mã lỗi | Trạng thái HTTP | Nguyên nhân | Khắc phục |
---|---|---|---|
steps.jsontoxml.ExecutionFailed |
500 | Tải trọng đầu vào (JSON) trống hoặc dữ liệu đầu vào (JSON) được chuyển vào chính sách JSON sang XML là không hợp lệ hoặc sai định dạng. | build |
steps.jsontoxml.InCompatibleTypes |
500 | Lỗi này xảy ra nếu loại biến được xác định trong phần tử <Source> và
phần tử <OutputVariable> không giống nhau. Bắt buộc là loại
biến có trong phần tử <Source> và phần tử <OutputVariable>
kết quả phù hợp. Có các loại hợp lệ là message và string . |
build |
steps.jsontoxml.InvalidSourceType |
500 | Lỗi này xảy ra nếu loại biến dùng để xác định phần tử <Source>
không hợp lệ. Các loại biến hợp lệ là message và string . |
build |
steps.jsontoxml.OutputVariableIsNotAvailable |
500 | Lỗi này xảy ra nếu biến được chỉ định trong phần tử <Source> của JSON thành
Chính sách XML thuộc loại chuỗi và phần tử <OutputVariable> không được xác định.
Phần tử <OutputVariable> là bắt buộc khi biến được xác định trong <Source>
thuộc loại chuỗi. |
build |
steps.jsontoxml.SourceUnavailable |
500 |
Lỗi này xảy ra nếu thông báo
biến được chỉ định trong phần tử <Source> của chính sách JSON sang XML là:
|
build |
Lỗi triển khai
Không có.
Biến lỗi
Các biến này được đặt khi xảy ra lỗi thời gian chạy. Để biết thêm thông tin, hãy xem bài viết Những điều bạn cần biết về lỗi chính sách.
Biến | Trong đó | Ví dụ: |
---|---|---|
fault.name="fault_name" |
fault_name là tên của lỗi, như được liệt kê trong bảng Lỗi thời gian chạy ở trên. Tên lỗi là phần cuối cùng của mã lỗi. | fault.name Matches "SourceUnavailable" |
jsontoxml.policy_name.failed |
policy_name là tên do người dùng chỉ định của chính sách gây ra lỗi. | jsontoxml.JSON-to-XML-1.failed = true |
Ví dụ về phản hồi khi gặp lỗi
{ "fault": { "faultstring": "JSONToXML[JSON-to-XML-1]: Source xyz is not available", "detail": { "errorcode": "steps.json2xml.SourceUnavailable" } } }
Ví dụ về quy tắc lỗi
<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>
Chủ đề có liên quan
- XML sang JSON: XML sang JSON chính sách của Google
- Biến đổi PPID: Chính sách chuyển đổi XSL