Инструктаж 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, чтобы указать, как интерпретировать доменные объекты.

Я не соединил это, поэтому не могу предоставить вам пошаговые инструкции.

Другие вопросы по тегам