Плагин JAXB Упростить все еще можно использовать?

Я попытался решить вопрос здесь плагин JAXB Simplify против *.xjb.

но это не удалось со следующим исключением

"Компилятор не смог соблюсти это упрощение: настройка свойства as-element-property. Он прикреплен не в том месте или не соответствует другим привязкам".

это привязка настройки я использовал

<jaxb:bindings node="//xs:complexType[@name='Op']//xs:choice/xs:element[@name='Time']">
  <simplify:as-element-property/>
</jaxb:bindings>

Страница слияния плагинов Jaxb упрощение не доступна, так кто-нибудь использовал этот плагин и может привести пример, пожалуйста?

Вот моя обновленная схема согласно ответу

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"   attributeFormDefault="unqualified" xmlns="http://www.amadeus.com/APT/FOM/00" targetNamespace="http://www.amadeus.com/APT/FOM/00" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  xsi:schemaLocation="http://java.sun.com/xml/ns/jaxb http://java.sun.com/xml/ns/jaxb/bindingschema_2_0.xsd"  xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" xmlns:simplify="http://jaxb2-commons.dev.java.net/basic/simplify" jaxb:extensionBindingPrefixes="simplify">  
 ...
 ...
<xs:complexType>
  <xs:sequence>
     <xs:choice minOccurs="1" maxOccurs="1">
        <xs:element name="Time" type="xs:dateTime" minOccurs="1" maxOccurs="1">
            <xs:annotation>                 
              <xs:appinfo>
                <simplify:as-element-property />
              </xs:appinfo>
            </xs:annotation>
        </xs:element>            
        ... ...
     </xs:choice>
     ...

Я получил исключение во время сборки maven, например "Неподдерживаемое пространство имен привязки" http://jaxb2-commons.dev.java.net/basic/simplify ". Возможно, вы имели в виду" http://jaxb.dev.java.net/plugin/code-injector "?"

1 ответ

Решение

Отказ от ответственности: я являюсь автором плагина Simplify, который является частью Основ JAXB2.

Плагин для проекта хорошо работает, но мой сервер документации время от времени умирает. У меня нет ресурсов для поддержки собственного хостинга, поэтому я перевожу все свои проекты на GitHub.

Вы можете найти проект Основы JAXB2 здесь:

https://github.com/highsource/jaxb2-basics

Документация еще не перемещена, но вот ссылка на один из тестовых проектов, который ее использует:

https://github.com/highsource/jaxb2-basics/tree/master/tests/issues

Ниже приведен фрагмент схемы, которая использует simplify:as-element-property настройки:

<xs:complexType name="gh1" mixed="true">
    <xs:sequence>
        <xs:element name="a" type="xs:string">
            <xs:annotation>
            <xs:appinfo>
                <simplify:as-element-property/>
            </xs:appinfo>
        </xs:annotation>
        </xs:element>
        <xs:element name="b" type="xs:int"/>
    </xs:sequence> 
</xs:complexType>

Я верну сервер в рабочее состояние через несколько часов.

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


Обновить

Эта ошибка:

"Unsupported binding namespace "http://jaxb2-commons.dev.java.net/basic/simplify". Perhaps you meant "http://jaxb.dev.java.net/plugin/code-injector"?"

Означает, что плагин отсутствует или не активирован. Я полагаю, вы используете maven-jaxb2-plugin, Затем убедитесь, что у вас есть jaxb2-basics как плагин JAXB2, а также включены -Xsimplify переключатель. Вот пример:

        <plugin>
            <groupId>org.jvnet.jaxb2.maven2</groupId>
            <artifactId>maven-jaxb2-plugin</artifactId>
            <configuration>
                <extension>true</extension>
                <args>
                    <arg>-Xsimplify</arg>
                </args>
                <plugins>
                    <plugin>
                        <groupId>org.jvnet.jaxb2_commons</groupId>
                        <artifactId>jaxb2-basics</artifactId>
                    </plugin>
                </plugins>
            </configuration>
        </plugin>

Далее, ваша первоначальная ошибка "невозможно выполнить эту... настройку" может быть связана с тем, ГДЕ вы размещаете настройку. Вы поместили его на элемент (что я и сделаю).

Но в некоторых случаях XJC считывает эти настройки из других компонентов схемы. В вашем случае попытайтесь разместить настройку на xs:choice вместо.

Если ошибка не устранена, сообщите о проблеме на GitHub, предоставив минимальную схему, которая воспроизводит ошибку. Я позабочусь об этом тогда.

Обновление 2

Сервер снова подключен, но я переместил документацию плагина JAXB2 Simplify на GitHub:

https://github.com/highsource/jaxb2-basics/wiki/JAXB2-Simplify-Plugin

Обновление 3

Окончательное решение с версией 0.9.1 приведено здесь:

https://github.com/highsource/jaxb2-basics/issues/3

Настройте класс с помощью:

<simplify:property name="type2OrType3"> <simplify:as-element-property/> </simplify:property>

Пример.

Другие вопросы по тегам