32.2. XML 命名空间映射
概述
XML 架构类型、组和元素定义使用命名空间进行范围。命名空间可防止使用相同名称的实体之间可能存在命名。Java 软件包提供了类似目的。因此,Apache CXF 将 schema 文档的目标命名空间映射到包含实现架构文档中定义的结构所必需的软件包中。
软件包命名
URI 方案(如果存在)被剥离。
注意Apache CXF 将仅剥离 http:、https: 和 urn: 方案。
例如,命名空间
http:\\www.widgetvendor.com\types\widgetTypes.xsd
变为\\widgetvendor.com\types\widgetTypes.xsd
。尾随文件类型标识符(如果存在)。
例如,
\\www.widgetvendor.com\types\widgetTypes.xsd
变为\\widgetvendor.com\types\widgetTypes
。生成的字符串使用
/
和:
作为分隔符分成字符串列表。因此,
\\www.widgetvendor.com\types\widgetTypes
变为列表{"www.widegetvendor.com", "types", "widgetTypes"}
。如果列表中的第一个字符串是一个互联网域名,它被处理如下:
-
领导的
www.
被剥离。 -
剩余的字符串使用
.
作为分隔符,被分成多个部分。 列表的顺序被撤销。
因此,
{"www.widegetvendor.com", "types", "widgetTypes"}
变为{"com", "widegetvendor", "types", "widgetTypes"}
注意Internet 域名以以下之一结尾:
.com
、.net
、.edu
、.org
、.gov
,或位于两个字母国家代码之一。
-
领导的
字符串将转换为所有小写。
因此,
{"com", "widegetvendor", "types", "widgetTypes"}
变为{"com", "widegetvendor", "types", "widgettypes"}
。字符串被规范化为有效的 Java 软件包名称组件,如下所示:
-
如果字符串包含任何特殊字符,则特殊字符将转换为下划线(
_
)。 -
如果有任何字符串是 Java 关键字,则关键字以下划线(
_
_)作为前缀。 -
如果有任何字符串以 numeral 开头,则字符串以下划线(
_
)作为前缀。
-
如果字符串包含任何特殊字符,则特殊字符将转换为下划线(
字符串使用
.
作为分隔符进行串联。因此,
{"com", "widegetvendor", "types", "widgettypes"}
变为软件包名称 com.widgetvendor.types.widgettypes。
命名空间 http:\\www.widgetvendor.com\types\widgetTypes.xsd
中定义的 XML Schema 结构映射到 Java 软件包 com.widgetvendor.types.widgettypes。
软件包内容
一个类实现架构中定义的每个复杂类型
有关复杂类型映射的详情,请参考 第 35 章 使用复杂类型。
使用
enumeration
facet 定义的任何简单类型的 enum 类型有关如何映射枚举的更多信息,请参阅 第 34.3 节 “Enumerations”。
一个公共
ObjectFactory
类,其中包含从 schema 中实例化对象的方法如需有关
ObjectFactory
类的更多信息,请参阅 第 32.3 节 “Object Factory”。-
一个
package-info.java
文件,提供有关软件包中类的元数据