У нас много дублирования кода в классах держателей данных, которые можно сериализовать в строку XML:
public String toXml() throws JAXBException {
final JAXBContext context = JAXBContext.newInstance(this.getClass());
final Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");
final StringWriter stringWriter = new StringWriter();
marshaller.marshal(this, stringWriter);
return stringWriter.toString();
}
Почему бы не переместить этот код в один интерфейс с реализацией по умолчанию?Так что простого implements ToXmlUtf8
было бы достаточно, чтобы поделиться реализацией по умолчанию и избежать дублирования кода:
public interface ToXml {
default String toXml() throws JAXBException {
final JAXBContext context = JAXBContext.newInstance(this.getClass());
final Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");
final StringWriter stringWriter = new StringWriter();
marshaller.marshal(this, stringWriter);
return stringWriter.toString();
}
}
Кто-нибудь делал это раньше успешно?
Другие решения?
Я мог бы также представить использование аннотации для генерации этого кода.
Есть ли какие-либо готовые решения, доступные?