27.2. 生成起始点代码


概述

JAX-WS 指定从 WSDL 中定义的服务到将该服务作为服务提供商实施的 Java 类的详细映射。由 wsdl:portType 元素定义的逻辑接口映射到服务端点接口(SEI)。WSDL 中定义的任何复杂类型都会映射到 Java 类,按照 XML 绑定(JAXB)规范的 Java 架构定义映射。wsdl:service 元素定义的端点也被生成到 Java 类中,供消费者用于访问实施该服务的服务供应商。

cxf-codegen-plugin Maven 插件会生成这个代码。它还提供用于为您的实施生成起点代码的选项。代码生成器提供了多个控制生成的代码的选项。

运行代码生成器

例 27.1 “服务代码生成” 显示如何使用代码生成器为服务生成起点代码。

例 27.1. 服务代码生成

<plugin>
    <groupId>org.apache.cxf</groupId>
    <artifactId>cxf-codegen-plugin</artifactId>
    <version>${cxf.version}</version>
    <executions>
        <execution>
            <id>generate-sources</id>
            <phase>generate-sources</phase>
            <configuration>
                <sourceRoot>outputDir</sourceRoot>
                <wsdlOptions>
                    <wsdlOption>
                        <wsdl>wsdl</wsdl>
                        <extraargs>
                            <extraarg>-server</extraarg>
                            <extraarg>-impl</extraarg>
                        </extraargs>
                    </wsdlOption>
                </wsdlOptions>
            </configuration>
            <goals>
                <goal>wsdl2java</goal>
            </goals>
       </execution>
    </executions>
</plugin>

它执行以下操作:

  • impl 选项为 WSDL 合同中的每个 wsdl:portType 元素生成 shell 实施类。
  • server 选项生成一个简单的 main (),以作为独立应用程序运行您的服务提供商。
  • sourceRoot 指定生成的代码被写入名为 outputDir 的目录。
  • WSDL 元素指定 生成代码的 WSDL 合同。

有关代码生成器选项的完整列表,请参阅 第 44.2 节 “cxf-codegen-plugin”

生成的代码

表 27.1 “为服务提供商生成的类” 描述为创建服务提供商生成的文件。

表 27.1. 为服务提供商生成的类
File描述

portTypeName.java

SEI。此文件包含您的服务供应商实施的接口。您不应该编辑这个文件。

serviceName.java

端点。此文件包含 Java 类使用者,用于向服务发出请求。

portTypeNameImpl.java

skeleton 实施类。修改此文件以构建您的服务供应商。

portTypeNameServer.java

允许将服务提供商部署为独立过程的基本服务器主线。更多信息请参阅 第 31 章 发布服务

此外,代码生成器将为 WSDL 合同中定义的所有类型生成 Java 类。

生成的软件包

生成的代码将基于 WSDL 合同中使用的命名空间放入软件包中。为支持服务(基于 wsdl:portType 元素、wsdl:service 元素和 wsdl:port 元素)生成的类放置在基于 WSDL 合同的目标命名空间中的软件包中。为实施合同元素中定义的 类型 类将基于 type 元素的 targetNamespace 属性放入 软件包中

映射算法如下:

  1. 前面的 http://urn:// 剥离命名空间。
  2. 如果命名空间中的第一个字符串是有效的互联网域,例如以 .com.gov 结尾,则从字符串中剥离。www. 会从字符串中剥离,其余两个组件则被视为软盘。
  3. 如果命名空间中的最终字符串以 .xxx.xx 的文件扩展结尾,则会剥离扩展。
  4. 命名空间中的剩余的字符串会附加到生成的字符串中,并按点分开。
  5. 所有字母都为小写。
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.