JAX-WS.
JAX-WS (Java API for XML Web Services) 是一種將 Java 方法變成 Web Service 方法的協定, 透過它, Java 程式設計師可以很快地建立出各種 Web Service. 而 Web Service 的傳入參數與傳回值的處理, 則需要藉由 JAXB 的輔助.
JAXB.
JAXB (Java Architecture for XML Binding) 是一種將 Java 物件轉換為 XML 格式的協定, 它在 Java 的 Web Service 使用上特別有用, 因為使用者需將程式中的 Java 物件轉換成 XML 格式後, 才能用於 Web Service 方法中被傳入傳出. 在 JAXB 中也定義了相關的 API , 規定了轉換的能力如何被擴充, 轉換的程式如何被撰寫等.
Eva 與 JAXB.
在面對 ORM 的問題時, 我們需要去轉換那些為無法直被對映的 Property 型別, 與解釋 Collection 型別如何被存取, 為此我們會在使用 Eva_ORM 時自訂 Converter 類別, 自訂 Collection Entity 型別; 同樣的, 面對 Java 物件與 XML 的轉換問題時, 上述的問題一樣需要再次被解決. 但因為我們在使用 Eva_ORM 時, 己經將上述的問題解決過一次了, 所以在面對 Java 物件與 XML 的轉換時, 就可以延用之前解決問題的成果, 使得任何可使用於 Eva_ORM 中的物件, 也能被使用於 Web Service 之中.
JAXB 定義了如何處理特殊 Java 物件的方式, 其中一個最方便的方式是自訂 XMLAdaptor 類別. 而我們也依此方式為 Eva 提供了預設的 XMLAdaptor, 而為了要提供預設的轉換, 我們也需同時提供了一些常見型別的處理, 像是 Date, Class 與常用 Collection 型別的轉換. 所以就算是不使用 Eva 的資料物件, 使用者仍可利用 Eva 預設提供的其它轉換.
透過 Eva 所提供的 JAXB XMLAdaptor, 配合其它支援 JAX-WS 功能的工具 (我們推薦使用 Apache CXF), 使用者可以在最短的方式內, 以最快的方式建立出 Web Service. 而使用我們的 JAXB 功能的注意事項如下 :
JAXB 定義了如何處理特殊 Java 物件的方式, 其中一個最方便的方式是自訂 XMLAdaptor 類別. 而我們也依此方式為 Eva 提供了預設的 XMLAdaptor, 而為了要提供預設的轉換, 我們也需同時提供了一些常見型別的處理, 像是 Date, Class 與常用 Collection 型別的轉換. 所以就算是不使用 Eva 的資料物件, 使用者仍可利用 Eva 預設提供的其它轉換.
透過 Eva 所提供的 JAXB XMLAdaptor, 配合其它支援 JAX-WS 功能的工具 (我們推薦使用 Apache CXF), 使用者可以在最短的方式內, 以最快的方式建立出 Web Service. 而使用我們的 JAXB 功能的注意事項如下 :
- 所有的XMLAdaptor, 與其所使用的資料儲存類別, 皆放於 com.logntw.eva.jaxb 與其底下的子 package 之中.
- 若傳入或傳回值中, 有使用到 Eva_ORM 的 Entity, 則必需設定 JAXBConfig 類別的 ORMappers 型別靜態成員變數 ORMAPPERS, 並在 Web Service 的宣告類別上加下 XmlSeeAlso 的 Annotation, 並設定其設定值含有 XEntity.class 與 XEvaCollection.class.
- 透過 XMLAdaptorHelper 的 register 方法, 可讓使用者再加入其它自訂的 XMLAdaptor, 或取代預設提供的 XMLAdaptor 實作.
- 使用者從頭到尾只需使用 CommonAdaptor 即可, 我們的工具會自動再去尋找能正確地處理資料的 XMLAdaptor 實作.
- 在執行時, JAXB 規定使用者需以 XMLSeeAlso Annotation 去指示出一個 Web Service 中所會使用到的資料儲存類別, 請記得這些類別都放在 com.logntw.eva.jaxb 與其底下的子 package 之中. 並在執行發生例外 (Exception) 時, 依例外訊息加入所需要的資料儲存類別.
- 我們使用 Appache common-logging 來記錄一些訊息.
|
|
上面兩個檔案分別是一個範例程式與它的程式碼, 它們示範了 Eva_ORM Entity 物件能夠同時從資料庫被讀寫與被 Web Service 傳送. 使用者可以在執行範例程式後, 再以瀏覽器連到下列網址, 觀看這樣的一個 Web Service, 預設會以怎樣的方式被建立 :
http://localhost:9900/UserS?wsdl
http://localhost:9900/UserS?wsdl
JSON.
JSON (JavaScript Object Notation) 是一種與 XML 有類似精神與用途, 但是有著 '物件' 概念的資料表示法, 它常被使用在網頁程式設計之中.
Eva 與 JSON.
關於 Java 物件與 JSON 格式之間的轉換, 目前並沒有特別的協定, 但卻己經有了數個能夠間接使用 JAXB 協定, 但卻將轉換目標由 XML 改成 JSON 格式的工具. 而因為 Eva 提供 JAXB 的預設支援, 所以也可以透過該類型的工具將 Eva 中所用到的物件轉換成 JSON 格式. 在 Apache CXF 的說明文件中也有提到如何去做到, 請參考 :
http://cxf.apache.org/docs/json-support.html
http://cxf.apache.org/docs/json-support.html