Ответ 1
Испытания
В классе Tests
мы добавим аннотацию @XmlRootElement
. Выполнение этого позволит вашей реализации JAXB знать, что когда документ начинается с этого элемента, он должен создать экземпляр этого класса. JAXB - это конфигурация по исключению, это означает, что вам нужно добавлять примечания, где ваше сопоставление отличается от значения по умолчанию. Поскольку свойство testData
отличается от стандартного отображения, мы будем использовать аннотацию @XmlElement
. Вы можете найти следующее пособие: http://wiki.eclipse.org/EclipseLink/Examples/MOXy/GettingStarted
package forum11221136;
import javax.xml.bind.annotation.*;
@XmlRootElement
public class Tests {
TestData testData;
@XmlElement(name="test-data")
public TestData getTestData() {
return testData;
}
public void setTestData(TestData testData) {
this.testData = testData;
}
}
TestDataSTRONG >
В этом классе я использовал аннотацию @XmlType
, чтобы указать порядок, в котором должны быть упорядочены элементы. Я добавил свойство testData
, которое, как оказалось, отсутствует. Я также использовал аннотацию @XmlElement
по той же причине, что и в классе Tests
.
package forum11221136;
import java.util.List;
import javax.xml.bind.annotation.*;
@XmlType(propOrder={"title", "book", "count", "testData"})
public class TestData {
String title;
String book;
String count;
List<TestData> testData;
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getBook() {
return book;
}
public void setBook(String book) {
this.book = book;
}
public String getCount() {
return count;
}
public void setCount(String count) {
this.count = count;
}
@XmlElement(name="test-data")
public List<TestData> getTestData() {
return testData;
}
public void setTestData(List<TestData> testData) {
this.testData = testData;
}
}
Demo
Ниже приведен пример использования API-интерфейсов JAXB для чтения (без подделки) XML и заполнения вашей модели домена, а затем запись (маршал) результата обратно в XML.
package forum11221136;
import java.io.File;
import javax.xml.bind.*;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(Tests.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
File xml = new File("src/forum11221136/input.xml");
Tests tests = (Tests) unmarshaller.unmarshal(xml);
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(tests, System.out);
}
}