questa è la mia prima domanda, quindi per favore sii gentile;)Soluzione JAXB per le importazioni di Chameleon XSD?
Sono bloccato con uno strano problema. Essenzialmente ottengo tre definizioni XSD come la seguente:
PartA.xsd
targetNameSpace="PartA"
include="PartB.xsd"
PartB.xsd
<!-- no namespace definition!!! -->
PartC.xsd
targetNameSpace="PartC"
inlude="PartB.xsd"
import="PartA.xsd"
L'errore si apre, quando vincolante PARTC via JAXB di classi Java:
- Una classe/interfaccia con lo stesso nome "b. exampleType "è già in uso. Utilizzare una personalizzazione della classe per risolvere questo conflitto.
- Questo errore di confusione si è verificato molto probabilmente perché lo schema utilizza una tecnica denominata "schema camaleonte", che fa sì che una singola definizione venga caricata più volte in spazi dei nomi diversi. Vedi http://forums.java.net/jive/thread.jspa?threadID=18631 per ulteriori informazioni.
Seguendo il collegamento, ho scoperto, l'errore reale si trova in ParteB, che non ha una dichiarazione dello spazio dei nomi! Questo metodo è chiamato Chameleon Schema. I tipi definiti in Part.B adotteranno lo spazio dei nomi dell'importazione XSD.
Quindi, nel mio caso, ci sono due spazi dei nomi per lo stesso tipo:
- "parta"
- "PARTC"
e questo è, dove JAXB si rompe. Non ho trovato un modo per legare correttamente PartC. E (per rendere le cose difficili) ho la possibilità di cambiare le definizioni originali XSD!
Qualcuno si è imbattuto in questo fenomeno o qualcosa del genere prima e ha una soluzione valida per questo?
Grazie per il collegamento, ma hai ragione, non è molto dettagliato. E dal momento che non ho accesso in scrittura sullo schema, sono bloccato. ... Anche se, forse, posso discutere con l'autore dello schema su "In alcuni altri casi, lo schema camaleonte può essere considerato come una cattiva progettazione dello schema, poiché duplica le definizioni in molti punti". punto. – Gruber