一千萬個為什麽

搜索

解析從Java Web服務返回的.NET DataSet

我必須從Java應用程序中使用.NET托管的Web服務。兩者之間的互操作性通常非常好。我遇到的問題是.NET應用程序開發人員選擇使用.NET DataSet對象公開數據。關於為什麽不應該這樣做以及它如何使互操作性變得困難,有很多文章寫成:

我的問題是,盡管不推薦這種做法,但我不得不使用Web服務來返回帶有Java的DataSet。當你使用除.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對象似乎是一個壞主意。這會太慢,因為它需要每次都發生。
  • 使用JAX-WS引入的JAXB對象,使用Brute force遍歷架構樹。
  • 也許不是使用JAXB來解析模式,而是更容易將其作為XML處理並使用XPath來嘗試找到我需要的類型信息。

還有其他我沒考慮過的選擇嗎?是否有一個Java庫可以輕松解析DataSet對象?其他人可能有類似情況做了什麽?

最佳答案

不幸的是,我不認為這裏有一個簡單的答案。我要做的是在.NET中創建一個代理Web服務,您可以從Java調用它將接收數據集,將其轉換為更易消耗的內容,然後將其返回到Java代碼。

轉載註明原文: 解析從Java Web服務返回的.NET DataSet