我必須從Java應用程序使用.NET託管的Web服務。兩者之間的互操作性通常非常好。我遇到的問題是.NET應用程序開發人員選擇使用.NET DataSet對象公開數據。有很多寫,爲什麼你不應該這樣做,文章如何使互操作性困難:解析從Java .NET Web服務返回的.NET數據集
- http://www.hanselman.com/blog/ReturningDataSetsFromWebServicesIsTheSpawnOfSatanAndRepresentsAllThatIsTrulyEvilInTheWorld.aspx
- http://www.lhotka.net/weblog/ThoughtsOnPassingDataSetObjectsViaWebServices.aspx
- http://aspnet.4guysfromrolla.com/articles/051805-1.aspx
- http://www.theserverside.net/tt/articles/showarticle.tss?id=Top5WSMistakes
我的問題是,儘管這不是被推薦的做法,但我堅持不得不使用返回帶有Java的DataSet的Web服務。當你產生這樣的事情的代理有什麼比.NET你基本上與物體看起來像這樣結束了其他:
@XmlElement(namespace = "http://www.w3.org/2001/XMLSchema", required = true)
protected Schema schema;
@XmlAnyElement(lax = true)
protected Object any;
這第一場是應該描述DataSet中的實際模式。當我使用Java中的JAX-WS和JAXB處理時,它將所有的XS-Schema作爲Java對象呈現在此處。走JAXB的對象樹是可能的,但並不美觀。 any字段表示模式指定的模式中的DataSet的原始XML。
數據集的結構非常一致,但數據類型確實發生了變化。我需要訪問類型信息,架構因呼叫而異。我雖然有幾個選擇,但沒有一個看起來像'好'選項。
- 嘗試在運行時使用JAXB從模式生成Java對象似乎是一個壞主意。這會太慢,因爲它需要每次都發生。
- 蠻力行走使用JAXB架構樹對象是JAX-WS帶進來。
- 也許不是使用JAXB解析的模式會更容易對付它的XML和使用XPath的嘗試和發現我需要的類型信息。
我還沒有考慮過其他選擇嗎?是否有一個Java庫輕鬆解析DataSet對象?其他人做了什麼,可能會有類似的情況?
請讓我知道你是否有任何嘗試, – 2013-04-04 07:43:49