我们的 Java 应用程序需要与 SOAP 服务进行通信。我们使用 Apache CXF 来实现 jaxws 客户端。这些类是由 wsdl2java 根据我们从服务提供商处收到的 WSDL 文件生成的。
不幸的是,该服务提供的符号名称都是大写并用下划线分隔(例如PRODUCT_ATTACHMENT
)。这是非常令人困惑的,因为它与典型的“CamelCase”java 编码约定(例如 ProductAttachment
)不同。
我知道您可以为每个类定义自定义映射。但由于存在大量的类和成员,我想自动执行符号名称转换。
所以我想知道是否有一种方法可以为 wsdl2java 提供某种规则或一段 java 代码(作为钩子(Hook)),告诉它将符号名称 ABC_DEF
转换为 AbcDef
在生成的 java 类中。
如果没有,也许有替代解决方案而不是 Apache CXF 来实现这一点。
最佳答案
您可以尝试使用camelcase-always插入。有examples on stackoverflow与 maven-jaxb2-plugin 的集成。
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>
关于java - Apache CXF java2wsdl : Custom symbol names,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60265965/