我必須與一組Web服務交互,每個服務都有自己的WSDL和XSD。 XSD有時會合併成一個文件,有時會沿着多個文件傳播(20-30)。然而,根據經驗,我知道大多數消息結構和數據共享一個很大的公共子集,在不同的事務中可能只有20%不同。如何合併來自不同服務的WSDL和XSD的公共部分?
不幸的是,我無法控制服務器部件或服務的聲明,所以讓他們修復它是不可能的。客戶端的第一個版本分別生成了每個服務,然後將它們作爲單獨的外觀用作另一個系統的適配器,形成一個連貫的高級服務。
我用默認的JAXB綁定使用CXF併爲每個服務強加了不同的生成包。我這樣做是因爲一些大多數服務使用通用的數據模型,但並不是所有的都使用相同的版本或定製,所以我有衝突,因此選擇了暴力行爲,以便我可以完成系統。
但是,這會導致適配器的內存要求通過屋頂,因爲每個服務加載其上下文。現在,我已經向上提供了500M的內存,僅用於安裝服務客戶端的適配器,甚至在我開始發送請求和處理響應之前。儘管我可以使用當前的情況運行系統而沒有任何問題,但這會造成妨礙解決方案部署的限制;我的客戶希望大幅度降低這個比例(60%或更多),以便這個系統可以和其他人一起安裝而不需要硬件升級。
問題如下: 是否有一種工具或技術可以讓我將每個事務的公共部分放在一起,以便它們可以一次生成並在需要時引用?
除了將系統重新分配到不同的框架或數據綁定所需的時間之外,我沒有與CXF或JAXB綁定。
非常感謝您的幫助。
---編輯---
謝謝布萊斯。這指向JAXB的一個有用功能:劇集。不幸的是,我仍然需要提取不同服務的通用基礎部分。所以現在我需要的是通過結構差異來提取這些公共部分的方法,這是一種diff工具,它可以瞭解XSD描述的結構和類型層次結構,以便將適當的引用連接到公共部分專業部分。
您可能有興趣在EclipseLink JAXB(MOXy)中關注以下相關功能:https://bugs.eclipse.org/340997 – 2011-03-25 20:21:22
他們是否使用共享名稱空間作爲共享部分?如果不是,你就是SOL,因爲各個部分根本不明白它們是相同的。 – 2011-06-01 15:02:01
1Gb的內存成本是多少?你的時間多少錢?將此指出給客戶。 – artbristol 2011-06-03 09:41:46