2013-03-05 4 views
5

Ich versuche, Java-Klassen aus einer Reihe von XSD-Dateien mithilfe des Maven XJC-Plugins mit einer benutzerdefinierten Bindung zu generieren. Die Anpassung wird zu prefix JAXB generated classes hinzugefügt. Wenn das Maven-Build ausgeführt wird, scheint das XJC-Plugin jedoch das schemaBindings-Element nicht zu erkennen und löst die Ausnahme wie unten aus.JAXB - Die SchemaBindings-Anpassung ist keinem Schema-Element zugeordnet

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

Die Bindung.jxb ist wie folgt.

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

Die folgenden Plugins werden zum Generieren der Java-Klassen verwendet. Einfügen des relevanten Snippets mvn hier.

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

Die only other discussion I could find on this issue revolves about JAX-WS, die ich nicht verwenden, da es hier geht keine WSDL-Dateien ist. Es sind alle XSD-Dateien hier.

Ich sehe nicht, warum dieser Fehler auftreten muss, da die binding.xsd Datei des JAXB tatsächlich das schemaBindings Element definiert, wie unten zu sehen ist.

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

Alle Hinweise auf dieses Problem würden sehr geschätzt werden. Bitte lassen Sie mich wissen, wenn mehr Eingaben benötigt werden. Vielen Dank!

EDIT: Viele Leute im Internet scheinen die SchemaBindings ohne irgendwelche Probleme verwendet zu haben. Kann das ein Problem mit den in der Frage genannten Abhängigkeiten sein?

+0

Sind Sie sicher, dass Sie die richtige binding.xjb gepostet haben? Ihr schemaBindings-Element ist einfach leer! – lexicore

+0

Ja, das ist die richtige Bindungsdatei. Und ja, es ist leer. Ich habe versucht, das '' -Element darin einzufügen, aber nicht umsonst. – asgs

+1

Aber dann ist es offensichtlich. Ihr jaxb: schemaBindings muss Bindungen mit einem bestimmten Schemaschema verknüpfen. Via Schema-Speicherort oder scd. http://jaxb.java.net/guide/Customizing_Java_packages.html – lexicore

Antwort

Verwandte Themen