【问题标题】:Apache CXF java2wsdl: Custom symbol namesApache CXF java2wsdl:自定义符号名称
【发布时间】:2020-06-01 14:13:49
【问题描述】:

我们的 java 应用程序需要与 SOAP 服务进行通信。我们使用 Apache CXF 来实现一个 jaxws 客户端。这些类是由 wsdl2java 从我们从服务提供者那里收到的 WSDL 文件生成的。

不幸的是,服务提供的符号名称都是大写和下划线分隔的(例如PRODUCT_ATTACHMENT)。这非常令人困惑,因为它不同于典型的“CamelCase”Java 编码约定(例如ProductAttachment)。

我知道您可以为每个类定义自定义映射。但是由于有大量的类和成员,我想自动化符号名称转换。

所以我想知道是否有办法为 wsdl2java 提供某种规则或一段 java 代码(作为钩子),告诉它在生成的 java 类中将符号名称 ABC_DEF 转换为 AbcDef

如果没有,也许有替代解决方案而不是 Apache CXF 允许这样做。

【问题讨论】:

    标签: java soap cxf jax-ws wsdl2java


    【解决方案1】:

    您可以尝试使用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>
    

    【讨论】:

      猜你喜欢
      • 2012-09-18
      • 2018-10-24
      • 2019-07-21
      • 2017-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多