JAXB 마샬링 및 언 마샬 작업을하고 있습니다. 나는 2 개의 @XmlRootElement
을 위해 동일한 이름 (Person.ELEMENT_NAME)을 사용해야하는 다음과 같은 시나리오를 가지고있다.JAXB에서 여러 클래스에 대해 동일한 요소 이름을 사용할 수 있습니까?
<human>
<type>Human Being</type>
<person type="ReceiverPerson">
<name>John</name>
<title>Professor</title>
<gender>Male</gender>
</person>
<person type="SenderPerson">
<name>Marry</name>
<title>Lecturer</title>
<age>23</age>
</person>
<anything>I am unknown to the xml</anything>
</human>
내가 무슨 일인지 모르겠다하지만 난 출력 다음 얻을 :
Marshalling by creating a Human object
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<human>
<type>Human</type>
</human>
Marshalling from my own xml
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<human>
<type>Human</type>
</human>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<human>
<person>
<name>Marry</name>
<title>Lecturer</title>
</person>
<type>Human Being</type>
<anything>I am unknown to the xml</anything>
</human>
죄송 큰 예제
@XmlRootElement
@XmlAccessorType(XmlAccessType.NONE)
public class Person{
public final static String ELEMENT_NAME = "person";
@XmlElement
private String name;
@XmlElement
private String title;
//Getter Setter
}
@XmlRootElement(name = Person.ELEMENT_NAME)
public class ReceiverPerson extends Person {
@XmlElement
private String gender;
//Getter Setter
}
@XmlRootElement(name = Person.ELEMENT_NAME)
public class SenderPerson extends Person {
@XmlElement
private String age;
//Getter Setter
}
@XmlRootElement
@XmlAccessorType(XmlAccessType.NONE)
public class Human {
@XmlElement(name = Person.ELEMENT_NAME , type = ReceiverPerson.class)
private ReceiverPerson rP;
@XmlElement(name = Person.ELEMENT_NAME , type= SenderPerson.class)
private SenderPerson sP;
@XmlElement
private String type;
@XmlAnyElement
private List<Object> unknown;
//Getter Setter
}
public class Test{
public static void main(String[] args){
StringWriter sw = new StringWriter();
JAXBContext jc = JAXBContext.newInstance(Human.class);
Marshaller marshaller = jc.createMarshaller();
Unmarshaller unmarshaller = jc.createUnmarshaller();
Human human2,human1;
String humans = "This xml is writtem after my code , because its too big";
human1 = new Human();
human1.setType("Human");
SenderPerson sp = new SenderPerson();
sp.setAge("23");
sp.setName("Marry");
sp.setTitle("Lecturer");
ReceiverPerson rP = new ReceiverPerson();
rP.setName("John");
rP.setTitle("Professor");
rP.setGender("Male");
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(human1, sw);
System.out.println("Marshalling by creating a Human object");
System.out.println(sw.toString());
human2 = (Human) unmarshaller.unmarshal(new StringReader(sw.toString()));
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(human2, sw);
System.out.println("Marshalling from my own xml");
System.out.println(sw.toString());
}
}
테스트 클래스의 문자열 인간
는 XML을 다음있다 내 질문은 다음과 같습니다.첫 출력물에 사람이 누락 된 이유는 무엇입니까?
왜 두 번째 출력에
age
이 누락 되었습니까?두 번째 출력이 ReceiverElement의 전체 사람에게 누락 된 이유는 무엇입니까 (John에 대한 설명)?
왜 내 두 번째 출력에 두 개의
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
이 있습니까?또는 다른 방법을 사용하여 xml에
<person type="ReceiverPerson">
과 같은 것을 사용할 수 있습니까?(생성 된 XML 후 원수 비 정렬 화) 마지막 단락의 출력은 적절한 출력을 제공하지 않으며, 출력 같다 : 어떤 이유
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <human> <person> <name>Marry</name> <title>Lecturer</title> </person> <type>Human</type> </human>
인격 서브 클래스가 아닌 생성됩니다. 어떤 아이디어라도 제발? 왜 첫번째 출력은 사람이 없습니다 -이어야이 긴 질문
안녕 블 레즈를, 정말 감사합니다. 제 질문을 조금 편집 했어요. 좀 봐 주시겠습니까? – web2dev