Java XmlDiscriminatorNode、XmlSchema命名空间和elementFormDefault=QUALIFIED
我用的是eclipselink-2.3.2。我的包裹附有注释:Java XmlDiscriminatorNode、XmlSchema命名空间和elementFormDefault=QUALIFIED,java,eclipselink,moxy,Java,Eclipselink,Moxy,我用的是eclipselink-2.3.2。我的包裹附有注释: @XmlSchema(命名空间=”http://example.com/namespace“,elementFormDefault=XmlNsForm.QUALIFIED) 我有以下课程: @XmlRootElement public class Box { private A item; // and getter/setter } @XmlDiscriminatorNode("@thetype") public abs
@XmlSchema(命名空间=”http://example.com/namespace“,elementFormDefault=XmlNsForm.QUALIFIED)
我有以下课程:
@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时:
我得到一个描述性的例外:
org.eclipse.persistence.exceptions.DescriptorException
Exception Description: Missing class indicator field from database row [UnmarshalRecord()]
如果我从包中删除@XmlSchema
,并从根元素中删除xmlns
属性,它就会工作。如果我从合格更改为不合格,只要我向它提供难看的前缀XML,它就可以工作
我假设unfixed可以工作,因为它仍然声明默认名称空间,但是尽管没有异常,字段仍然为null
通过EclipseLink代码,我可以看到当QNameInheritancePolicy.classFromRow
调用UnmarshalRecord.get
时,它正在尝试访问namespaceURI下的属性“thetype”http://example.com/namespace“
当我将XMLSCHEMA elementFormDefault更改为UNQUALIFIED时,namespaceURI返回null,并且该属性被正确检索。您的鉴别器是一个属性,因此我认为您只需要添加一个“@”: 这包含了更多信息和一个示例。这是中的一个错误。您可以使用下面的链接跟踪我们在这个问题上的进展。我已经有了一个附加到bug的修复程序,一旦测试用例运行完毕,我就会检查它
@XmlDiscriminatorNode("@thetype")
public abstract class A {}