Объекты запроса / ответа - PullRequest
1 голос
/ 10 мая 2010

Я планирую использовать реализацию остальных CXF. Я имею в виду просто аннотировать мои классы сущностей аннотациями jaxb, такими как @XmlRootElement, для создания объектов ответа . Преимущество заключается в избежании дублирования кода. Что касается (клиента) объекта запроса , который будет использоваться отдельным веб-приложением, я подумываю «скопировать» классы сущностей, удалить аннотации orm и добавить аннотации jaxb.

На основании вышеизложенного:

  1. Есть ли опасность создания объектов запроса / ответа из классов сущностей?
  2. Мои классы сущностей содержат реляционные свойства. Если бы я пометил их с помощью @XmlRootElement, как я могу предотвратить добавление (или рассмотрение отдельно) реляционных свойств к объекту ответа?
  3. Есть ли лучший / более простой способ создания объектов запроса вместо копирования классов сущностей, удаления / добавления аннотаций?

Ответы [ 3 ]

1 голос
/ 10 мая 2010

Вы можете объединить множество аннотаций без проблем. Например, вы можете иметь:

@Column
@XmlElement
private String name;

Таким образом, вы можете повторно использовать один и тот же класс для любых целей, без необходимости копировать его.

Упомянутый вами проект - hyperjaxb3 - делает именно это - он генерирует аннотации JAXB и JPA на основе схемы.

0 голосов
/ 08 июля 2010

Есть ли опасность создания объекты запроса / ответа от объекта классы?

Ваши объекты запроса / ответа должны быть в состоянии отображаться в XML. Существуют некоторые болевые точки при отображении сущностей JPA в XML с использованием стандартных API JAXB:

  • Двунаправленные отношения
  • Сочетание клавиш
  • Встроенные классы ключей
  • Ленивая загрузка

EclipseLink JAXB (MOXy) имеет специальные расширения для отображения сущностей JPA в XML:

Мои классы сущностей содержат реляционные свойства, если бы я их комментировал с @XmlRootElement, как я могу остановить реляционные свойства от добавлен (или рассматривается отдельно) к объект ответа?

Вы можете использовать аннотацию JAXB @XmlTransient, чтобы предотвратить преобразование поля в / fom XML.

Есть ли лучший / более простой способ создания запрашивать объекты, а не копировать классы сущностей, удаление / добавление Аннотации

Я бы рекомендовал использовать ваши объекты напрямую. Для примера см .:

0 голосов
/ 10 мая 2010
  1. Одна потенциальная опасность, которую я вижу при использовании сущностей для управления XML, может связать потребителей XML с макетом базы данных (если у вас есть геттеры и сеттеры для всех столбцов базы данных)
  2. @javax.xml.bind.annotation.XmlTransient удалит поле из схемы (JAXB проигнорирует его). Вы также можете настроить с @javax.xml.bind.annotation.XmlAccessorType
  3. Есть альтернативные способы, но я не уверен, насколько лучше.

За ответ @ bohzo, вам даже не нужно копировать свои сущности. Но если вы этого не сделаете, вы потенциально связываете свои классы сущностей с XML, что означает, что всякий раз, когда вы реорганизуете свои сущности, вы должны обновлять всех клиентов (поскольку сгенерированная схема будет отличаться!) На мой взгляд, схема XML для Объекты ответа / запроса должны разрабатываться отдельно от любых объектов, чтобы они могли лучше обслуживать свои цели. Это освобождает субъекты от рефакторинга в будущем и позволяет сконцентрироваться на их цели.

...