JAXB: Каков наилучший способ написать метод, который анализирует дату различных форматов из файла XML - PullRequest
1 голос
/ 16 апреля 2020

Таким образом, есть способ проанализировать дату с XML с помощью XmlAdapter. @XmlJavaTypeAdapter(DateAdapter.class). Но, насколько я знаю, это позволяет анализировать дату в жестко заданном формате. Есть ли способ передать желаемый формат даты во время выполнения на адаптер? Или любой другой способ разбора Даты разных форматов от XML.

1 Ответ

2 голосов
/ 16 апреля 2020

Обычно, когда вы объявляете XmlAdapter с @XmlJavaTypeAdapter, JAXB создает экземпляр этого адаптера, используя пустой конструктор, чтобы использовать его во время операций маршала или демаршалла.

Но Unmarshaller и * Интерфейсы 1006 * имеют метод для предоставления экземпляра адаптера.

Вы можете предоставить альтернативный конструктор для вашего DateAdapter с параметром для формата, который вы хотите использовать, а также объявить DEFAULT_FORMAT. Примерно так:

private String format;

public DateAdapter() {
    this(DEFAULT_FORMAT);
}

public DateAdapter(String format) {
    this.format = format;
}

А когда вам нужно разобрать:

Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
unmarshaller.setAdapter(DateAdapter.class, new DateAdapter(someFormat));
Object o1 = unmarshaller.unmarshal(....);

unmarshaller.setAdapter(DateAdapter.class, new DateAdapter(otherFormat));
Object o2 = unmarshaller.unmarshal(....);
...