2013-03-05 9 views
5

Sto provando a generare classi Java da un set di file XSD utilizzando il plug-in Maven XJC con un'associazione personalizzata. La personalizzazione viene aggiunta a prefix JAXB generated classes. Tuttavia, quando viene eseguito il build di Maven, il plug-in XJC non sembra riconoscere l'elemento schemaBindings e genera l'eccezione come sotto.JAXB - La personalizzazione schemaBindings non è associata a nessun elemento dello schema

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

bindings.jxb è il seguente.

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

I seguenti plug-in sono utilizzati per la generazione delle classi Java. Incollare qui lo snippet mvn pertinente.

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

Il only other discussion I could find on this issue revolves about JAX-WS che io non uso come non ci sono file WSDL coinvolti qui. Sono tutti file XSD qui.

Non vedo perché questo errore si verifichi perché il file binding.xsd di JAXB definisce effettivamente l'elemento schemaBindings come illustrato di seguito.

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

Qualsiasi suggerimento su questo problema sarebbe molto apprezzato. Per favore fatemi sapere se sono necessari più input. Grazie!

MODIFICA: Un sacco di persone su Internet sembrano aver usato lo schemaBindings senza problemi. Potrebbe essere questo un problema con le dipendenze menzionate nella domanda?

+0

Sei sicuro di aver postato il binding.xjb giusto? L'elemento schemaBindings è solo vuoto! – lexicore

+0

Sì, questo è il file di rilegatura giusto. E sì, è vuoto. Ho provato ad aggiungere l'elemento '', ma non invano. – asgs

+1

Ma poi è ovvio. Il tuo jaxb: schemaBindings deve associare i collegamenti con un determinato schema dello schema. Tramite la posizione dello schema o scd. http://jaxb.java.net/guide/Customizing_Java_packages.html – lexicore

risposta