Я работаю над проектом по извлечению данных из веб-службы SOAP и храню его в базе данных для последующего использования с использованием JPA. В настоящее время я использую Spring WS в качестве клиента и создаю классы веб-сервисов с использованием JAXB.
Цель состоит в том, чтобы реплицировать все данные, содержащиеся в этих классах (которые довольно большие), в точности в базе данных, и с этой целью мягко заманчиво применять аннотации JPA к сгенерированным классам JAXB. В конечном итоге это кажется опасным, потому что сгенерированные классы кажутся довольно эфемерными, и я бы сделал много работы, повторно применяя аннотации jpa при обновлении кода, если wsdl когда-либо изменился.
Другой вариант заключается в том, чтобы мой клиент webservice копировал данные в объекты JPA, созданные мной, возможно, используя шаблон фабрики. Это отделяет постоянство JPA от возможно изменяющихся прихотей дизайнера WSDL и как-то чувствует себя более безопасным. Он также чувствует себя более безопасным, потому что классы сущностей никогда не могут быть перезаписаны задачей сборки.
Какова наилучшая практика для этой ситуации? Очевидно, что чрезмерная развязка не окупается, когда это означает много объектов передачи данных, но является ли этот случай особенным? Должны ли JAXB создавать классы, которые будут использоваться только в клиенте webservice, и быстро забываются приложением более высокого уровня?
В принципе НЕ меняйте объекты, созданные JAXB. Как вы правильно указали, они изменились бы с каждым незначительным изменением в WSDL.
Наиболее приемлемым процессом будет отделить ваши объекты JAXB и объекты JPA. Было бы два основных преимущества одного и того же
Чтобы передать данные между двумя, вы можете использовать фабричный шаблон или использовать инфраструктуру отображения компонентов, например