JAXB: Как использовать автоматически сгенерированные классы из Spring? - PullRequest
2 голосов
/ 13 января 2011

Я использую xjc для генерации классов Java из XSD. Результирующие классы включают в себя только методы получения для типов коллекций, например List, но нет методов установки. Как я могу использовать эти сгенерированные классы в качестве bean-компонентов внутри Spring Framework, то есть как заполнить эти поля данными из applicationContext.xml ?

В ответ на 'duffymo' и 'fatih': На самом деле я могу сказать Spring, чтобы использовать JAXB ObjectFactory и его фабричные методы для создания bean-компонентов,

<bean id="myFactory" class="generated.ObjectFactory" />
<bean id="myBean" factory-bean="myFactory" factory-method="createMyBeanMethod" />

Остается проблема, как заполнить поля коллекции, не имея методов установки?

Ответы [ 5 ]

0 голосов
/ 18 июня 2012

Вместо заполнения ваших xjc-generated bean-компонентов в applicationContext.xml вы можете использовать Java-конфигурацию для этих bean-компонентов.

0 голосов
/ 13 января 2011

Существует расширение для генерации наборов методов для списков, как указано здесь:

Хотя данная ссылка, по-видимому, не работает как ссылка на сайтбыл реорганизован.

Было бы целесообразно отправить вопрос на java.net, чтобы узнать местонахождение установщика-установщика-инжектора.

0 голосов
/ 13 января 2011

Вы можете использовать поле вместо метода получения / установки.

0 голосов
/ 13 января 2011

Поскольку сгенерированный код находится под контролем JAXB, вы не сможете этого сделать.Тем не менее, обходной путь может быть:

Скажем, JAXB создает класс Person для вас, сгенерированные свойства будут защищены.

Вы можете создать новый класс MyPerson, расширяющий класс Person, и поместить метод установки внутриКласс MyPerson.Таким образом, вы можете инициировать свойство из файла конфигурации bean-компонента, и сгенерированный код не отменит ваши изменения.Это может или не может быть подходящим обходным путем для вашего случая, так как я не знаю деталей.

     generated :
     public class Person{
          protected List<Something> somethingList;
          .
          .
     }




     class MyPerson extends Person{
         public void setList(List<Something> somethingList){
             this.somethingList= somethingList;
         }

     }
0 голосов
/ 13 января 2011

Я не верю, что вы можете, потому что они были созданы под контролем JAXB, а не фабрикой бобов Spring.

...