Плагин 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>