32.2. XML 命名空间映射

概述

XML 架构类型、组和元素定义通过使用命名空间进行限定。命名空间可防止使用相同名称的实体间的命名冲突。Java 软件包具有类似目的。因此,Apache CXF 将架构文件的目标命名空间映射到包含实施架构文档中定义结构所需的类的软件包。

软件包命名

生成的软件包的名称派生自 schema 的目标命名空间,该算法来自以下算法:

  1. URI 方案(如果存在)被剥离。

    注意

    Apache CXF 将仅剥离 http:https:urn: scheme。

    例如,命名空间 http:\\www.widgetvendor.com\types\widgetTypes.xsd 变为 \\widgetvendor.com\types\widgetTypes.xsd

  2. 结尾的文件类型标识符(如果存在)会被剥离。

    例如: \\www.widgetvendor.com\types\widgetTypes.xsd become \\widgetvendor.com\types\widgetTypes.

  3. 生成的字符串使用 /: 作为分隔符,被分为字符串列表。

    因此,\\www.widgetvendor.com\types\widgetTypes 变成 list {"www.widegetvendor.com", "types", "widgetTypes"}.

  4. 如果列表中的第一个字符串是互联网域名,则如下片段:

    1. 前导 www. 被剥离。
    2. 剩余的字符串将拆分为组件部分,使用 . 作为分隔符。
    3. 这个列表的顺序会被反转。

      因此, {"www.widegetvendor.com", "types", "widgetTypes"} become {"com", "widegetvendor", "types", "widgetTypes"}

      注意

      Internet 域名以下列之一结尾: .com.net.edu.org.gov 或两个字母国家代码之一。

  5. 字符串转换为所有小写。

    因此, {"com", "widegetvendor", "types", "widgetTypes"} become {"com", "widegetvendor", "types", "widgettypes"}.

  6. 字符串被规范化为有效的 Java 软件包名称组件,如下所示:

    1. 如果字符串包含任何特殊字符,则特殊字符将转换为下划线(_)。
    2. 如果有任何字符串为 Java 关键字,则关键字前缀为下划线(_)。
    3. 如果有任何字符串以 numeral 开头,则该字符串的前缀为下划线(_)。
  7. 字符串使用 . 作为分隔符来串联。

    因此, {"com", "widegetvendor", "types", "widgettypes"} 成为软件包名称 com.widgetvendor.types.widgettypes.

命名空间 http:\\www.widgetvendor.com\types\widgetTypes.xsd 中定义的 XML 架构结构映射到 Java 软件包 com.widgetvendor.types.widgettypes.widgettypes。

软件包内容

生成的 JAXB 生成的软件包包含以下内容:

  • 类实施架构中定义的各种复杂类型

    有关复杂类型映射的详情,请参考 第 35 章 使用复杂类型

  • 使用枚举面市的任何简单类型进行 枚举 类型

    有关如何映射枚举的更多信息,请参阅 第 34.3 节 “枚举”

  • 一个公共 对象工厂 类,其中包含用于从架构中实例化对象的方法

    有关 ObjectFactory 类的更多信息,请参阅 第 32.3 节 “对象因素”

  • package-info.java 文件,提供有关软件包中类的元数据