2012-04-28 122 views
0

我正在創建一個Grails應用程序,該應用程序對返回XML的Web服務具有隻讀訪問權限。除了用戶名/密碼外,此應用程序的全部數據將來自此外部Web服務。Grails:將域類變量映射到Web API XML數據源

將我的域類中的變量映射到此數據源的最佳方法是什麼?我發現了很多自定義ORM與數據庫的例子,但沒有XML例子。我在哪裏編寫邏輯來進行HTTP調用並提取字段?

任何和所有的幫助,非常感謝。

回答

3

我們非常成功地使用Spring web服務和MarkupBuilder/XmlSlurper。您可以使用WebServiceTemplate爲給定的Uri創建一個Web服務客戶端,並通過使用MarkupBuilder構建的XML發送您的請求。

這對於我們保留WSDL作爲接口的中心描述,作爲文檔工件,沒有代碼生成和生成代碼來維護,沒有爲jaxb綁定添加註釋,沒有數據對象具有很大的優勢。

我們不使用域類,我們使用GPathResult直接獲取通過Web服務調用的XML結果獲得的GPathResult,因爲以鴨子打字的方式,它相當於客戶端到Java對象。但是,我們沒有Web界面。如果你有一個web界面,我會創建一個

def toXml(MarkupBuilder b) { 
} 

方法命令對象,或者也許

myCommandObject as XML 

會的工作,這取決於您的WSDL的XSD架構。這樣你就可以利用Grails數據綁定和驗證。

對於視圖的數據模型,可能傳遞一個duck-type的命令對象(兼容的XML對象)就足夠了,所以你不必兩種方法都編組。

另一個需要注意的是,當前版本的grails spring-ws插件已過期。我不認爲它會因爲老式的spring-security-core類別而在Grails 2.0中表現出色。好消息是,如果你只是建立一個客戶端,你幾乎不需要插件。只需包含最新的Spring Web服務jar並使用WebServiceTemplate.sendToEndpoint方法即可。

+0

謝謝。我在啜飲XML,但沒有調查過使用Command Objects。我會放棄它。 – BadgerBadgerBadger 2012-05-02 01:45:43

+0

所以我想它的工作?感謝您接受答案! – loteq 2014-05-19 12:45:04

+0

對不起,花了這麼長時間。仍然在學習禮儀。 – BadgerBadgerBadger 2014-05-19 20:40:36