Генерация класса JAXB xjc - рекурсивные столкновения между элементами и пространствами имен

Я пытаюсь сгенерировать классы для схем ECMA-376 v5, но не могу исправить столкновение двух элементов с помощью настройки привязок, т.е. [ERROR] Two declarations cause a collision in the ObjectFactory class ошибка.

Чтобы попробовать это самостоятельно, просто поместите приведенную ниже сборку ant и файл bindings в каталог и вызовите "ant" для настройки и генерации классов.

Если вы раскомментируете строку "Fixme" в файле ooxml.xjb, генерация будет успешной, но, глядя на src/org/openxmlformats/schemas/wordprocessingml/_2006/main/ObjectFactory.java вы обнаружите, что элемент "Fixme" генерируется по-другому и, вероятно, не имеет смысла. Так что, возможно, используйте это как подсказку для вашего исправления.

Я думаю, что ошибка вызвана множественным "r" элементы / ссылки в...:

  1. wml.xsd->CT_RunTrackChange->EG_ContentRunContent->r
  2. wml.xsd->CT_RunTrackChange->shared-math.xsd->EG_OMathMathElements->r
  3. shared-math.xsd->EG_OMathElements->EG_OMathMathElements->r
  4. shared-math.xsd->EG_OMathElements->wml.xsd->EG_PContentMath->EG_ContentRunContentBase->EG_RunLevelElts->EG_MathContent->shared-math.xsd->oMath->CT_OMath->EG_OMathElements... (см. 3/4)

Хотя есть ссылки на ТА, что -XautoNameResolution помогло бы, это кажется бесполезным в моем случае.

Если ничего не помогает, я, вероятно, буду искать / заменять токены fixme после генерации, но я думаю, что правильные инструкции привязки находятся не так уж далеко...

В случае, если вам интересно, почему я использую Moxy. Это прототип для Apache POI, а Moxy подходит для android-преобразования и совместимости с лицензиями - в любом случае я стремлюсь к решению, которое сохраняет инфо-набор XML.

