代码之家  ›  专栏  ›  技术社区  ›  Chris Dail

解析.NET中Web服务返回的.NET数据集

  •  17
  • Chris Dail  · 技术社区  · 14 年前

    我必须从Java应用程序中消费.NET托管的Web服务。两者之间的互操作性通常非常好。我遇到的问题是.NET应用程序开发人员选择使用.NET数据集对象公开数据。关于为什么不应该这样做以及它如何使互操作性变得困难,有很多文章都是这样写的:

    我的问题是,尽管这不是推荐的做法,但我不得不消耗一个Web服务返回一个数据集与Java。当您用.NET以外的任何东西为类似的东西生成代理时,最终得到的对象基本上是这样的:

        @XmlElement(namespace = "http://www.w3.org/2001/XMLSchema", required = true)
        protected Schema schema;
        @XmlAnyElement(lax = true)
        protected Object any;
    

    第一个字段是应该描述数据集的实际模式。当我在Java中使用JAX-WS和JAXB来处理这个问题时,它将所有的XS模式引入到Java对象中来表示。行走JAXB的对象树是可能的,但并不漂亮。any字段表示该架构指定的架构中的数据集的原始XML。

    数据集的结构非常一致,但数据类型确实发生了变化。我需要访问类型信息,并且模式因调用而异。我有一些选择,但没有一个看起来像是“好”的选择。

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

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

    3 回复  |  直到 11 年前
        1
  •  9
  •   Doobi    14 年前

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

        2
  •  3
  •   zumalifeguard Arctic    14 年前

    您的Java应用程序在服务器上运行吗?如果是这样,在服务器上安装MNO,并使用ADO.NET构建到MUNO中,以将数据集转换成Java可以理解的内容。其优点是数据集的所有解释都是在Mono中为您完成的。甚至可以使用IKVM来保留Java语言世界。总之,在MMOO世界中,您可以有一个本地服务,它可以进行转换,或者简单地有一个实用程序,它可以用Java可以理解的格式将数据集转换成文件系统。

        3
  •  1
  •   Thorbjørn Ravn Andersen    14 年前

    您是否考虑在返回的原始XML上使用XSLT,以便将其转换为更容易处理的内容?

    我用这种方法将一个复杂的返回值转换成类似于

    <ops>
      <set name="foo" value="bar"/>
      <set name="foo2" value="bar2" />
      ....
     </ops>
    

    这将逻辑转换成一种非常适合于处理XML的语言,而不是在Java中对其进行手工编码。