Sto tentando di utilizzare JAXB per decomprimere un file XML il cui schema è definito da DTD (ugh!).JAXB Impossibile gestire l'attributo con due punti (:) nel nome?
Il fornitore esterno del DTD ha specificato uno degli elementi attributi come xml:lang
:
<!ATTLIST langSet
id ID #IMPLIED
xml:lang CDATA #REQUIRED
>
Questo avviene nella classe xjc generato (generazione di serie; magia * .xjb) come:
@XmlAttribute(name = "xml:lang", required = true)
@XmlJavaTypeAdapter(NormalizedStringAdapter.class)
protected String xmlLang;
Tuttavia, quando si eliminano file XML validi con JAXB, l'attributo xmlLang
è sempre null
.
Quando ho modificato il file XML, sostituendo xml:lang
con lang
e cambiato il @XmlAttribute
per abbinare, unmarshalling ha avuto successo (vale a dire gli attributi erano non null
).
Ho trovato questo http://old.nabble.com/unmarshalling-ignores-element-attribute-%27xml%27-td22558466.html. Ma la risoluzione era quella di convertire in XML Schema, ecc. La mia forte preferenza è di andare direttamente da una DTD non modificata (poiché è fornita e definita esternamente da uno standard ISO).
Si tratta di un bug JAXB? Mi manca qualcosa su "namespace" nei nomi degli attributi?
FWIW, java -version
= "costruire 1.6.0_20-b02" e xjc -version
= "xjc versione "JAXB 2.1.10 in JDK 6""
Quale DTD è questo? 'xml: lang' è un meta-attributo dello schema XML, quindi la DTD sta descrivendo qualcosa che ha avuto origine da uno schema, il che suggerisce che c'è uno schema completo là fuori. – skaffman
AFAIK, l'editore rende disponibile solo un DTD. Sarebbe difficile immaginare di pubblicare un DTD basato su uno schema ma non rendere quest'ultimo disponibile. Tuttavia, ho avuto l'autore di alcuni strumenti correlati mi chiedono se sto usando uno schema per generare gli oggetti JAXB, quindi potrebbe esserci qualcosa là fuori ... –
Grazie per il link nabble. Mi hai reso la vita più facile. – chaostheory