Анализ .NET DataSet, возвращенного из .NET Web Service в Java - PullRequest
17 голосов
/ 19 апреля 2010

Мне нужно использовать веб-сервис .NET из приложения Java.Совместимость между ними обычно очень хорошая.Проблема, с которой я сталкиваюсь, заключается в том, что разработчик приложений .NET решил предоставлять данные с помощью объекта .NET DataSet.Есть много статей, написанных о том, почему вы не должны делать это и как это затрудняет взаимодействие:

Моя проблема в том, что, несмотря на то, что это не рекомендуемая практика, я застрял с необходимостью использовать веб-сервис, возвращающий DataSet с Java.Когда вы генерируете прокси-сервер для чего-то подобного с чем-то отличным от .NET, вы в основном получаете объект, который выглядит следующим образом:

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

Это первое поле представляет собой фактическую схему, которая должна описывать DataSet.Когда я обрабатываю это, используя JAX-WS и JAXB в Java, он представляет всю XS-схему как объекты Java, которые будут представлены здесь.Ходить по дереву объектов JAXB возможно, но не красиво.Любое поле представляет необработанный XML для DataSet, который находится в схеме, указанной схемой.

Структура набора данных довольно непротиворечива, но типы данных меняются.Мне нужен доступ к информации о типе, и схема меняется от звонка к звонку.У меня есть несколько вариантов, но ни один из них не кажется «хорошим».

  • Попытка генерировать объекты Java из схемы с использованием JAXB во время выполнения кажется плохой идеей.Это будет слишком медленно, так как это должно происходить каждый раз.
  • Грубое форсирование обхода дерева схемы с использованием объектов JAXB, которые принес JAX-WS.
  • Возможно, вместо использования JAXB для анализаСхему было бы проще использовать в качестве XML и использовать XPath, чтобы попытаться найти нужную мне информацию о типе.

Существуют ли другие варианты, которые я не рассматривал?Существует ли библиотека Java для простого анализа объектов DataSet?Что сделали другие люди, у которых могут быть подобные ситуации?

Ответы [ 3 ]

9 голосов
/ 25 апреля 2010

К сожалению, я не думаю, что здесь есть простой ответ. Я хотел бы создать в .NET веб-службу Proxy, которую вы могли бы вызывать из Java, которая получала бы набор данных, преобразовывал его в нечто более потребляемое и затем возвращал его в свой код Java.

3 голосов
/ 25 апреля 2010

Ваше приложение Java работает на сервере? Если это так, установите Mono на сервере и используйте встроенный в Mono ADO.NET для преобразования набора данных в то, что может понять Java. Преимущество состоит в том, что вся интерпретация набора данных выполняется для вас в моно. Вы даже можете использовать IKVM, чтобы остаться в мире языков Java. В любом случае, в мире Mono вы можете иметь локальный сервис, который может выполнять преобразование, или просто иметь утилиту, которая преобразует набор данных в файловую систему в формате, понятном Java.

1 голос
/ 29 апреля 2010

Рассматривали ли вы использование XSLT в необработанном XML-файле, возвращаемом для его преобразования в нечто, с чем вам легче справиться?

Я использовал этот подход для преобразования сложного возвращаемого значения во что-то похожее на

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

Это переводит логику в язык, который хорошо подходит для обработки XML вместо ручного кодирования в Java.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...