2013-03-05 23 views
5

Próbuję wygenerować klasy Java z zestawu plików XSD przy użyciu wtyczki Maven XJC z niestandardowym wiązaniem. Dostosowanie jest dodawane do prefix JAXB generated classes. Kiedy jednak maven build działa, wtyczka XJC nie rozpoznaje elementu schemaBindings i zgłasza wyjątek jako pod.JAXB - Personalizacja schemaBindings nie jest powiązana z żadnym elementem schematu

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

Plik bindingings.jxb wygląda następująco.

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

Następujące wtyczki służą do generowania klas Java. Wklejam odpowiedni fragment mvn tutaj.

<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 których nie używam, ponieważ nie ma żadnych plików WSDL zaangażowane tutaj. Tutaj są wszystkie pliki XSD.

Nie widzę powodu, dla którego błąd ten musi wystąpić, ponieważ plik JAXB binding.xsd rzeczywiście definiuje element schemaBindings, jak pokazano poniżej.

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

Wszelkie sugestie dotyczące tego problemu będą bardzo mile widziane. Proszę dać mi znać, jeśli potrzebujesz więcej danych wejściowych. Dzięki!

EDYCJA: Wiele osób w Internecie wydaje się używać schematuBindings bez żadnych problemów. Może to być problem z zależnościami wymienionymi w pytaniu?

+0

Czy jesteś pewny, że napisałeś odpowiedni plik binding.xjb? Twój element schemaBindings jest pusty! – lexicore

+0

Tak, to jest właściwy plik wiążący. I tak, jest puste. Próbowałem dodać element '' wewnątrz, ale na próżno. – asgs

+1

Ale wtedy jest to oczywiste. Twoje jaxb: schemaBindings musi powiązać wiązania z pewnym schematem schematu. Poprzez lokalizację schematu lub scd. http://jaxb.java.net/guide/Customizing_Java_packages.html – lexicore

Odpowiedz