JAXB, Не могущий Обработать Атрибут с Двоеточием (:) на имя?

Я пытаюсь использовать JAXB для неМаршалла XML-файлы, схема которых определяется DTD (тьфу!).

Внешний поставщик DTD указал один из атрибутов элемента как xml:lang:


Это входит в xjc-сгенерированный класс (стандартное поколение; никакое *.xjb волшебство) как:

@XmlAttribute(name = "xml:lang", required = true)
@XmlJavaTypeAdapter(NormalizedStringAdapter.class)
protected String xmlLang;

Однако при немаршалинге допустимых XML-файлов с JAXB, xmlLang атрибут всегда null.

Когда я отредактировал XML-файл, заменив xml:lang с lang и измененный @XmlAttribute для соответствия немаршалинг был успешен (т.е. атрибуты были не -null).

Я действительно находил этот http://old.nabble.com/unmarshalling-ignores-element-attribute-%27xml%27-td22558466.html. Но, разрешение там должно было преобразовать в XML-схему и т.д. Мое решительное предпочтение состоит в том, чтобы пойти прямо от неизменного DTD (так как оно внешне обеспечивается и определяется стандартом ISO).

Действительно ли это - ошибка JAXB? Я пропускаю что-то о "пространствах имен" в названиях атрибута?

FWIW, java -version = "создайте 1.6.0_20-b02" и xjc -version = "версия xjc "JAXB 2.1.10 в JDK 6""

7
задан Jacob Zwiers 9 June 2010 в 13:45
поделиться

1 ответ

Проблема решена путем замены xml: объявлением пространства имен в классе, созданном JAXB:

@XmlAttribute(name = "lang", namespace="http://www.w3.org/XML/1998/namespace", required = true)

В некотором смысле это имеет смысл.

Без такого руководства, как JAXB узнает, как интерпретировать неопределенное иначе пространство имен xml: ? Если, конечно, он не реализовал внутреннюю обработку для xml: , как это сделано в http://java.sun.com/javase/6/docs/api/javax/xml/ stream / XMLStreamReader.html # getNamespaceURI% 28java.lang.String% 29 (см. первое ПРИМЕЧАНИЕ: )

Является ли это ошибкой в ​​генерации xjc аннотированные объекты или ошибка в unmarhaller, или просто требует отображения где-то в процессе xjc , все еще остается открытым вопросом в моей голове.

На данный момент он работает, и все, что для этого требуется, - это немного xjc магии, так что я достаточно счастлив.

5
ответ дан 7 December 2019 в 09:57
поделиться
Другие вопросы по тегам:

Похожие вопросы: