JAXB:包含带有命名空间的xsi:type的错误解组元素

时间:2011-10-12 21:57:16

标签: jaxb xml-parsing deserialization unmarshalling jaxb2

如果我有以下架构:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="test" xmlns="test" version="1.0" elementFormDefault="unqualified" attributeFormDefault="unqualified">
    <xs:element name="testType" type="testType"/>
    <xs:complexType name="testType" abstract="true">
        <xs:sequence>
            <xs:element name="testField" type="xs:string"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="testSubType">
        <xs:complexContent>
            <xs:extension base="testType">
                <xs:sequence>
                    <xs:element name="someField" type="xs:string"/>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
</xs:schema>

用于验证此实例文档:

<n1:testType xsi:type="n1:testSubType" xsi:schemaLocation="test test%20schema.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:n1="test">
    <testField>String</testField>
    <someField>String</someField>
</n1:testType>

解组时我收到错误:unrecognized type name: {test}testSubType. Did you mean testSubType?如何使用JAXB解组使用包含命名空间前缀的xsi:type属性的抽象基类的子类?

更新:当从xsi:type属性中删除名称空间前缀时,解组工作正常。但是,根据架构,实例文档将不再有效。架构需要声明targetNamespace,因此更改它不是一个选项。

0 个答案:

没有答案