Как Настроить Маршалинг JAXB при генерации бобов JAXB от XML

Я хочу настроить маршалинг дат в 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 {
            @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;

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

Любая справка ценится.

Спасибо,

Charles

6
задан Community 23 May 2017 в 11:53
поделиться

1 ответ

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

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

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

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

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

http://jaxb.java.net/tutorial/section_5_6_1-Overriding -the-Datatype.html # Переопределение% 20the% 20Datatype

2
ответ дан 17 December 2019 в 20:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: