У меня есть один Java-бин, уже аннотированный для JPA, который я также хочу сохранить в виде XML, в частности FIXML . Цель состоит в том, чтобы управлять отображением от bean-компонента до XML с помощью аннотаций.
Я вижу похожие темы в Интернете об указании схемы и разрешении JAXB генерировать классы, но я не хочу этого делать.
Я смотрел на использование аннотаций JAXB, но, похоже, мне нужно создать новые классы для каждого дочернего элемента. Я пытаюсь держаться подальше от этого, и пусть аннотации показывают, как создавать дочерние элементы. JAXB, похоже, не хочет этого делать.
Возможно ли это и как? Нужно ли мне делать свои собственные аннотации и забыть о JAXB?
Конкретный пример
Bean:
@Entity
@XmlRootElement(name="FIXML")
@XmlType(name="ExecRpt")
public class ExecutionReport implements Serializable {
private String account;
private String senderCompID;
@Column(name="ACCOUNT", nullable=true, length=64)
@XmlAttribute(name="Acct")
public String getAccount() {
return this.account;
}
public void setAccount(String account) {
this.account = account;
}
@Column(name="SENDER_COMP_ID", nullable=true, length=200)
@XmlAttribute(name="SID")
public String getSenderCompID() {
return this.senderCompID;
}
public void setSenderCompID(String senderCompID) {
this.senderCompID = senderCompID;
}
}
Синтаксический:
JAXBContext context = JAXBContext.newInstance(ExecutionReport.class);
Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); //pretty print XML
marshaller.marshal(executionReport, System.out);
Требуемый результирующий XML:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<FIXML>
<ExecRpt Acct="account_data">
<Hdr SID="sender"/>
</ExecRpt>
</FIXML>
Текущий результирующий XML:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<FIXML Acct="account_data" SID="sender"/>
Очевидно, я пока не предоставляю достаточно информации для сопоставления дочерних элементов, но я также не уверен, как ее предоставить. Я хочу добавить аннотации @XmlElement, но у меня нет дочерних объектов, все данные находятся в этом классе.
Плюс в том, что мой XML не намного сложнее, чем этот пример; Есть только несколько элементов, и они появляются только один раз за сообщение. То, что доставляет мне неприятности, это получение нескольких элементов из одного компонента.