Как сериализовать / десериализовать класс в XML с помощью Woodstox StAX 2 - PullRequest
4 голосов
/ 18 ноября 2010

Я в значительной степени пытаюсь заархивировать, что было сделано в как сериализовать-десериализовать-простые-классы-в-xml-и-обратно (C #) в Java.Если возможно, я бы хотел избежать написания методов сериализации / десериализации для каждого класса.

Например, часть сериализации:

    XMLOutputFactory xof = null;
    XMLStreamWriter2 writer = null;

    try {
        resp.setContentType("text/plain");
        xof = XMLOutputFactory.newInstance();
        writer = (XMLStreamWriter2) //
        xof.createXMLStreamWriter(resp.getOutputStream());

        writer.writeStartDocument("1.0");
        writer.writeStartElement("data");
        // 
        // Magic happens here.
        //
        writer.writeEndElement();
        writer.writeEndDocument();
    } catch (XMLStreamException e) {
        e.printStackTrace();
        resp.sendError(1, "Problem 1 occured.");
    } finally {
        try {
            writer.flush();
            writer.close();
        } catch (XMLStreamException e) {
            e.printStackTrace();
            resp.sendError(2, "Problem 2 occured.");
        }
    }

Не являюсь частью этого вопроса, так как япытаясь решить проблемы 1 на 1, но может дать вам представление о том, что я пытаюсь сделать.Когда я десериализуюсь, я также хотел бы проверить правильность ввода.В конце концов я хочу использовать XSLT-преобразования с сериализованной формой.

Ответы [ 2 ]

4 голосов
/ 18 ноября 2010

JAXB - это способ сериализации объектов Java в XML.Следующее поможет вам начать:

Реализации JAXB

Существует несколько реализаций этого стандарта:

  • EclipseLink MOXy (я технический руководитель)
  • Metro (эталонная реализация, включенная в Java SE 6)
  • JaxMe

Woodstox StAX 2

JAXB поддерживает множество форматов ввода / вывода, включая StAX.

Проверка

XML преобразуется в объекты с использованием Unmarshaller, а объекты преобразуются в XML с помощью Marshaller.Вы можете установить экземпляр javax.xml.validation.Schema для проверки ввода во время этих операций.

Вы также можете напрямую использовать API javax.xml.validation с JAXB, посмотрите следующее для примера:

XSLT

Файл javax.xml.библиотеки преобразований используются в Java для выполнения преобразований XSLT.JAXB предназначен для работы с этими библиотеками с использованием JAXBSource и JAXBResult.

Для получения дополнительной информации

Посетите мой блог:

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

В дополнение к исчерпывающему принятому ответу стоит отметить, что Woodstox (или любая реализация Stax2) может фактически проверять как ввод, так и вывод; см. эту запись в блоге для примера кода. Одним из преимуществ является то, что вы также можете проверить соответствие с Relax NG (не поддерживается AFAIK анализатором JAXP, который JAXB использует по умолчанию) или DTD.

Также: есть новый проект под названием Jackson-xml-databinder (дополнительный процессор JSON от Jackson), который реализует "mini-JAXB" (подмножество полной функциональности JAXB) с использованием анализатора Stax2 (например, Вудстокс или Аалто). Основными преимуществами являются немного более мощная часть связывания данных и даже лучшая производительность, чем у реализаций JAXB; недостаток в том, что он не настолько зрелый и не поддерживает все специфические аспекты XML. Это, вероятно, наиболее полезно в тех случаях, когда поддерживаются форматы JSON и XML.

...