2010-08-19 22 views
1

問候, 我有一個複雜的場景來處理。我有一個使用特定XML模式的wsdl文件。 XML模式實際上是規範的手工實現。還有一個基於Java的相同規範的實現。因此,WSDL和Java類中使用的XSD非常相似,但不完全相同。 幾乎所有的Web服務棧都允許從WSDL創建類或從Java類註釋創建WSDL。 我想要做的是使用WSDL並將wsdl中使用的XSD綁定到現有的Java類。 應該/我可以通過手動將生成的Java類替換爲現有的Java類來實現嗎?是否需要在配置文件中更改類型名稱並將綁定註釋移動到現有類中? 如果您知道任何最佳實踐或支持此種類型的java web服務堆棧(如果實用方式具有靈活性),那麼您的響應將非常感謝。哪個Web服務棧允許將wsdl的第一個Web服務綁定到Java中的現有類?

問候 謝雷夫

回答

3

我建議Spring的Web Services module,其中有沒有涉及代碼生成,但提供的擔憂完全分離。通過允許您在您的OXM(對象 - XML映射)技術中提供您的WSDL和現有架構(一個或多個)(contract first),您現有的基於Java的領域模型和另一個領域中的a way to plugin,選擇。

由於您擁有手工製作的WSDL /模式和手工製作的Java類,因此真正的工作是配置您的OXM。我更喜歡JiBX,因爲如果學習曲線看起來太陡峭,它將JAXB作爲備份保持分離的關注點(沒有將XML註釋垃圾混入您的域)。 Spring Web Services支持其他幾種OXM框架,您甚至可以同時使用多個不同的框架。

就最佳實踐而言,我認爲手工編碼是一種最佳實踐,儘管我可能處於少數。如果您從XML生成類,則最終得到的類只是簡單的數據容器,沒有任何行爲(假設您想在WSDL/XSD更改時重新生成它們)。如果你喜歡面向對象的範例,這是不好的,因爲你最終不得不將你的「業務邏輯」放置在實用程序/助手/服務等中,而不是放在它真正屬於的域對象中。這是我喜歡JiBX的原因之一。我可以用行爲製作非常漂亮的面向對象對象,一個不需要匹配對象的乾淨架構,並且可以使用類似於Hibernate對ORM(對象關係映射)進行操作的映射文件來管理對任何一方的更改。您可以對JAXB做同樣的事情,但是這需要將XML結構嵌入到對象模型中,並將單個XML表示綁定到它(而使用JiBX可以有很多)。

+0

+1 - 完全正確。 – duffymo 2010-08-20 00:48:51

+0

謝謝,這真的很有幫助。數據容器,自動生成器類很容易成爲你必須映射到其他類的東西。大部分與網絡服務相關的開發時間都在尋找在這些類中傳輸數據的方法。我將檢查JibX和Spring Web服務。 – mahonya 2010-08-20 10:49:32

+0

我已經考慮過這一點了;你認爲使用它作爲替代一些對象映射庫,如推土機是否合理?由於泛型中的類型擦除,推土機給了我很多問題,也許object1 ---> xml ----> object2類型的機制可能會取代它。 – mahonya 2010-08-21 08:18:54

1

MOXY(我是技術負責人)專爲具有現有XML Schema和Exsting對象模型的實例而設計。它爲了達到這一目標XPath based mapping,並且可以永遠處理情況的模型不類似的情況:

莫西也有外部約束力的文件:

MOXy是一個帶有擴展的JAXB實現(一對其中有上面提到)。如果您繼續使用Spring,MOXy將被配置爲JAXB實現,並且您需要添加一個jaxb。屬性文件與您的模型類與下列條目:

javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory 
+0

很酷。這看起來像是JiBX的可行替代品。我會看看!確實是 – SingleShot 2010-08-20 15:22:05

+0

。謝謝布萊斯,我一定會檢查一下。 – mahonya 2010-08-21 08:16:57