Ответ 1
Как насчет поддержки JSON для JAXB? Повторно используйте текущие классы аннотированных классов JAXB, но выведите JSON из конечных точек REST.
Текущие версии Jersey поддерживают это (через jersey- json) с JSONJAXBContext.
В 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.
Как насчет поддержки JSON для JAXB? Повторно используйте текущие классы аннотированных классов JAXB, но выведите JSON из конечных точек REST.
Текущие версии Jersey поддерживают это (через jersey- json) с JSONJAXBContext.
На сегодняшний день я не нашел ничего похожего на то, что мне нужно. Поэтому я решил реализовать его сам. Здесь страница проекта:
http://confluence.highsource.org/display/MISC/Jsonix
Проект размещен на GitHub:
Я не пробовал это, поэтому я не уверен, что это сработает, но подумали ли вы об использовании GWT, чтобы вы все еще могли использовать JAXB и написать все приложение в качестве приложения java? Я не уверен, поддерживает ли GWT JAXB (возможно, нет), но может быть альтернатива синтаксическому анализу xml, который он будет поддерживать. Если это сработает, вы можете автоматизировать создание ваших моделей javascript через gwt, а затем включить их в свое приложение. Да, это намного круче, чем вы хотите, но бьет, чтобы написать его с нуля.
Что вы можете сделать, это добавить общее определение таблиц стилей: XSLT для вашего XML, чтобы преобразовать их в JSON. например: http://code.google.com/p/xml2json-xslt/
Обработка XML с помощью Javascript - это боль по сравнению с JSON, особенно с перекрестным браузером.
Таблица стилей добавит небольшие накладные расходы к вашему запросу. Либо на стороне сервера, либо на стороне клиента вы можете выбрать, но вам нужно сравнить это с сложностью кода и скоростью, чтобы анализировать и читать XML с помощью Javascript в разных браузерах.