解析从Java Web服务返回的.NET DataSet

Chr*_*ail 17 .net java interop web-services 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;
Run Code Online (Sandbox Code Playgroud)

第一个字段是应该描述DataSet的实际模式.当我使用Java中的JAX-WS和JAXB处理它时,它将所有XS-Schema作为Java对象引入,以便在此处表示.走JAXB的对象树是可能的,但不是很漂亮.any字段表示由架构指定的架构中的DataSet的原始XML.

数据集的结构非常一致,但数据类型确实发生了变化.我需要访问类型信息,架构因呼叫而异.我虽然有一些选择,但似乎没有"好"的选择.

  • 尝试在运行时使用JAXB从模式生成Java对象似乎是个坏主意.这将太慢,因为它需要每次都发生.
  • 暴力使用JAX-WS引入的JAXB对象遍历模式树.
  • 也许不是使用JAXB来解析模式,而是更容易将其作为XML处理并使用XPath来尝试查找我需要的类型信息.

还有其他我没考虑过的选择吗?是否有一个Java库可以轻松解析DataSet对象?其他人可能有类似情况做了什么?

Doo*_*obi 9

不幸的是,我不认为这里有一个简单的答案.我要做的是在.NET中创建一个代理Web服务,您可以从Java调用它将接收数据集,将其转换为更易消耗的内容,然后将其返回到Java代码.