У меня есть базовая XML-схема, которую я должен расширить с помощью xs: redefine, а затем добавить некоторые расширения из второй схемы. Когда unmarshalling im получает фатальную ошибку: cvc-complex-type.2.4.d: Неверный контент был найден, начиная с базы элементов: TypeTwo. На данный момент не ожидается никакого дочернего элемента. Даже когда другие синтаксические анализаторы говорят, что XML полностью действителен.java jaxb фатальная ошибка проверки с использованием расширений пространства имен
- Так у меня есть свои базовые теги в base.xsd под пространством имен "http://www.example.com/base"
- Мои удлинительные теги в extension.xsd под пространством имен "http://www.example.com/extension"
- И мой переопределение в redefine.xsd, который импортирует extension.xsd
Так что мои базовые теги
<xs:element name="Root">
<xs:complexType>
<xs:sequence>
<xs:element ref="TypeThree" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:complexType name="TypeTwo">
</xs:complexType>
<xs:element name="TypeTwo" type="TypeTwo" />
<xs:group name="TypeThreeExtension">
<xs:sequence />
</xs:group>
<xs:complexType name="TypeThree">
<xs:sequence>
<xs:group maxOccurs="unbounded" minOccurs="0" ref="TypeThreeExtension" />
</xs:sequence>
</xs:complexType>
<xs:element name="TypeThree" type="TypeThree" />
Просто корень, и два элемента, один с группой для расширения.
Мои удлинительные теги:
<xs:schema targetNamespace="http://www.example.com/extension"
elementFormDefault="qualified"
xmlns="http://www.example.com/extension"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:base="http://www.example.com/base"
xmlns:ext="http://www.example.com/extension"
>
<xs:import schemaLocation="base.xsd" namespace="http://www.example.com/base"/>
<xs:complexType name="ExtTypeOne">
<xs:sequence>
<xs:element ref="base:TypeTwo" minOccurs="0" maxOccurs="unbounded" />
</xs:sequence>
</xs:complexType>
<xs:element name="ExtTypeOne" type="ExtTypeOne" />
Так только один дополнительный тип, который содержит одну из базовых типов (это, кажется, важным фактором).
redefine.xsd является
<xs:schema targetNamespace="http://www.example.com/base"
elementFormDefault="qualified" xmlns="http://www.example.com/base"
xmlns:ext="http://www.example.com/extension" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:import schemaLocation="extension.xsd" namespace="http://www.example.com/extension" />
<xs:redefine schemaLocation="base.xsd">
<xs:group name="TypeThreeExtension">
<xs:sequence>
<xs:element ref="ext:ExtTypeOne" maxOccurs="unbounded" />
</xs:sequence>
</xs:group>
</xs:redefine>
Так вот им просто расширить группу базы TypeThreeExtension, так что теперь я могу добавить ExtTypeOne тег ниже. В основном это позволяет структура тегов:
- Base
- Расширение
- Base
- Расширение
Когда я загружаю следующий XML для демаршаллизации ...
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Root
xmlns="http://www.example.com/base"
xmlns:base="http://www.example.com/base"
xmlns:ext="http://www.example.com/extension">
<TypeThree>
<ext:ExtTypeOne>
<base:TypeTwo/>
</ext:ExtTypeOne>
</TypeThree>
</Root>
я получаю следующее сообщение об ошибке:
ValidationEvent 1 - линия: 8, уровень опасности: 2, CVC-комплекс-type.2.4.d: Invalid контент был обнаружен, начиная с элемента 'основания: TypeTwo. На данный момент не ожидается никакого дочернего элемента.
Независимо от того, что я делаю, я не могу избавиться от этой ошибки.На самом деле - даже когда я вставляю объекты в XML, JAXB фактически создает XML, который он тогда (по unmarshalling) отчетам недействителен. Это ошибка JAXB?
FWIW - Я могу сказать, что это его базовое гнездо, которое его вызывает. Недействительно ли вложить тип из переопределенной схемы под тегом из второй схемы? Нужно ли создавать разные пространства имен задач или что-то еще?
Это убивает меня ...