我必须从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