Tengo que consumir un servicio web alojado en .NET desde una aplicación Java. La interoperabilidad entre los dos suele ser muy buena. El problema al que me estoy enfrentando es que el desarrollador de la aplicación .NET eligió exponer datos usando el objeto .NET DataSet. Hay un montón de artículos escritos por qué usted no debe hacer esto y cómo se hace la interoperabilidad difícilAnálisis de un .NET DataSet devuelto de .NET Web Service en Java
- 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
Mi problema es que a pesar de que no es una práctica recomendada, me veo obligado a tener que consumir un servicio web que devuelve un DataSet con Java. Al generar un proxy para algo como esto con distinta .NET que, básicamente, termina con un objeto que tiene este aspecto nada:
@XmlElement(namespace = "http://www.w3.org/2001/XMLSchema", required = true)
protected Schema schema;
@XmlAnyElement(lax = true)
protected Object any;
Este primer campo es el esquema real que debe describir el conjunto de datos. Cuando proceso esto usando JAX-WS y JAXB en Java, traigo todos los XS-Schema como objetos de Java para representarlos aquí. Caminar por el árbol de objetos de JAXB es posible pero no bonito. El campo any representa el XML sin procesar para el DataSet que está en el esquema especificado por el esquema.
La estructura del conjunto de datos es bastante uniforme, pero los tipos de datos cambian. Necesito acceso a la información de tipo y el esquema varía de llamada a llamada. He pensado en algunas opciones, pero ninguna parece ser una buena opción.
- Intentar generar objetos Java a partir del esquema utilizando JAXB en tiempo de ejecución parece ser una mala idea. Esto sería demasiado lento, ya que tendría que suceder siempre.
- fuerza bruta recorrer el árbol del esquema mediante el JAXB objetos que JAX-WS trajo.
- Tal vez en lugar de utilizar JAXB para analizar el esquema que sería más fácil tratar con él como XML y utilizar XPath para tratar de encontrar la escriba la información que necesito.
¿Hay otras opciones que no he considerado? ¿Hay una biblioteca Java para analizar los objetos DataSet fácilmente? ¿Qué han hecho otras personas que pueden tener situaciones similares?
Por favor, hágamelo saber si alguno de ustedes trató prácticamente, –