gpt4 book ai didi

xml - 尝试解码时出现 SAXParseException

转载 作者:行者123 更新时间:2023-12-04 06:11:45 27 4
gpt4 key购买 nike

我对 JAXB 很陌生。我的经验非常好,但现在我在解码时遇到了一些问题。

我的类实现了以下接口(interface):

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 返回一个 User 类。

我像这样编码对象:
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()) ;

我得到一个异常(exception)。
javax.xml.bind.UnmarshalException
带有链接异常:[org.xml.sax.SAXParseException:前缀
与元素类型关联的属性“xsi:type”的“xsi”
“校长”不受约束
  • 任何关于我做错了什么的建议将不胜感激。
  • 另一个问题是我如何将成员排除在编码之外?

  • 谢谢

    最佳答案

    Any advice on what i am doing wrong would be appreciated.



    您正在使用的 JAXB 的实现(Metro、MOXy、JaxMe 等)中似乎存在错误。从您提供的文档中, xsi 应该有一个命名空间声明。包括前缀。
    <profileAttribute xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    ....
    </profileAttribute>

    您使用的是哪个 JAXB 实现和版本?

    以下文章与您的用例相关,您可能会发现它很有帮助:
  • http://blog.bdoughan.com/2011/05/jaxb-and-interface-fronted-models.html

  • Another question is how do i exclude a member from being marshaled?



    您可以使用 @XmlTransient字段/属性上的注释以防止该字段/属性被编码。

    关于xml - 尝试解码时出现 SAXParseException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7695973/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com