Могу ли я использовать JAXB для обработки XML-схемы через XML-схему? - PullRequest
1 голос
/ 18 июля 2011

Мне нужно обработать типы и их отношения в XSD (найти все конкретные типы, происходящие от абстрактного типа и т. Д.) На этой странице утверждается, что это возможно через JAXB: http://www.antonioshome.net/blog/2009/20091012-1.php, но я получаю сообщение об ошибке с xjc, поставляемым с Java 6. Ошибка:

[ERROR] Element "{http://www.w3.org/2001/XMLSchema}annotation" shows up in more
than one properties.
  line 248 of file:/C:/tmp/xsdProcessing/XMLSchema.xsd

[ERROR] The following location is relevant to the above error
  line 242 of file:/C:/tmp/xsdProcessing/XMLSchema.xsd

Я видел ссылки на проблему, но я не видел четких объяснений источника проблемы или решения. Итак, возможно ли сегодня использовать JAXB для работы со схемой xml для схемы xml? Если нет, что будет альтернативой? Как JAXB обрабатывает схемы для создания объектов Java?

Ответы [ 3 ]

1 голос
/ 18 июля 2011

Кажется, что ваша XMLSchema неверна. Вы пытались проверить его по инструменту обработки XML (например, Notepad ++ с плагинами XML или XmlSpy)?

0 голосов
/ 23 сентября 2013

У меня возникла та же проблема с JAXB 2.1.10. Кажется, это известная проблема с JAXB в Java 6. Использование следующего файла привязок JAXB решило проблему:

<?xml version="1.0" encoding="UTF-8"?>
<!-- bindings.xml -->
<jaxb:bindings 
    xmlns:xs="http://www.w3.org/2001/XMLSchema"
    xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
    xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
    jaxb:extensionBindingPrefixes="xjc"
    version="2.1">

    <jaxb:bindings schemaLocation="XMLSchema.xsd" node="//xs:element[@name='schema']/xs:complexType/xs:complexContent/xs:extension/xs:sequence[1]">
        <jaxb:property name="SchemaElements"/>
    </jaxb:bindings>
</jaxb:bindings>

Выход:

$ls
XMLSchema.dtd  XMLSchema.xsd  bindings.xml  datatypes.dtd  src  xml.xsd

$xjc -version
xjc version "JAXB 2.1.10 in JDK 6"
JavaTM Architecture for XML Binding(JAXB) Reference Implementation, (build JAXB 2.1.10 in JDK 6)

$xjc -p com.example.document.xsd -d src -extension -b bindings.xml XMLSchema.xsd
parsing a schema...
compiling a schema...
com\example\document\xsd\All.java
com\example\document\xsd\Annotated.java
com\example\document\xsd\Annotation.java
0 голосов
/ 25 августа 2011

Да, вы можете заставить его работать с xjc. Проблема, с которой вы столкнулись, является первым из двух препятствий, с которыми я столкнулся при решении этой проблемы.

Я не совсем ясно об источнике проблемы, но решение - расширение "более простого и лучшего связывания", присутствующее в JAXB RI. Это описано здесь в некоторой степени и в некоторых других старых сообщениях в блоге Kohsuke Kawaguchi, которые я не могу найти прямо сейчас.

У вас должен быть успех, если вы используете флаг -extension при запуске xjc и файл привязки, аналогичный файлу в мой ответ на другой вопрос (вторая проблема, с которой я столкнулся при попытке скомпилировать XMLSchema .xsd).

Если честно, на самом деле я еще не пытался (не) маршалировать какой-либо XML, который импортирует XML-схему, поэтому, возможно, есть еще проблемы, с которыми я еще не сталкивался.

...