REST Adapter實現SAP PI中的增強XML/JSON格式轉換

來源:互聯網
上載者:User

標籤:anti   help   說明   apt   產生   產生   預設   add   轉換   

 

SAP標準的REST adapter有著XML/JSON轉換的功能,它很有用,因為一方面SAP PI/PO內部以XML格式處理資料,而另一方面,在處理REST架構風格的時候,JSON才是事實上的格式。

然而,觀察下網上有關REST Adapter的相關問題,可以得出一個結論:XML訊息處理後產生的JSON輸出並非總是正確的,有時候它會把人引入歧途。SAP積極地增強了REST Adapter的各方面功能——定製化和特性豐富的JSON處理就是其中一個重點領域。許多這樣的特性已經在記錄在SAP Help的文檔中。但是其中的一項相當強大、靈活的功能——名為“增強XML/JSON轉換”的功能,卻只是簡單地在SAP Note 2175218中提及。在本文中,我將闡述這個功能的用法,以及提供有效參數化方法的細節。

在內部,REST adapter使用了第三方的Jettison以實現JSON處理。在標準配置中,REST adapter依賴於Jettison處理器預設的轉換邏輯,它不會考慮或關聯相應的訊息類型中定義的有效元素屬性,而是有自己的最佳化和類型機制,該機制基於所要處理的XML文檔的元素的值的本來性質,而非訊息的XSD schema。這樣一來的結果是,有時轉換會導致不合需求的輸出。以下是兩個通常的例子:

  • 如果一個XML元素定義為數組,但是在被轉換的XML有效資料中只包含一行,Jettison處理器將可能會將其轉換為非數群組類型。
  • 如果一個XML元素定義為字串,但是在被轉換的XML有效資料中只有數字型的值,Jettison處理器將可能會將其轉換為整數類型。

在某些情況下,不合適的類型轉換對程式而言是不可接受的——這也是增強XML/JSON轉換可以協助我們解決的問題。

SAP Note 2175218介紹了增強XML/JSON轉換背後的一個想法,它是有關JSON處理器如何對待特別的XML元素的明確的描述。讓我們基於一個練習例子來測驗這個功能:

 

下面是一個訊息類型的定義,它用於同步情境的返回訊息,我們在其中使用了REST sender channel。如你所見,它包含了多種類型的元素,包含一個數組:

 

 XML格式的樣本回複訊息是這樣的:

 

使用REST sender channel的標準配置,將上面的XML訊息格式化後的JSON相應訊息是這樣的:

 

可以注意到,某些元素類型被錯誤的解釋了,比如:

  • 元素“ID”沒有被視為字串,而是數字——Jettison處理器將它作為數字對待,因為元素的值只包含數字類型的字元;
  • 元素“Properties”沒有被視為數組,Jettison處理器將它作為嵌套結構中的非數組對象,因為這惡搞元素只包含“Property”的一個子實體(沒有其它兄弟元素)。

讓我們通過增強XML/JSON轉換來修複它。在REST sender channel中,增強XML/JSON轉換的參數化資訊儲存在表 “Custom XML/JSON Conversion Rules”中。下面是針對之前高亮的有問題的類型和轉換不匹配的配置。

 

 

在再次執行介面後,檢查被格式化為JSON的響應訊息,可以觀察到,現在產生了正確的JSON輸出:

 

我在官方材料中沒有看到有關於參數化的細節,所以讓我來總結下增強XML/JSON轉換中可以使用的可接受的和有效值,以及有關它們的使用的解釋性說明。內容在下表:

欄位

描述

有效值

XML 命名空間

XML元素的命名空間

 

首碼

XML元素命名空間首碼

 

名稱

XML元素名

 

類型

XML元素類型。

以下類型是當前支援的:

String, Integer, Decimal, Boolean.

只要它是有效值列表中提到的值之一,就不會區分類型值的符號。

如果沒有指定值,不會應用指定的XML/JSON轉換指令,而是會執行預設的Jettison處理器邏輯。

String type

string

xs:string

xsd:string

Integer type

int

integer

xs:integer

xsd:integer

Decimal type

decimal

numeric

float

xs:decimal

xsd:decimal

Boolean type

bool

boolean

xs:boolean

xsd:boolean

數群組類型

XML元素是否是數組的指示符。

只要它是有效值列表中提到的值之一,就不會區分類型值的符號。

如果沒有指定值,數組指示符預設為false。

如果是數組:

1

true

yes

如果不是數組:

0

false

no

預設值

在XML/JSON轉換失敗的情況下會賦給JSON元素的值。

 

例如,在上面給的demo中,元素“Quantity”的值會被作為整數處理。如果原始值不能轉換為整數(比如含有字母),JSON輸出會得到一個預設值。在該情況下,這個值是“0”。

需要注意的是,對於預設值而言,系統不會針對在“TYPE”中指定的類型進行元素類型檢查——它會被當作字串。在這種方式下,比如,你可以指定預設值“Invalid value”給“Quantity”。系統不會提示錯誤,無論是在communication channel啟用的時候還是REST adapter運行期間處理相關訊息的時候,即便預設值和元素類型(整型)完全不匹配。記住這點,應當注意設定預設值時要保持其類型的一致性。

Any value.

下面的值有點特別:

“null”

(帶引號) – 被解釋為字串“null”

null

(無引號) – 被解釋為null

“”

(只有引號 – 被解釋為空白字串

 

本文連結:http://www.cnblogs.com/hhelibeb/p/7395567.html

英文原文:REST Adapter in PI/PO: Enhanced XML/JSON Conversion

參考閱讀:PI REST Adapter – JSON to XML conversion,

REST Adapter實現SAP PI中的增強XML/JSON格式轉換

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.