次のプロジェクト構造があります。
サービス親
|__サービススキーマ
|__サービスデータベース
|__サービス契約
|__サービス実装
最終的に、Web サービスを介して渡されるオブジェクトが最終的にデータベースに格納される必要があるため (変換は必要ありません)、hyperjaxb3 を使用しています。
モジュールservice-schemasで、Web サービスで使用する XSD スキーマを定義しました。service-databaseは、hyperjaxb3 を使用して JPA-JAXB オブジェクトを生成します。service-contractは、cxf-codegen-plugin Maven プラグインを使用して Java サービス インターフェイスを生成します。service-implementationが最終的な Web サービスの実装になります。考え方はOKだと思います。ただし、 baseCustomClassを拡張するには JPA クラス (hyperjaxb3 を使用して生成したもの) が必要なため、hyperjaxb3 と cxf-codegen-plugin を使用すると問題が発生します。問題は、たとえば Web サービス メソッドpersitCustom(CustomType)に対してテストを作成すると、XML がCustomTypeに逆シリアル化されることです。cxf-codegen-plugin (サービス インターフェイスの生成に使用したツール) によって生成されます。現在、そのクラスは、hyperjaxb3 によって生成された CustomType と正確には一致しません(コンパイル時には問題はありませんが、両方のクラスが「ほぼ」同じ、同じプロパティ、同じパッケージなどであるためです...) 問題は、どのように行うかですサービスの実装に、cxf-codegen-pluginで生成されたクラスではなく、hyperjaxb3 で生成されたクラスを使用するように強制しています。
これらは私が使用しているバージョンです
<plugin>
<groupId>org.jvnet.hyperjaxb3</groupId>
<artifactId>maven-hyperjaxb3-plugin</artifactId>
<version>0.6.0</version>
<executions>
<execution>
<goals>
<goal>generate</goal>
</goals>
</execution>
</executions>
<configuration>
<extension>true</extension>
<args>
<arg>-Xinheritance</arg>
</args>
</configuration>
</plugin>
これは cxf-codegen-plugin 用です
<plugin>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-codegen-plugin</artifactId>
<version>2.7.9</version>
<executions>
<execution>
<id>process-sources</id>
<phase>generate-sources</phase>
<configuration>
<sourceRoot>${project.build.directory}/generated-sources/cxf</sourceRoot>
<wsdlOptions>
<wsdlOption>
<wsdl>
${project.build.directory}/src/main/resources/SharedModel/sampleWeb/service.wsdl
</wsdl>
<wsdlLocation>classpath*:sampleWeb/service.wsdl</wsdlLocation>
<bindingFiles/>
</wsdlOption>
</wsdlOptions>
</configuration>
<goals>
<goal>wsdl2java</goal>
</goals>
</execution>
</executions>
</plugin>