2014-09-08 16 views
6

Ho 2 schemi A, B. sto riutilizzare alcuni elementi A a B.JAXB episodio compilation con includere non funziona

Non faccio uso di namespace.

sto usando

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

ho ho definito un'inclusione dello schema A nello schema B come:

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

ed il catalogo come

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

Il JAXB configurazione va:

Il problema è che ogni volta che si specifica la dipendenza dell'episodio lo schema non genera alcuna classe anche se contiene alcuni elementi B per i quali voglio generare le classi.

[INFO] Parsing input schema(s)... 
[INFO] Compiling input schema(s)... 
[INFO] Cleaning package directories. 
[INFO] Finished execution. 

Quando rimuovo l'episodio funziona bene e genera anche classi per lo schema A, che in realtà voglio evitare.

Avete qualche suggerimento?

Un campione è stato pubblicato nel Jaxb episodic compilation

risposta

5

Ok, ho controllato il vostro esempio. Il problema è che non si usano gli spazi dei nomi.

Controlla la tua META-INF/sub-jaxb.episode del file:

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

Vedete questo <jaxb:bindings scd="x-schema::"> e poi <jaxb:schemaBindings map="false">. Questo in pratica dice a XJC "non mappare nulla nello spazio dei nomi vuoto". Poiché il secondo schema (b.xsd) non utilizza gli spazi dei nomi, quando si utilizza il file episodio di a.xsd (vincolante in precedenza), si sopprime anche la generazione di codice per b.xsd.

Per riassumere, quando si utilizza la compilazione di episodi/schema separato non è possibile inserire schemi con uno spazio dei nomi in diversi episodi. Questo è esattamente il problema con include.

Questo non è un bug nello maven-jaxb2-plugin. Non lo chiamerei anche un bug in XJC. È proprio come gli episodi funzionano di default.

Vedere la mia richiesta pull here, viene dimostrata la compilazione episodica, quando i namespace vengono gestiti di conseguenza.

+0

Grazie per la risposta. Ho menzionato che non uso gli spazi dei nomi nella seconda frase. Proverò con map = "true". –

+0

Sì, l'hai fatto. Non è chiaro per me che questa sia la ragione. – lexicore

+0

Impostazione map = "true" nel file episodio ha funzionato per me. – uberdog

0

Autore del maven-jaxb2-plugin qui.

La mia ipotesi sarebbe che il tuo episodio dice qualcosa come "non compilare spazi dei nomi A e B". Si prega di controllare il file vincolante all'interno di META-INF nel vostro JAR.

Questo è un utilizzo abbastanza avanzato, ci sono parecchi punti in cui questo può andare storto. Si utilizza:

  • cataloghi
  • risoluzione schema-base artefatto Maven
  • episodi

Cataloghi e gli episodi sono caratteristiche XJC, risoluzione Maven deriva dal maven-jaxb2-plugin. Dobbiamo cercare di individuare ciò che non riesce:

  • provi anche solo con gli episodi - estrarre gli schemi e compila "così com'è", senza cataloghi e resolver
  • soli cataloghi - schema estratto e riscrivere a dirs locali invece di maven:
  • Prova maven:my.schema:schema-a!/A.xsd come posizione dello schema, senza episodi e cataloghi

Ovviamente altri tre combinazioni da provare.

Se si fornisce un progetto di esempio, esaminerò (ma non entro i prossimi 10 giorni). Il migliore sarebbe quello di presentare un problema.Mi trasferirò il plugin per GitHub quindi questo sarebbe un buon posto:

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

+0

Non sono sicuro di quale opzione dovrei cercare nell'episodio. Sono abbastanza sicuro che il catalogo stia risolvendo correttamente lo schema dal barattolo. Ho pubblicato un esempio in https://github.com/the-foreigner/jaxb-episodic-compilation Grazie! –