У меня есть файл WSDL, ссылающийся на файл XSD с элементами типа gYearMonth
. Я не могу его изменить. Я хотел бы использовать JAXB для автоматического создания классов с членами типа YearMonth
библиотеки времени Joda.Трансформировать gYearMonth XSD в YearMonth Джоды
Я видел статью JAXB and Joda-Time: Dates and Times, чтобы быть довольно интересной, но я заинтересован в выполнении этой привязки на лету от WSDL до Java, а не от Java до WSDL.
Я создал свой XmlAdapter
(да, нет колдовство здесь):
import org.joda.time.YearMonth;
public class YearMonthAdapter extends XmlAdapter<String,YearMonth> {
@Override public YearMonth unmarshal(String v) throws Exception {
return new YearMonth(v);
}
@Override public String marshal(YearMonth v) throws Exception {
return v.toString();
}
}
Но где и как зарегистрировать его в моем bindings.xml
так что я получаю YearMonth
, а не XMLGregorianCalendar
при генерации кода?
Спасибо, это работает. + +1. Но для принятого ответа я бы хотел получить ответы на две вещи (они довольно явны в исходном вопросе): 1. Я хочу сделать все 'gYearMonth' Joda' YearMonth', нужно ли перечислять все имена? использование '@ type', похоже, не работает. 2. Я написал свой XmlAdapter без статического метода. Невозможно использовать JAXB, а не заставлять меня создавать статические версии методов и писать имена методов, как правило, что-то вроде '' ? Необязательно, если это адаптировано к globalBindings, а не к базе XSD. –
Используйте 'jaxb: globalBindings' только для определения привязки одного времени. Используйте «xjc: javaType adapter =« your.path.to »для определения самого адаптера, а не статических методов синтаксического анализа и печати. – membersound