【发布时间】:2011-10-08 09:40:04
【问题描述】:
我对 JAXB 还是很陌生。我的经验非常好,但现在我在解组时遇到了一些问题。
我的类实现了以下接口:
public interface Attribute {
public String getAttrName();
public void setAttrName(String s);
public String getAttrValue();
public void setAttrValue(String s);
public Object getPrincipal();
public void setPrincipal(Object o);
}
在这种情况下,getPricipal 返回一个用户类。
我像这样编组对象:
Marshaller m = context.createMarshaller();
JAXBContext context = JAXBContext.newInstance(AttributeImpl.class, UserImpl.class, RoleImpl.class);
Marshaller m = context.createMarshaller();
m.marshal(attribute, sw);
它会生成以下 XML
<profileAttribute>
<attrName>KEY2</attrName>
<attrValue>2_VALUE2</attrValue>
<principal xsi:type="userImpl">
<enabled>true</enabled>
<externallyDefined>false</externallyDefined>
<fullName>NAME</fullName>
<password>PASSWORD</password>
<previousPasswordChangeTime>2011-10-05T11:16:44.960-07:00
</previousPasswordChangeTime>
<roles xsi:type="roleImpl">
<externallyDefined>false</externallyDefined>
<roleName>ROLE_USER</roleName>
</roles>
<roles xsi:type="roleImpl">
<externallyDefined>false</externallyDefined>
<roleName>ROLE_ADMINISTRATOR</roleName>
</roles>
<username>jasperadmin</username>
</principal>
</profileAttribute>
我的问题是当我尝试使用以下代码解组相同的 XML 时
JAXBContext jc = JAXBContext.newInstance( AttributeImpl.class, UserImpl.class, RoleImpl.class );
Unmarshaller u = jc.createUnmarshaller();
ProfileAttribute pa = (ProfileAttribute) u.unmarshal(req.getInputStream()) ;
我遇到了异常。 javax.xml.bind.UnmarshalException 带有链接异常:[org.xml.sax.SAXParseException:前缀 与元素类型关联的属性“xsi:type”的“xsi” “principal”不受约束
- 任何关于我做错了什么的建议都将不胜感激。
- 另一个问题是如何将成员排除在编组之外?
谢谢
【问题讨论】:
标签: xml exception binding jaxb unmarshalling