java - Apache CXF java2wsdl : Custom symbol names

标签 java soap cxf jax-ws wsdl2java

我们的 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/

相关文章:

java - Java中递归地反转链表

java - 删除 "final"关键字会影响二进制兼容性吗?

java - Apache CXF WS 中的请求为空

java - 使用两种不同的 JAX-WS 客户端实现

java - JBOSS:无效算法http://www.w3.org/TR/2001/REC-xml-c14n-20010315(InclusiveC14N)

java - 列表添加功能无法正常运行?

java - 我如何让我的代码将数据连接在一起而不是用每个新流覆盖 .txt 文件

php - SoapFault 异常 [HTTP] 无法连接到主机 : With Local SSL Certificate

java - Soap 如何支持异步调用而 Rest 不支持?

linux - 分配服务器CPU核心来执行特定调用