我们的java应用程序需要与SOAP服务通信。我们使用Apache CXF来实现一个jaxws客户端。这些类是由wsdl2java根据我们从服务提供者处收到的WSDL文件生成的。
不幸的是,服务提供的符号名称都是大写的,并以下划线分隔(例如PRODUCT_ATTACHMENT)。这非常令人困惑,因为它与典型的"CamelCase“java编码约定(例如ProductAttachment)不同。
我知道您可以为每个类定义自定义映射。但是由于有大量的类和成员,我想自动化符号名称转换。
所以我想知道是否有一种方法可以为wsdl2java提供某种规则或java代码(作为钩子),告诉它在生成的java类中将符号名称ABC_DEF转换为AbcDef。
如果没有,也许有替代Apache CXF的解决方案来实现这一点。
发布于 2020-02-18 15:40:10
你可以尝试使用camelcase-always插件。有它与maven-jaxb2- examples on stackoverflow集成的插件。
cxf-codegen-plugin配置示例:
<dependencies>
<dependency>
<groupId>org.andromda.thirdparty.jaxb2_commons</groupId>
<artifactId>camelcase-always</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
<plugins>
<plugin>
<groupId>org.apache.cxf</groupId>
<artifactId>cxf-codegen-plugin</artifactId>
<version>3.3.5</version>
<executions>
<execution>
<id>generate-sources</id>
<phase>generate-sources</phase>
<configuration>
<sourceRoot>${project.build.directory}/generated-sources/cxf</sourceRoot>
<wsdlOptions>
<wsdlOption>
<wsdl>${basedir}/src/main/resources/wsdl/customer-service.wsdl</wsdl>
<wsdlLocation>classpath:wsdl/customer-service.wsdl</wsdlLocation>
<extraargs>
<extraarg>-verbose</extraarg>
<extraarg>-xjc-camelcase-always</extraarg>
</extraargs>
</wsdlOption>
<bindingFiles>
<bindingFile>${basedir}/src/main/resources/wsdl/bindings/customer-service-bindings.xjb</bindingFile>
</bindingFiles>
</wsdlOptions>
</configuration>
<goals>
<goal>wsdl2java</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.andromda.thirdparty.jaxb2_commons</groupId>
<artifactId>camelcase-always</artifactId>
<version>1.0</version>
</dependency>
</dependencies>
</plugin>
</plugins>https://stackoverflow.com/questions/60265965
复制相似问题