我必须从.NET应用程序中使用Java托管的web服务。两者之间的互操作性通常非常好。我遇到的问题是,.NET应用程序开发人员选择使用.NET DataSet对象公开数据。有很多文章写了为什么你不应该这样做,以及它如何使互操作性变得困难:
我的问题是,尽管这不是推荐的做法,但我不得不使用返回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库可以方便地解析DataSet对象?其他可能有类似情况的人做过什么?
发布于 2010-04-25 07:11:48
不幸的是,我不认为这里有一个简单的答案。我要做的是在.NET中创建一个代理web服务,您可以从Java中调用它来接收数据集,将其转换为更易用的东西,然后将其返回给您的Java代码。
发布于 2010-04-25 08:20:58
您的Java应用程序是否在服务器上运行?如果是这样的话,在服务器上安装Mono,并使用内置到Mono中的ADO.NET将数据集转换为ADO.NET可以理解的东西。优点是所有数据集的解释都是在Mono中完成的。您甚至可以使用IKVM停留在Java语言世界中。无论如何,在Mono世界中,您可以有一个本地服务来执行转换,或者简单地使用一个实用程序将数据集转换为Java可以理解的格式的文件系统。
发布于 2010-04-29 22:09:52
您是否考虑过对返回的原始XML使用XSLT,以便将其转换为更容易处理的内容?
我使用这种方法将复杂的返回值转换为类似于
<ops>
<set name="foo" value="bar"/>
<set name="foo2" value="bar2" />
....
</ops>
这将把逻辑转换成一种非常适合处理XML的语言,而不是用Java手工编码。
https://stackoverflow.com/questions/2667646
复制相似问题