Java 使用Jaxb2解组复杂类型

Java 使用Jaxb2解组复杂类型,java,xml,jaxb,unmarshalling,jaxb2,Java,Xml,Jaxb,Unmarshalling,Jaxb2,嗨,我有以下XML和java类,当我使用Spring OXM框架使用JAXB2处理器解组时,我得到了所有空值。有什么想法吗 import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement(name="AuthentXML",namespace="http://xml.authentify.net/MessageSchema.xml") pu

嗨,我有以下XML和java类,当我使用Spring OXM框架使用JAXB2处理器解组时,我得到了所有空值。有什么想法吗

import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name="AuthentXML",namespace="http://xml.authentify.net/MessageSchema.xml")
public class AuthentifyResult { 
    private Header header;
    public Header getHeader() {
        return header;
    }
    public void setHeader(Header header) {
        this.header = header;
    }
}

@XmlType(name="", propOrder={"asid", "teid", "replyTo"}) 
public class Header {
 private String asid;

private String teid;

private String replyTo;
public String getAsid() {
 return asid;
}
public void setAsid(String asid) {
this.asid = asid;
}
public String getTeid() {
return teid;
}
public void setTeid(String teid) {
this.teid = teid;
}
public String getReplyTo() {
return replyTo;
}
public void setReplyTo(String replyTo) {
this.replyTo = replyTo;
}
}

<?xml version="1.0" ?>
<AuthentXML>
<header>
<asid>AuthenticationSubjectID</asid>
<teid>B6F997AE-FB4E-11D3-80BD-0050DA5DC7B8</teid>
<replyTo>https://r1.authentify.net/s2s/default.asp</replyTo>
</header>
</AuthentXML>

unmarshaling code

FileInputStream is = null;

is = new FileInputStream(FILE_NAME);
this.authentifyResult = (AuthentifyResult) this.jaxbUnmarshaller.unmarshal(new StreamSource(is));
import javax.xml.bind.annotation.xmlement;
导入javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement(name=“AuthentXML”,命名空间=”http://xml.authentify.net/MessageSchema.xml")
公共类AuthentifyResult{
私有报头;
公共头getHeader(){
返回头;
}
公共无效集合标头(标头){
this.header=头;
}
}
@XmlType(name=,proporter={“asid”,“teid”,“replyTo”})
公共类标题{
专用字符串asid;
私有字符串teid;
私有字符串replyTo;
公共字符串getAsid(){
返回asid;
}
公共无效设置asid(字符串asid){
this.asid=asid;
}
公共字符串getTeid(){
返回teid;
}
公共无效设置ID(字符串teid){
this.teid=teid;
}
公共字符串getReplyTo(){
返回replyTo;
}
公共void setReplyTo(字符串replyTo){
this.replyTo=replyTo;
}
}
认证主体
B6F997AE-FB4E-11D3-80BD-0050DA5DC7B8
https://r1.authentify.net/s2s/default.asp
解组码
FileInputStream为空;
is=新文件输入流(文件名);
this.authentifyResult=(authentifyResult)this.jaxbUnmarshaller.unmarshal(新StreamSource(is));

我在authentifyResult中接收到的标头为null。为什么?

我认为您的代码唯一的错误是,
AuthentifyResult
上的
@XmlRootElement
注释不应该指定名称空间,因为您发布的XML片段不是名称空间限定的:

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement(name="AuthentXML")
public class AuthentifyResult { 
    private Header header;
    public Header getHeader() {
        return header;
    }
    public void setHeader(Header header) {
        this.header = header;
    }
}