Как включить типы вне сгенерированного пакета в jsonix?
Я исключил некоторые типы XML из поколения jaxb2, поскольку соответствующие классы уже существуют в Java. Поколение отлично работает и классы основаны.
Когда я пытаюсь включить типы в этом руководстве, jsonix ищет классы только в пакете с сгенерированными классами jaxb2. Таким образом, он выглядит сгенерированным.entity.Position вместо класса entity.Position.
...
<jaxb:bindings node="//xs:complexType[@name='PositionType']">
<jaxb:class ref="entity.Position"/>
</jaxb:bindings>
<jaxb:bindings node="//xs:complexType[@name='MoveType']">
<jaxb:class ref="entity.Move"/>
</jaxb:bindings>
<jsonix:mapping package="entity">
<jsonix:includes>
<jsonix:type name="Position"/>
</jsonix:includes>
</jsonix:mapping>
...
1 ответ
Автор Jsonix здесь.
Включает / исключает конфигурацию не то, что вы, вероятно, думаете, что делает. Он просто фильтрует типы или элементы, которые вы хотите включить в ваше отображение. Это позволяет создавать меньшие сопоставления только с теми вещами, которые вам нужны.
Тем не менее, сопоставления генерируются для каждого пространства имен / пакета. Вы не можете помещать типы из разных пакетов в одно отображение. Однако вы можете создать модуль, который будет содержать несколько пакетов. Конфигурация похожа на:
<jsonix:module name="CSW_2_0_2">
<jsonix:mapping package="net.opengis.csw.v_2_0_2" name="CSW_2_0_2"/>
<jsonix:mapping package="org.hisrc.dc.elements.v_1_1" name="DC_1_1"/>
<jsonix:mapping package="org.hisrc.dc.terms" name="DCT"/>
</jsonix:module>
Далее вы используете jaxb:class/@ref
, Это не очень хорошо для Jsonix, потому что с этим вы говорите: "Меня не волнует модель XML Schema, просто используйте этот класс Java". Таким образом, компилятор схемы (я имею в виду базовый компилятор схемы JAXB XJC) не генерирует соответствующие модели. Короче говоря, Jsonix Schema Compiler не будет компилировать ваши классы Java в отображения XML<->JS. Это только для XML-схем.