gpt4 book ai didi

java - XmlDiscriminatorNode、XmlSchema 命名空间和 elementFormDefault=QUALIFIED

转载 作者:行者123 更新时间:2023-12-02 17:23:20 28 4
gpt4 key购买 nike

我正在使用 eclipselink-2.3.2。我的包有注释:

@XmlSchema(namespace = "http://example.com/namespace", elementFormDefault = XmlNsForm.QUALIFIED)

我有以下类(class):

@XmlRootElement
public class Box {
private A item; // and getter/setter
}

@XmlDiscriminatorNode("@thetype")
public abstract class A {}

@XmlDiscriminatorValue("b")
public class B extends A {}

@XmlDiscriminatorValue("c")
public class C extends A {}

当我尝试像这样反序列化有效的 XML 时:

<box xmlns="http://example.com/namespace"><a thetype="b" /></box>

我得到了描述性异常:

org.eclipse.persistence.exceptions.DescriptorException
Exception Description: Missing class indicator field from database row [UnmarshalRecord()]

如果我删除 @XmlSchema从包装和 xmlns来自根元素的属性,它有效。如果我从 QUALIFIED 更改为 UNQUALIFIED,只要我向它提供丑陋的前缀 XML,它就可以工作。

我认为无前缀可以工作,因为它仍然声明默认 namespace ,但尽管没有异常(exception),该字段仍然为空。

单步执行 EclipseLink 代码后,我可以看到当 QNameInheritancePolicy.classFromRow来电 UnmarshalRecord.get ,它正在尝试访问命名空间URI“http://example.com/namespace”下的属性“thetype”。

当我将 XmlScehma elementFormDefault 更改为 UNQUALIFIED 时,namespaceURI 返回 null 并且正确检索该属性。

最佳答案

这是 EclipseLink JAXB (MOXy) 中的错误。您可以使用下面的链接跟踪我们在此问题上的进展。我已经修复了该错误,测试用例完成运行后我将检查它。

更新

此错误现已修复。您可以通过获取 2012 年 4 月 30 日开始的 EclipseLink 2.4.0 nightly builds 之一来尝试一下:

关于java - XmlDiscriminatorNode、XmlSchema 命名空间和 elementFormDefault=QUALIFIED,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10339908/

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