消除 hyperjaxb 生成的 类 和 apache cxf 生成的类之间的歧义

Remove ambiguity between hyperjaxb generated classes and apache cxf generated clases

我有以下项目结构:

service-parent

|__service-schemas

|__service-database

|__service-contract

|__service-implementation

我正在使用 hyperjaxb3,因为我最终需要通过 Web 服务传递的 objects 最终存储在数据库中(不需要转换)。

在模块 service-schemas 中,我定义了将在我的 Web 服务中使用的 XSD 模式。 service-database会通过hyperjaxb3使用生成JPA-JAXBobjects。 service-contract 将使用 cxf-codegen-plugin maven 插件生成 java 服务接口。 service-implementation 将是最终的 Web 服务实现。我认为这个想法是可以的。然而,当我使用 hyperjaxb3 和 cxf-codegen-plugin 时,问题就出现了,因为我需要 JPA classes(我使用 hyperjaxb3 生成的那些)来扩展 BaseCustomClass。问题是,当我创建我的测试时,例如,Web 服务方法 persitCustom(CustomType),XML 被反序列化为 CustomType 由 cxf-codegen-plugin 生成(这是我用来生成服务接口的工具)。现在,class 不完全是 hyperjaxb3 生成的 CustomType(即使在编译时这不是问题,因为两个 class 都是 "almost" 相同、相同的属性、相同的包等...)问题是我如何强制我的服务实现使用 hyperjaxb3 生成的 classes 而不是 cxf-codegen-plugin 生成的。

这些是我正在使用的版本

<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>

好的,我找到了一种方法,告诉 cxf-codegen-plugin 在包含冲突类型的命名空间中排除 类。我将此行添加到插件的配置部分。他们在 http://conflicting/types/namespace/ 命名空间

<extraargs>
    <extraarg>-nexclude</extraarg>
    <extraarg>http://conflicting/types/namespace/</extraarg>
</extraargs>