Как настроить JAXB Marshalling, если генерируете компоненты JAXB из XML - PullRequest
6 голосов
/ 15 марта 2010

Я хочу настроить сортировку дат в JAXB. Это вариант этого уже заданного вопроса . Я думаю, я бы использовал XMLAdapter, так как этот ответ вопросов определяет.

Но я не могу сделать это точно, потому что я иду наоборот, генерируя компоненты JAXB из .XSD - я не могу добавить аннотации к компонентам JAXB, потому что они генерируют код.

Я пытался вызвать Marshaller.setAdapter (), но безуспешно.

            final Marshaller marshaller = getJaxbContext().createMarshaller();
            marshaller.setSchema(kniSchema);
            marshaller.setAdapter(new DateAdapter());
            ...
            private static class DateAdapter extends XmlAdapter<String, XMLGregorianCalendar> {
            @Override
            public String marshal(XMLGregorianCalendar v) throws Exception {
              return "hello"; //Just a test to see if it's working
            }
            @Override
            public XMLGregorianCalendar unmarshal(String v) throws Exception {
              return null; // Don't care about this for now
            }
}

Где соответствующая часть моего сгенерированного JAXB-компонента выглядит так:

    @XmlSchemaType(name = "date")
    protected XMLGregorianCalendar activeSince;

Когда я делаю это, происходит сортировка даты по умолчанию / XMLGregorianCalendar. Как будто я не делал всего этого.

Любая помощь приветствуется.

Спасибо

Charles

1 Ответ

2 голосов
/ 16 марта 2010

Предпочтительный способ изменить тип привязки в сгенерированной XJC Java - использовать настройку привязки.

https://jaxb.dev.java.net/guide/Using_different_datatypes.html

JAXB имеет встроенную таблицу, которая определяет, какие классы Java используются представлять, что встроенная схема XML типы, но это можно настроить.

Один из распространенных вариантов использования настройка заменить XMLGregorianCalendar с более дружелюбный календарь или дата. XMLGregorianCalendar предназначен для 100% совместимость с XML-схемами система даты / времени, такая как предоставление бесконечная точность в секундах и лет, но часто простота использования эти знакомые классы Java побеждают Точная совместимость.

Эта страница не говорит вам, как на самом деле подключить настройки, поэтому посмотрите здесь, чтобы узнать, как это сделать:

http://jaxb.java.net/tutorial/section_5_6_1-Overriding-the-Datatype.html#Overriding%20the%20Datatype

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...