import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import java.io.IOException;
import java.io.StringWriter;
/*
Первая сериализация в XML
*/
public class Solution {
public static void main(String[] args) throws IOException, JAXBException {
Cat cat = new Cat();
cat.name = "Murka";
cat.age = 5;
cat.weight = 3;
Dog dog = new Dog();
dog.name = "Killer";
dog.age = 8;
dog.owner = "Bill Jeferson";
StringWriter writer = new StringWriter();
convertToXml(writer, cat);
convertToXml(writer, dog);
System.out.println(writer.toString());
/* expected output
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<cat>
<name>Murka</name>
<age>5</age>
<weight>3</weight>
</cat>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<dog>
<name>Killer</name>
<age>8</age>
<owner>Bill Jeferson</owner>
</dog>
*/
}
public static void convertToXml(StringWriter writer, Object obj) throws IOException, JAXBException {
JAXBContext context = JAXBContext.newInstance(obj.getClass());
Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
marshaller.marshal(obj, writer);
}
public static class Pet {
public String name;
}
public static class Cat extends Pet {
public int age;
public int weight;
}
public static class Dog extends Pet {
public int age;
public String owner;
}
}Vadimayer
40 уровень
Caused by: com.sun.istack.SAXException2: unable to marshal type "com.javarush.task.task33.task3306.Solution$Cat" as an element because it is missing an @XmlRootElement annotation
Решен
Комментарии (4)
- популярные
- новые
- старые
Для того, чтобы оставить комментарий Вы должны авторизоваться
Anonymous #2657852
24 ноября 2021, 03:00
У меня еще два импорта есть
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
Плюс код
@XmlType(name = "cat")
@XmlRootElement
public static class Cat extends Pet {
public int age;
public int weight;
}
@XmlType(name = "dog")
@XmlRootElement
public static class Dog extends Pet {
public int age;
public String owner;
0
Vadimayer
24 ноября 2021, 08:34
то что это нужно для решения задачи - это понятно, не компилируется сам код, вылетает Эксепшн
0
Anonymous #2657852
24 ноября 2021, 09:41
А точно перед классом аннотация стоит?
Без нее у меня точно такой же эксепшен.
0
Vadimayer
24 ноября 2021, 13:32решение
решил, ответ здесь ссылка
+2