Изменение стратегии именования Hyperjaxb3 между 0.5.6 и 0.6.2
У нас есть значительная кодовая база, которая использует Hyperjaxb3 для аннотирования классов Java, которые генерируются с использованием xjc (наряду с другими плагинами xjc, в том числе и самодельными).
Мы пытаемся перейти с версии Hyperjaxb3 0.5.6 на 0.6.2, но столкнулись с серьезной проблемой, связанной с очевидным изменением стратегии именования между этими версиями.
В частности, когда имя complexType, такое как "OneTwo", приводит к имени таблицы "ONETWO" в 0.5.6, тогда как в 0.6.2 имя таблицы - "ONE_TWO". То же самое для имен столбцов.
Мы очень сильно предпочитаем НЕ рефакторировать сотни запросов, чтобы учесть такое изменение имен (хотя более новое, более традиционное именование SQL, безусловно, имеет смысл - мы хотели бы, чтобы это было поведение по умолчанию, когда этот проект начался шесть лет назад).
Есть ли простой способ перейти на старую стратегию именования? В противном случае, можете ли вы предоставить подробную информацию о том, как именно расширить Hyperjaxb3 с помощью собственной стратегии именования?
Посмотрев на этот или этот тест, нам не совсем ясно, что нам нужно сделать с нашим pom, чтобы указать другой класс стратегии именования, и Руководство по расширению в настоящее время пусто.
<plugin>
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<configuration>
<extension>true</extension>
<plugins>
<plugin>
<groupId>org.jvnet.jaxb2_commons</groupId>
<artifactId>jaxb2-basics</artifactId>
<version>${jaxb.commons.version}</version>
</plugin>
<plugin>
<groupId>org.jvnet.hyperjaxb3</groupId>
<artifactId>hyperjaxb3-ejb-plugin</artifactId>
<version>${hyperjaxb3.version}</version>
</plugin>
<plugin>
<groupId>${project.groupId}</groupId>
<artifactId>jaxb-x12</artifactId>
<version>${project.version}</version>
</plugin>
</plugins>
<args>
<arg>-enableIntrospection</arg>
<arg>-Xcopyable</arg>
<arg>-Xequals</arg>
<arg>-XhashCode</arg>
<arg>-Xinheritance</arg>
<arg>-Xhyperjaxb3-ejb</arg>
<arg>-Xx12</arg>
</args>
</configuration>
</plugin>
1 ответ
Автор HJ3 здесь.
Взгляните на тестовый проект с пользовательскими именами. Он реализует и настраивает собственную стратегию именования.
Решение состоит из двух частей: реализация стратегии именования и настройка этой реализации.
Реализация именования должна реализовывать org.jvnet.hyperjaxb3.ejb.strategy.naming.Naming
интерфейс. Проще всего было бы унаследовать от org.jvnet.hyperjaxb3.ejb.strategy.naming.impl.DefaultNaming
,
Для настройки нужно создать ресурс /org/jvnet/hyperjaxb3/ejb/plugin/custom/applicationContext.xml
которая в основном является конфигурацией Spring XML. Там определите бин с именем naming
:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd">
<bean name="naming" class="com.acme.foo.MyNaming">
<property name="reservedNames" ref="reservedNames"/>
</bean>
</beans>
Это заменит стандартную стратегию именования.