Парсинг DataSet.NET, возвращенного из веб-сервиса.NET в Java

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

Моя проблема состоит в том, что несмотря на это не являющееся методическими рекомендациями, я застреваю с необходимостью использовать веб-сервис, возвращая 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 легко? Что сделали другие люди, у кого могут быть аналогичные ситуации?

17
задан Chris Dail 19 April 2010 в 13:17
поделиться

3 ответа

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

9
ответ дан 30 November 2019 в 14:25
поделиться

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

3
ответ дан 30 November 2019 в 14:25
поделиться

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

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

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

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

1
ответ дан 30 November 2019 в 14:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: