2014-09-08 8 views
6
funktioniert

Ich habe 2 Schemata A, B. IJAXB Folge Kompilation mit umfassen nicht

Ich benutze keine Namespaces einige A-Elemente in B. bin Wiederverwendung.

Ich verwende

<groupId>org.jvnet.jaxb2.maven2</groupId> 
<artifactId>maven-jaxb2-plugin</artifactId> 
<version>0.9.0</version> 

I haben, haben eine Einfügung von Schema A in Schema B wie folgt definiert:

<xs:include schemaLocation="classpath:my.schema.A.xsd"/> 

und dem Katalog als

REWRITE_SYSTEM "classpath:my.schema.A.xsd" "maven:my.schema:schema-a!/A.xsd" 

Die jaxb Konfiguration geht:

<configuration> 
    <generatePackage>my.schema.b</generatePackage> 
    <schemaIncludes> 
     <includes>B.xsd</includes> 
    </schemaIncludes> 
    <episodes> 
     <episode> 
      <groupId>my.schema</groupId> 
      <artifactId>schema-a</artifactId> 
     </episode> 
    </episodes> 
    <catalog>src/main/catalog/catalog.cat</catalog> 
</configuration> 

Das Problem ist, dass, wenn ich die Episodenabhängigkeit angeben das Schema keine Klassen generiert, obwohl es einige B-Elemente enthält, für die ich die Klassen generieren möchte.

Wenn ich die Episode entferne funktioniert es gut und erzeugt auch Klassen für Schema A - was ich wirklich vermeiden möchte.

Haben Sie Vorschläge?

Eine Probe wurde veröffentlicht in Jaxb episodic compilation

Antwort

5

Ok, ich Ihr Beispiel überprüft haben. Das Problem besteht darin, dass Sie keine Namespaces verwenden.

Überprüfen Sie Ihre META-INF/sub-jaxb.episode Datei:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<jaxb:bindings version="2.1" xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"> 
    <jaxb:bindings scd="x-schema::"> 
    <jaxb:schemaBindings map="false"> 
     <jaxb:package name="schema.episode.a"/> 
    </jaxb:schemaBindings> 
    <jaxb:bindings scd="person"> 
     <jaxb:class ref="schema.episode.a.Person"/> 
    </jaxb:bindings> 
    </jaxb:bindings> 
</jaxb:bindings> 

Sie sehen diese <jaxb:bindings scd="x-schema::"> und dann <jaxb:schemaBindings map="false">. Dies teilt XJC grundsätzlich mit, dass "nichts im leeren Namespace abgebildet wird". Da Ihr zweites Schema (b.xsd) auch keine Namespaces verwendet, unterdrücken Sie bei der Verwendung der Episodendatei a.xsd (Bindung oben) auch die Generierung von Code für b.xsd.

Zusammenfassend kann man bei der Verwendung von Episoden/separater Schemakompilierung Schemata mit einem Namespace nicht in verschiedene Episoden einfügen. Dies ist genau das Problem mit include.

Dies ist kein Fehler in der maven-jaxb2-plugin. Ich würde es auch nicht als Fehler in XJC bezeichnen. So funktionieren Episoden standardmäßig.

Siehe meine Pull-Anfrage here, es zeigt episodische Kompilierung, wenn Namespaces entsprechend behandelt werden.

+0

Danke für die Antwort. Ich erwähnte, dass ich Namespaces im zweiten Satz nicht verwende. Ich werde es mit map = "true" versuchen. –

+0

Ja, hast du. Es war mir unklar, dass dies der Grund ist. – lexicore

+0

Das Setzen von map = "true" in der Episodendatei funktionierte für mich. – uberdog

0

Autor des maven-jaxb2-plugin hier.

Meine Vermutung wäre, dass Ihre Episode so etwas wie "kompilieren Namespaces A und B" sagt. Überprüfen Sie die Bindungsdatei in META-INF in Ihrem JAR.

Dies ist ziemlich fortgeschrittene Verwendung, es gibt eine ganze Reihe von Punkten, wo dies schief gehen kann. Sie verwenden:

  • Kataloge
  • Maven Artefakt-basierte Schema Auflösung
  • Episoden

Kataloge und Episoden sind XJC Funktionen, Maven Auflösung kommt aus dem maven-jaxb2-plugin. Wir sollten versuchen, auf einzelne, was fehlschlägt:

  • Probieren Sie es einfach mit Episoden - Ihre Schemata extrahieren und übersetzen „wie sie ist“, ohne Kataloge und Resolver
  • Nur Kataloge - Auszug Schema und schreiben auf lokale Verzeichnisse statt von maven:
  • maven:my.schema:schema-a!/A.xsd als Schemaposition ohne Folgen und Kataloge versuchen

Offensichtlich noch drei Kombinationen zu versuchen.

Wenn Sie ein Beispielprojekt bereitstellen, werde ich untersuchen (aber nicht innerhalb der nächsten 10 Tage). Am besten wäre es, ein Problem zu melden.Ich werde das Plugin zu GitHub bewegen, so wäre dies ein guter Ort sein:

https://github.com/highsource/maven-jaxb2-plugin

+0

Ich bin mir nicht sicher, welche Option ich in der Folge suchen sollte. Ich bin ziemlich sicher, dass der Katalog das Schema korrekt aus dem Jar löst. Ich habe eine Probe unter https://github.com/the-foreigner/jaxb-episodic-compilation veröffentlicht Danke! –