XML文件如下:
<AuthnRequest xmlns="A" ID="B">
<Issuer xmlns="A">SOMETHING</Issuer>
<NameIDPolicy Format="B" AllowCreate="true"/>
</AuthnRequest>
那么如何将具有许多属性的文件转换为Javabean?
我这样累了,但没有工作
@XmlRootElement(name="AuthnRequest")
@XmlAccessorType(XmlAccessType.FIELD)
public class UserAuthn {
@XmlAttribute
private String xmlns;
@XmlAttribute
private String ID;
@XmlAttribute
private String Version;
@XmlAttribute
private String IssueInstant;
@XmlElement
private List<Issuer> Issuers;
@XmlElement
private List<NameIDPolicy> NameIDPolicys;
// Getters and Setters
}
班级发行人
private String xmlns;
@XmlAttribute
public String getXmlns() {
return xmlns;
}
public void setXmlns(String xmlns) {
this.xmlns = xmlns;
}
类NameIDPolicy是相同的:
private String Format;
private String AllowCreate;
@XmlAttribute(name="AllowCreate")
public String getFormat() {
return Format;
}
public void setFormat(String format) {
Format = format;
}
@XmlAttribute(name="Format")
public String getAllowCreate() {
return AllowCreate;
}
public void setAllowCreate(String allowCreate) {
AllowCreate = allowCreate;
}
错误是
threw exception [Request processing failed; nested exception is
javax.xml.bind.UnmarshalException: unexpected element (uri:"A", local:"AuthnRequest").
Expected elements are <{}AuthnRequest>] with root cause
答案 0 :(得分:0)
错误消息告诉您<AuthnRequest>
元素位于命名空间A
中,并且您的注释不指定该命名空间。该命名空间在特殊的xmlns
属性中指定,您尝试使用@XmlAttribute
试试这个:
@XmlRootElement(name="AuthnRequest", namespace="A")
并删除@XmlAttribute
的{{1}}。
您可能还需要为xmlns
中的某些namespace
个带注释的字段指定@XmlElement
,例如
UserAuthn