Инструктаж wsimport/jaxb для использования существующих классов модели / домена
Я смиренно прошу вашей помощи шаг за шагом.
Я работаю над проектом, который управляется Apache Maven. В проекте есть несколько подмодулей
/pom.xml
/model/pom.xml
/server/pom.xml
/client/ws/pom.xml
/client/vaadin/pom.xml
- Сервер и WS зависит от модели
Ваадин зависит от WS
"модельный" проект У меня есть свои рукописные доменные классы, которые аннотируются с использованием аннотаций JPA и XML. Пример ниже:
пакет com.example.domain.auth;
@Entity @XmlType(name = "User", namespace = "auth.domain.example.com") @XmlAccessorType(javax.xml.bind.annotation.XmlAccessType.FIELD) public class User implements Serializable { @NotNull private String username; @NotNull private String password; @Temporal(value = TemporalType.DATE) private java.util.Date accountExpirationDate; public void veryComplexAction() { ... } // getters & setters
}
"Серверный" проект содержит несколько веб-сервисов, которые используют доменные классы в качестве типов ввода и возврата.
- Проект "ws" (client/ws) - это просто проект, в котором есть только клиенты WebService.
Построение проекта выполняется maven. (wsgen & wsimport wsdls, используя относительные пути)
У меня нет доступа к файлам XSD (хорошо, но я делаю), так как они генерируются во время выполнения плагина wsgen в проекте "server" и генерируют (полуслучайные) имена, которые могут изменяться в процессе разработки, так как они генерируются wsgen.
Теперь, когда у меня есть доступ к моему модельному проекту, я бы хотел использовать его в проектах "ws" и "vaadin" без необходимости использовать сгенерированную модель, в которой нет методов, которые я реализовал в проекте "model".
Я обнаружил, что мне нужно использовать файл "эпизод", чтобы дать команду компилятору jaxb пропустить генерацию классов домена.
Дело в том, что я не могу заставить его работать, потому что все приводят пример, где XSD уже доступен, который в моем проекте генерируется во время процесса сборки, а содержимое файла "UserService_schema1.xsd" в следующей сборке может быть в файле "UserService_schemaN.xsd".
Приемлемое решение:
- генерация статических xsd во время процесса сборки, которые явно предоставили имена и остаются такими же навсегда (даже если регенерированы) и используют файлы эпизодов для генерации этих xsd, используемые позже в wsimport или
- любое решение, которое является полностью автоматическим, чтобы я мог набрать "mvn clean package", и все будет сделано для меня, как: создание статических xsd, эпизодов, wsdls, классов-оболочек клиента веб-службы с использованием доменной модели из проекта "модель". (нет ручного копирования файлов Java или файлов эпизодов)
Что я хотел бы получить (и, вероятно, не только я) пример проекта или пошаговое руководство о том, как повторно использовать существующую модель домена в клиентском проекте веб-сервиса, который управляется как подмодуль проекта maven. Это может быть даже с одним классом, интерфейсом, перечислением. Просто простой POJO, демонстрирующий, как все настроить.
Что я уже проверил:
http://stackru.com/questions/11745465/jaxb-my-own-domain-model-and-suggestions
http://stackru.com/questions/15907973/how-to-remove-auto-generated-classes-in-jax-ws-clients/16007685#16007685
http://jamablog.blogspot.com/2007/08/how-to-make-jax-ws-client-to-reuse.html
http://jamablog.blogspot.com/2007/08/how-to-make-jax-ws-client-reuse.html
http://sr-it.eu/wordpress/?p=135
http://metro.1045641.n5.nabble.com/Reusing-entity-classes-with-JAX-WS-bottom-up-td1061083.html
1 ответ
У нас есть аналогичная установка. Мы использовали eclipse link и apache cxf вместе с jaxws. Мы не генерируем модель на стороне клиента. Мы используем существующие доменные объекты. EclipseLink помогает вам аннотировать доменные объекты в файле XML. так как наши доменные объекты находятся в отдельном jar, мы не аннотируем доменные объекты, а используем файл xml в проекте ws, чтобы указать, как интерпретировать доменные объекты.
Я не соединил это, поэтому не могу предоставить вам пошаговые инструкции.