Estoy intentando usar JAXB para separar los archivos XML cuyo esquema está definido por una DTD (ugh!).JAXB No se puede manejar el atributo con dos puntos (:) en el nombre?
El proveedor externo de la DTD ha especificado uno de los atributos de elementos como xml:lang
:
<!ATTLIST langSet
id ID #IMPLIED
xml:lang CDATA #REQUIRED
>
Esto entra en la clase generada xjc-(generación estándar, sin la magia * .xjb) como:
@XmlAttribute(name = "xml:lang", required = true)
@XmlJavaTypeAdapter(NormalizedStringAdapter.class)
protected String xmlLang;
Sin embargo, al desmarcar archivos XML válidos con JAXB, el atributo xmlLang
es siempre null
.
Cuando edité el archivo XML, en sustitución de xml:lang
con lang
y cambió el @XmlAttribute
a la altura, unmarshalling tuvo éxito (es decir, atributos eran no null
).
Encontré esto http://old.nabble.com/unmarshalling-ignores-element-attribute-%27xml%27-td22558466.html. Pero, la resolución era convertir a XML Schema, etc. Mi fuerte preferencia es ir directamente desde una DTD no modificada (dado que está provista externamente y definida por un estándar ISO).
¿Es esto un error JAXB? ¿Me falta algo sobre "espacios de nombres" en los nombres de atributos?
Fwiw, java -version
= "construir 1.6.0_20-b02" y xjc -version
= "xjc versión "JAXB 2.1.10 en JDK 6""
¿Qué DTD es esto? 'xml: lang' es un meta-atributo de esquema XML, por lo que la DTD está describiendo algo que se originó a partir de un esquema, lo que me sugeriría que hay un esquema completo. – skaffman
AFAIK, el editor solo pone a disposición una DTD. Sería difícil imaginar que publican una DTD basada en un esquema, pero no la ponen a disposición. Sin embargo, el autor de algunas herramientas relacionadas me ha preguntado si estoy usando un esquema para generar los objetos JAXB, por lo que podría haber algo por ahí ... –
Gracias por el enlace de Nabble. Hiciste mi vida más fácil. – chaostheory