Есть ли JavaScript API для привязки XML - аналог JAXB для Java?

В Java мы много работаем с JAXB2. Отображения Object <-> XML определяются как аннотации в классах Java:

@XmlRootElement(name="usertask", namespace="urn:test")
public class UserTask
{
    @XmlElement(namespace="urn:test")
    public String getAssignee() { ... }

    public void setAssignee(String assignee) { ... }
}

Среда выполнения JAXB может читать эти аннотации и создавать демаршаллер для синтаксического анализа XML в экземпляр объекта или маршалинга объект в XML.

JAXB предоставляет компилятор схемы (XJC), который может генерировать аннотированные классы из XML-схем, что является еще одной замечательной функцией.


В последнее время мы много работали с клиентским JavaScript. там также требуется обработка XML. Например, нам нужно проанализировать документы WPS, такие как этот . Эти документы также соответствуют различным схемам XML (здесь схема WPS 1.0.0 для образца XML).Было бы здорово работать с объектами JavaScript вместо XML, это экономит действительно огромное количество усилий. В некоторых случаях мы можем использовать решения на основе JSON, такие как DWR , но во многих случаях нам нужно обрабатывать XML на стороне клиента.

Мой вопрос:

Есть ли какой-нибудь аналог JAXB для JavaScript?

Какой-нибудь инструмент, который компилирует XML-схему в некое отображение объектов XML <-> и предоставляет среду выполнения для преобразования между объектами XML и JavaScript?

Я мог легко представить себе сопоставления, сгенерированные в такой форме:

UserTask = new JSXML.XmlRootElement({
  name: "usertask",
  namespace: "urn:test",
  properties: [
    {
      assignee: new JSXML.XmlElement({
        name: "assignee",
        namespace: "urn:test",
        type: new JSXML.XSD.String()
      })
    }
  ]
});

И этого должно быть достаточно, чтобы построить демаршаллер или маршаллер.

17
задан lexicore 29 April 2011 в 12:19
поделиться

4 ответа

Как насчет поддержки JSON для JAXB? Повторно используйте ваши текущие аннотированные классы модели JAXB, но выводите JSON из ваших конечных точек REST.

Текущие версии Джерси поддерживают это (через модуль jersey-json ) с JSONJAXBContext .

Вы также можете попробовать поддержку JAXB и JAX-RS Джексона .

0
ответ дан 30 November 2019 в 12:19
поделиться

На сегодняшний день я не нашел ничего похожего на то, что мне нужно. Поэтому я решил реализовать это сам. Вот страница проекта:

http://confluence.highsource.org/display/MISC/Jsonix

Проект размещен на GitHub:

https://github.com/highsource/jsonix/

27
ответ дан 30 November 2019 в 12:19
поделиться

Я не пробовал это, так что я не уверен, будет ли это работать, но рассматривали ли вы вопрос об использовании GWT, чтобы вы все еще могли использовать JAXB и написать все приложение как приложение Java? Я не уверен, поддерживает ли GWT JAXB (возможно, нет), но может быть альтернатива для анализа XML, которую он будет поддерживать. Если это работает, вы можете автоматизировать создание своих моделей javascript через gwt, а затем включить их в свое приложение. Да, это намного бесполезнее, чем вы хотите, но лучше, чем писать с нуля.

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

Что вы можете сделать, это добавить общее определение таблицы стилей: XSLT к вашему XML, чтобы преобразовать их в JSON. Например: http://code.google.com/p/xml2json-xslt/

Работа с XML с помощью Javascript - это трудная задача по сравнению с JSON, особенно в кросс-браузерной.
Таблица стилей добавит небольшие накладные расходы к вашему запросу. Вы можете выбрать либо на стороне сервера, либо на стороне клиента, но вы должны сравнить это со сложностью и скоростью кода, чтобы анализировать и читать XML с помощью Javascript в разных браузерах.

2
ответ дан 30 November 2019 в 12:19
поделиться
Другие вопросы по тегам:

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