Подтвердить что ты не робот

Есть ли 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 может читать эти аннотации и создавать 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()
      })
    }
  ]
});

И это должно быть достаточно, чтобы создать unmarshaller или marshaller.

4b9b3361

Ответ 1

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

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

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

Ответ 3

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

Ответ 4

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

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