Существует ли JavaScript API для привязки XML - аналог JAXB для Java? - PullRequest
16 голосов
/ 29 сентября 2010

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

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

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

Среда выполнения JAXB может читать эти аннотации и создавать unmarshaller для анализа 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()
      })
    }
  ]
});

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

Ответы [ 4 ]

26 голосов
/ 27 октября 2010

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

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

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

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

3 голосов
/ 29 октября 2010

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

2 голосов
/ 29 сентября 2010

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

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

0 голосов
/ 30 января 2011

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

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

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

...