다음 소스 코드에 문제가 있습니다. "Simple"클래스를 비 정렬 화 한 후 "content"태그에서 생성 된 속성 "content"는 null입니다. 내 말은 "content"속성이 xml에서 "123456"값을 얻지 못함을 의미합니다.
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Simple", propOrder = {
"content"})
public class Simple extends Valor{
@XmlElements({
@XmlElement(name="content",type=String.class),
@XmlElement(name="content",type=Integer.class),
})
protected Object content;
//getters y setters
}
file.xml
<simple>
<content>
123456
<content>
</simple>
용맹 클래스
@XmlSeeAlso({
Varios.class,
Simple.class,
Grilla.class
})
@XmlTransient
public abstract class Valor {
public abstract String getValorString();
}
이견있는 사람? 미리 감사드립니다!
내가 겪고있는 문제에 대한 명확성을 추가합니다. Simple 클래스를 넣으면 :
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Simple", propOrder = {
"content"})
public class Simple extends Valor{
@XmlElements({
@XmlElement(name="content",type=String.class),
@XmlElement(name="content",type=Integer.class),
})
protected Object content;
//getters y setters
}
xml이 다음과 같은 경우 :
<simple>
<content>
123456
</content>
</simple>
출력은 다음과 같습니다.
123456
그러나 xml이 다음과 같은 경우 :
<simple>
<content>
Hi!!
</content>
</simple>
출력은 다음과 같습니다.
null
이제 Simple 클래스 인 경우 다음 코드와 같이 XmlElements를 교환합니다.
@XmlElements({
@XmlElement(name="content",type=Integer.class),
@XmlElement(name="content",type=String.class)
})
protected Object content;
xml이 다음과 같은 경우 :
<simple>
<content>
123456
</content>
</simple>
출력은 다음과 같습니다.
null
그러나 xml이 다음과 같은 경우 :
<simple>
<content>
Hi!!
</content>
</simple>
출력은 다음과 같습니다.
Hi!!
나는 당신이보고있는 것을 재현 할 수 없었습니다. 아래는 내가 시도한 것입니다.
단순한
다음은 Simple
수업을 위해 구현 한 것 입니다.
import javax.xml.bind.annotation.*;
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Simple", propOrder = {
"content"})
public class Simple extends Valor{
@XmlElements({
@XmlElement(name="content",type=String.class),
@XmlElement(name="content",type=Integer.class),
})
protected Object content;
public Object getContent() {
return content;
}
@Override
public String getValorString() {
throw new UnsupportedOperationException();
}
public void setContent(Object content) {
this.content = content;
}
}
input.xml
다음은 content
수정을 위한 닫기 태그가있는 입력 문서입니다 .
<simple>
<content>
123456
</content>
</simple>
데모
import javax.xml.bind.*;
import javax.xml.transform.stream.StreamSource;
public class Demo {
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance(Simple.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
StreamSource source = new StreamSource("src/forum22911170/input.xml");
Simple simple = unmarshaller.unmarshal(source, Simple.class).getValue();
System.out.println(simple.getContent());
}
}
산출
다음은 데모 코드를 실행 한 결과입니다.
123456
최신 정보
문제는 @XmlElements
주석에 동일한 요소에 매핑 된 두 옵션이 있다는 것 content
입니다. 비 정렬 화의 경우 JAXB는 @XmlElement
해당 이름 의 첫 번째 요소를 기반으로 요소를 처리합니다 . 아래의 경우 항상으로 처리하고 항상으로 처리 String
하는 순서를 반대로합니다 Integer
.
@XmlElements({
@XmlElement(name="content",type=String.class),
@XmlElement(name="content",type=Integer.class),
})
protected Object content;
적절한 사용법은 다음과 같은 다른 요소에 매핑하는 것입니다.
@XmlElements({
@XmlElement(name="FOO",type=String.class),
@XmlElement(name="BAR",type=Integer.class),
})
protected Object content;
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다