消除 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>
我有以下项目结构:
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>