Использование клиентских веб-сервисов сгенерированных JAXB классов в качестве объектов JPA

1

Я работаю над проектом по извлечению данных из веб-службы SOAP и храню его в базе данных для последующего использования с использованием JPA. В настоящее время я использую Spring WS в качестве клиента и создаю классы веб-сервисов с использованием JAXB.

Цель состоит в том, чтобы реплицировать все данные, содержащиеся в этих классах (которые довольно большие), в точности в базе данных, и с этой целью мягко заманчиво применять аннотации JPA к сгенерированным классам JAXB. В конечном итоге это кажется опасным, потому что сгенерированные классы кажутся довольно эфемерными, и я бы сделал много работы, повторно применяя аннотации jpa при обновлении кода, если wsdl когда-либо изменился.

Другой вариант заключается в том, чтобы мой клиент webservice копировал данные в объекты JPA, созданные мной, возможно, используя шаблон фабрики. Это отделяет постоянство JPA от возможно изменяющихся прихотей дизайнера WSDL и как-то чувствует себя более безопасным. Он также чувствует себя более безопасным, потому что классы сущностей никогда не могут быть перезаписаны задачей сборки.

Какова наилучшая практика для этой ситуации? Очевидно, что чрезмерная развязка не окупается, когда это означает много объектов передачи данных, но является ли этот случай особенным? Должны ли JAXB создавать классы, которые будут использоваться только в клиенте webservice, и быстро забываются приложением более высокого уровня?

  • 0
    Похоже, вы извлекаете много данных из веб-службы, подразумевая, что в другой системе вся информация сохраняется. Вам нужно превратить это в целую базу данных на вашем конце или вы можете просто использовать веб-сервис для получения сущностей каждый раз?
  • 0
    @isakgilbert Это были вещи с оплатой за запрос ...
Теги:
spring
jpa
web-services
jaxb

1 ответ

1
Лучший ответ

В принципе НЕ меняйте объекты, созданные JAXB. Как вы правильно указали, они изменились бы с каждым незначительным изменением в WSDL.

Наиболее приемлемым процессом будет отделить ваши объекты JAXB и объекты JPA. Было бы два основных преимущества одного и того же

  1. Вы можете изменить поставщика привязки данных на более поздний момент времени, если вы чувствуете, что JAXB слишком медленный или слишком интенсивный
  2. Вы не связываете свой JPA-код с кодом своей базы данных. Поэтому, если завтра ваш WSDL изменится или ваша структура базы данных изменится, на одно из них не влияет.

Чтобы передать данные между двумя, вы можете использовать фабричный шаблон или использовать инфраструктуру отображения компонентов, например

  1. бульдозер
  2. Orika
  3. Другие варианты
  • 0
    Я закончил тем, что не изменил объекты JAXB, спасибо, что спас меня от расширенного кошмара поддержки :)

Ещё вопросы

Сообщество Overcoder
Наверх
Меню