Мы сталкиваемся с проблемой при сортировке объекта в XML с помощью JAXB.В нашем примере кода (https://github.com/fbe/JaxbIssueTracker, простой проект maven, test-case демонстрирует, что происходит не так), у нас есть три типа:
XSD можно найти здесь: github
Родительский тип абстрактный, бетон расширяет родительский, родительский ссылается наугнанный тип в последовательности.Из этих xsd-файлов JAVA-файлы генерируются JAXB (xjc) без каких-либо предупреждений или сообщений об ошибках.
При маршалинге конкретного типа JAXB генерирует следующий xml-вывод:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns3:concreteType xmlns:ns2="http://www.felixbecker.name/parent" xmlns="http://www.felixbecker.name/hijacked" xmlns:ns3="http://www.felixbecker.name/concrete">
<ns2:hijacked>
<value>foobar</value>
</ns2:hijacked>
</ns3:concreteType>
Как вы можете видеть, угнанный тип неверно использует префикс ns2, который ссылается напространство имен родительского типа - но вместо этого ему следует использовать пространство имен по умолчанию, которое ссылается на захваченное пространство имен.
JAXB не может демонтировать этот сгенерированный xml, хотя он генерируется сам по себе с активированной проверкой схемы.
Что здесь не так?Не нарушена ли xml-схема?Или JAXB не может правильно обрабатывать наследование?
Удаление абстрактного атрибута из parent.xsd не оказало никакого влияния на возникшую проблему.
Любая помощь будет принята с благодарностью!: -)
Используемые версии (обе неработающие):
- JAXB от JDK 1.6
- JAXB-RI 2.2.5
С уважением,
fbe & ollinux