JAXB - The schemaBindings customization is not associated with any schema element

早过忘川 提交于 2019-12-01 16:27:17

问题


I'm trying to generated Java classes from a set of XSD files using the Maven XJC plugin with a custom binding. The customization is added to prefix JAXB generated classes. When the maven build runs, however, the XJC plugin doesn't seem to recognize the schemaBindings element and throws the exception as 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)

The bindings.jxb is as follows.

<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>

The following plugins are used for the generating the Java Classes. Pasting the relevant mvn snippet here.

<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>

The only other discussion I could find on this issue revolves about JAX-WS which I don't use as there's no WSDL files involved here. It's all XSD files here.

I don't see why this error has to occur because the JAXB's binding.xsd file indeed defines the schemaBindings element as seen below.

<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>

Any hints on this problem would be very much appreciated. Please let me know if more inputs are needed. Thanks!

EDIT: A lot of people on the Internet seem to have used the schemaBindings without any issues. May be this is an issue with the dependencies mentioned in the question?


回答1:


Your jaxb:schemaBindings must associate bindings with a certain schema schema. Via schema location or scd. Please see http://jaxb.java.net/guide/Customizing_Java_packages.html



来源:https://stackoverflow.com/questions/15230503/jaxb-the-schemabindings-customization-is-not-associated-with-any-schema-elemen

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!