build.xml:
<project name="ECMA v5 xjc" default="doit" basedir=".">

    <!-- the repository to download jars from -->
    <property name="repository.m2" value="https://repo1.maven.org"/>
    <property name="jaxb-dir" location="lib"/>

    <property name="dist.jaxb-xjc.url" value="${repository.m2}/maven2/com/sun/xml/bind/jaxb-xjc/2.3.0/jaxb-xjc-2.3.0.jar"/>
    <property name="dist.jaxb-xjc.jar" value="${jaxb-dir}/jaxb-xjc-2.3.0.jar"/>

    <property name="dist.jaxb-core.url" value="${repository.m2}/maven2/com/sun/xml/bind/jaxb-core/2.3.0/jaxb-core-2.3.0.jar"/>
    <property name="dist.jaxb-core.jar" value="${jaxb-dir}/jaxb-core-2.3.0.jar"/>

    <property name="dist.jaxb-api.url" value="${repository.m2}/maven2/javax/xml/bind/jaxb-api/2.3.0/jaxb-api-2.3.0.jar"/>
    <property name="dist.jaxb-api.jar" value="${jaxb-dir}/api/jaxb-api-2.3.0.jar"/>

    <property name="dist.eclipselink.url" value="${repository.m2}/maven2/org/eclipse/persistence/eclipselink/2.7.0/eclipselink-2.7.0.jar"/>
    <property name="dist.eclipselink.jar" value="${jaxb-dir}/eclipselink-2.7.0.jar"/>

    <property name="dist.moxy.url" value="${repository.m2}/maven2/org/eclipse/persistence/org.eclipse.persistence.moxy/2.7.0/org.eclipse.persistence.moxy-2.7.0.jar"/>
    <property name="dist.moxy.jar" value="${jaxb-dir}/org.eclipse.persistence.moxy-2.7.0.jar"/>

    <property name="dist.ooxml_v5.url" value="https://www.ecma-international.org/publications/files/ECMA-ST/ECMA-376,%20Fifth%20Edition,%20Part%204%20-%20Transitional%20Migration%20Features.zip"/>
    <property name="dist.ooxml_v5.jar" value="${jaxb-dir}/ooxml_v5-all.zip"/>

    <property name="dist.xmlxsd.url" value="http://www.w3.org/2001/03/xml.xsd"/>
    <property name="dist.xmlxsd.xsd" value="${jaxb-dir}/xml.xsd"/>


    <macrodef name="downloadfile">
        <attribute name="src"/>
        <attribute name="dest"/>
        <sequential>
            <get src="@{src}" dest="@{dest}" skipexisting="true"/>
        </sequential>
    </macrodef>

    <target name="doit">
        <mkdir dir="src"/>
        <mkdir dir="${jaxb-dir}/api"/>
        <mkdir dir="${jaxb-dir}/ooxml_v5"/>
        <mkdir dir="${jaxb-dir}/episodes_v5"/>
        <downloadfile src="${dist.jaxb-xjc.url}" dest="${dist.jaxb-xjc.jar}"/>
        <downloadfile src="${dist.jaxb-core.url}" dest="${dist.jaxb-core.jar}"/>
        <downloadfile src="${dist.jaxb-api.url}" dest="${dist.jaxb-api.jar}"/>
        <downloadfile src="${dist.eclipselink.url}" dest="${dist.eclipselink.jar}"/>
        <downloadfile src="${dist.moxy.url}" dest="${dist.moxy.jar}"/>
        <downloadfile src="${dist.ooxml_v5.url}" dest="${dist.ooxml_v5.jar}"/>
        <downloadfile src="${dist.xmlxsd.url}" dest="${dist.xmlxsd.xsd}"/>

        <unzip dest="${jaxb-dir}" src="${dist.ooxml_v5.jar}">
            <patternset>
                <include name="OfficeOpenXML-XMLSchema-Transitional.zip"/>
            </patternset>
            <mergemapper to="ooxml_v5.zip"/>
        </unzip>

        <unzip dest="${jaxb-dir}/ooxml_v5" src="${jaxb-dir}/ooxml_v5.zip"/>

        <!-- the DOCTYPE is causing problems with generating the schema classes -->
        <copy tofile="${dist.xmlxsd.xsd}.edit" file="${dist.xmlxsd.xsd}">
            <filterchain>
                <linecontains negate="true">
                    <contains value="DOCTYPE"/>
                </linecontains>
            </filterchain>
        </copy>
        <move file="${dist.xmlxsd.xsd}.edit" tofile="${dist.xmlxsd.xsd}"/>


        <java fork="true" classname="org.eclipse.persistence.jaxb.xjc.MOXyXJC">
            <classpath>
                <fileset dir="${jaxb-dir}" includes="*.jar"/>
            </classpath>
            <jvmarg value="-Djava.endorsed.dirs=${jaxb-dir}/api"/>
            <!-- auto resolution is ignored ... -->
            <arg value="-XautoNameResolution"/>
            <arg value="-no-header"/>
            <arg value="-extension"/>
            <!--arg value="-verbose"/-->
            <arg line="-episode ${jaxb-dir}/episodes_v5/step1.episodes"/>
            <arg line="-b ooxml.xjb"/>
            <arg line="-d src"/>
            <arg value="${dist.xmlxsd.xsd}"/>
            <arg value="${jaxb-dir}/ooxml_v5/shared-math.xsd"/>
            <arg value="${jaxb-dir}/ooxml_v5/dml-main.xsd"/>
        </java>
    </target>
</project>

ooxml.xjb:

<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?>
<bindings version="2.1"
    xmlns="http://java.sun.com/xml/ns/jaxb"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
    xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
    xmlns:r="http://schemas.openxmlformats.org/officeDocument/2006/relationships"
    xmlns:math="http://schemas.openxmlformats.org/officeDocument/2006/math"
    extensionBindingPrefixes="xjc">
    <globalBindings generateIsSetMethod="true"/>

    <bindings scd="x-schema::tns" xmlns:tns="http://schemas.openxmlformats.org/officeDocument/2006/math">
        <bindings scd="~tns:CT_R/model::sequence">
            <bindings scd="tns:rPr">
                <factoryMethod name="rPrMath"/>
            </bindings>
            <bindings scd="model::choice/tns:t">
                <factoryMethod name="tMath"/>
            </bindings>
        </bindings>
        <!--bindings scd="group::math:EG_OMathMathElements/model::choice/math:r">
            <property name="rMath1"/>
        </bindings-->
    </bindings>  

    <bindings scd="x-schema::tns" xmlns:tns="http://schemas.openxmlformats.org/drawingml/2006/wordprocessingDrawing">
        <bindings scd="~tns:CT_Anchor/model::sequence/tns:simplePos">
            <property name="simplePosList"/>
        </bindings>
    </bindings>

    <bindings scd="x-schema::tns" xmlns:tns="http://schemas.openxmlformats.org/wordprocessingml/2006/main">
        <!--bindings scd="~tns:CT_RunTrackChange/model::choice/group::math:EG_OMathMathElements/model::choice/math:r">
            <class name="CTR" implClass="org.openxmlformats.schemas.officedocument._2006.math.CTR"/>
        </bindings-->
        <bindings scd="~tns:CT_RunTrackChange/model::choice/group::tns:EG_ContentRunContent/model::choice/tns:r">
            <!--class name="FixmeR"/-->
        </bindings>
    </bindings>

</bindings>

0 ответов

Другие вопросы по тегам