0
Root 요소에 대한 비 정렬 화 결과가 잘못되었습니다. 키를 속성으로 사용하기위한 자체 서브 클래스에 대한 참조를 포함하며 다른 서브 클래스에 대한 참조를가집니다. 저는 MOXy 버전 2.7.0과 jdk8u45를 사용하고 있습니다.서브 클래스로 비 정렬 화 결과가 잘못됨
나는이 같은 루트 요소를 만들 : 잘못된 개체에서이 XML 결과 비 정렬 화
<root name="rootKey"><sub name="subKey"/></root>
:
Root root = new Root("rootKey", "subKey");
마샬링 올바른 XML 출력에 결과를. 결과 객체에는 두 키 이름 모두에 대해 "subKey"가 있습니다. 설치가 잘못되었거나 버그입니까?
는 루트 클래스는 다음과 같습니다
이@XmlRootElement(name = "root")
public class Root {
@XmlPath(".")
private final Root.Key key;
@XmlElement(name = "sub")
private final Sub.Key subKey;
public Root(String name, String subName) {
this.key = new Root.Key(name);
this.subKey = new Sub.Key(subName);
}
private Root() {
this(null, null);
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((key == null) ? 0 : key.hashCode());
result = prime * result + ((subKey == null) ? 0 : subKey.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (obj != null && obj.getClass().equals(this.getClass())) {
Root o = (Root)obj;
return key.equals(o.key) && subKey.equals(o.subKey);
}
return false;
}
@Override
public String toString() {
return "Root [key=" + key + ", subKey=" + subKey + "]";
}
@XmlType(name = "Root.Key")
@XmlRootElement
public static final class Key {
@XmlAttribute
private final String name;
public Key(String name) {
this.name = name;
}
private Key() {
// Constructor for JAXB
this(null);
}
public String getName() {
return name;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (obj != null && obj.getClass().equals(this.getClass())) {
Key o = (Key)obj;
return name.equals(o.name);
}
return false;
}
@Override
public String toString() {
return "Key [name=" + name + "]";
}
}
}
소위원회 클래스는 다음과 같습니다
@XmlRootElement(name = "sub")
public class Sub {
@XmlType(name = "Sub.Key")
@XmlRootElement
public static final class Key {
@XmlAttribute
private final String name;
public Key(String name) {
this.name = name;
}
private Key() {
// Constructor for JAXB
this(null);
}
public String getName() {
return name;
}
@Override
public int hashCode() {
final int prime = 31;
int result = 1;
result = prime * result + ((name == null) ? 0 : name.hashCode());
return result;
}
@Override
public boolean equals(Object obj) {
if (obj != null && obj.getClass().equals(this.getClass())) {
Key o = (Key)obj;
return name.equals(o.name);
}
return false;
}
@Override
public String toString() {
return "Key [name=" + name + "]";
}
}
}
답변 해 주셔서 감사합니다. 내 실제 구현에서 하위 또한 자체 키에 대한 참조가 있습니다. Sub.name을 XmlValue에서 XmlAttribute로 변경하면 더 이상 사용할 수 없습니다. – Aster
귀하의 의견을 이해할 수 없습니다. 당신은 문법을 바꿀 수 있습니까? 응답 한 지 얼마되지 않았지만 Sub.name에 대한 주석이 변경되지 않았 음을 알았습니다. – mart