JAXB-настройка schemaBindings не связана ни с одним элементом схемы


Я пытаюсь создать классы Java из набора XSD-файлов с помощью плагина Maven XJC с пользовательской привязкой. Настройка добавляется в префикс JAXB сгенерированных классов . Однако при запуске сборки maven плагин XJC, похоже, не распознает элемент schemaBindings и выдает исключение как under.

[ERROR] Error while parsing schema(s).Location [ file:/C:/blah/bindings.xjb{5,25}].
com.sun.istack.SAXParseException2: The "jaxb:schemaBindings" customization is no
t associated with any schema element.
        at com.sun.tools.xjc.reader.internalizer.Internalizer.reportError(Intern
alizer.java:632)
        at com.sun.tools.xjc.reader.internalizer.Internalizer.reportError(Intern
alizer.java:626)
        at com.sun.tools.xjc.reader.internalizer.Internalizer.move(Internalizer.
java:451)
        at com.sun.tools.xjc.reader.internalizer.Internalizer.transform(Internal
izer.java:160)
        at com.sun.tools.xjc.reader.internalizer.Internalizer.transform(Internal
izer.java:109)
        at com.sun.tools.xjc.reader.internalizer.DOMForest.transform(DOMForest.j
ava:449)
        at com.sun.tools.xjc.ModelLoader.buildDOMForest(ModelLoader.java:345)
        at com.sun.tools.xjc.ModelLoader.loadXMLSchema(ModelLoader.java:377)
        at com.sun.tools.xjc.ModelLoader.load(ModelLoader.java:174)
        at com.sun.tools.xjc.ModelLoader.load(ModelLoader.java:119)
        at org.jvnet.mjiip.v_2_2.XJC22Mojo.loadModel(XJC22Mojo.java:45)
        at org.jvnet.mjiip.v_2_2.XJC22Mojo.doExecute(XJC22Mojo.java:35)
        at org.jvnet.mjiip.v_2_2.XJC22Mojo.doExecute(XJC22Mojo.java:22)
        at org.jvnet.jaxb2.maven2.RawXJC2Mojo.doExecute(RawXJC2Mojo.java:282)
        at org.jvnet.jaxb2.maven2.RawXJC2Mojo.execute(RawXJC2Mojo.java:147)
        at org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPlugi
nManager.java:490)
        at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(Defa
ultLifecycleExecutor.java:694)
        at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalWithLi
fecycle(DefaultLifecycleExecutor.java:556)
        at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(Defau
ltLifecycleExecutor.java:535)
        at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHan
dleFailures(DefaultLifecycleExecutor.java:387)
        at org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegmen
ts(DefaultLifecycleExecutor.java:348)
        at org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLi
fecycleExecutor.java:180)
        at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:328)
        at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:138)
        at org.apache.maven.cli.MavenCli.main(MavenCli.java:362)
        at org.apache.maven.cli.compat.CompatibleMain.main(CompatibleMain.java:6
0)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315)
        at org.codehaus.classworlds.Launcher.launch(Launcher.java:255)
        at org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430)

        at org.codehaus.classworlds.Launcher.main(Launcher.java:375)

Привязки.ДКБ заключается в следующем.

<jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
           xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
           jaxb:version="2.1" schemaLocation="blah.xsd">      
    <jaxb:schemaBindings>
        <jaxb:nameXmlTransform>
              <jaxb:elementName suffix="Type"/>
        </jaxb:nameXmlTransform> 
    </jaxb:schemaBindings>
</jaxb:bindings>

Для генерации классов Java используются следующие плагины. Вставка соответствующего фрагмента mvn здесь.

<plugin>   

    <groupId>org.jvnet.jaxb2.maven2</groupId>

    <artifactId>maven-jaxb2-plugin</artifactId>

    <version>0.8.0</version>

        <executions>

            <execution>

                <goals>

                    <goal>generate</goal>

                </goals>
            </execution>

        </executions>

        <dependencies>

            <dependency>

                <groupId>com.sun.xml.bind</groupId>

                <artifactId>jaxb-xjc</artifactId>

                <version>2.2.6</version>

            </dependency>

            <dependency>

                <groupId>com.sun.xml.bind</groupId>

                <artifactId>jaxb-impl</artifactId>

                <version>2.2.6</version>

            </dependency>

        </dependencies>
    <configuration>

                               <schemaDirectory>./src/main/resources</schemaDirectory>

                    <includeBindings>
                        <includeBinding>**/*.xjb</includeBinding>
                    </includeBindings>
                    <extension>true</extension>

                </configuration>

            </plugin>

Единственное другое обсуждение, которое я мог найти по этому вопросу, вращается вокруг JAX-WS, который я не использую, поскольку здесь нет файлов WSDL. Здесь все файлы XSD.

Я не вижу, почему эта ошибка должна произойти, потому что файл JAXB binding.xsd действительно определяет элемент schemaBindings, как показано ниже.

<xs:element name="schemaBindings" substitutionGroup="jaxb:declaration">
    <xs:complexType>
      <xs:sequence>
        <xs:element minOccurs="0" ref="jaxb:package"/>
        <xs:element minOccurs="0" ref="jaxb:nameXmlTransform"/>
      </xs:sequence>
      <xs:attribute name="map" type="xs:boolean" />
    </xs:complexType>
</xs:element>
Любые намеки на эту проблему были бы очень ценны. Пожалуйста, дайте мне знать,если потребуется больше информации. Спасибо!

Править: Очень много людей на улице. Интернет, кажется, использовал schemaBindings без каких-либо проблем. Может быть, это проблема с зависимостями, упомянутыми в вопросе?

1 5

1 ответ:

Ваш jaxb:schemaBindings должен связать привязки с определенной схемой schema. Через расположение схемы или scd. Пожалуйста, смотрите http://jaxb.java.net/guide/Customizing_Java_packages.html