34.6. 简单类型替换


概述

XML 允许使用 xsi:type 属性在兼容类型之间进行简单的类型替换。但是,简单类型的默认映射到 Java 原语类型,但并不完全支持简单的类型替换。运行时可以处理基本的简单类型替换,但信息会丢失。可以自定义代码生成器来生成 Java 类,以便无损失简单的类型替换。

默认映射和 marshaling

由于 Java 原语类型不支持类型替换,因此简单类型的默认映射到 Java 原语类型会显示支持简单类型替换的问题。如果尝试传递 一个简短的 变量,即使定义类型的架构也允许,Java 虚拟机也会忽略。

要解决 Java 类型系统的限制,Apache CXF 允许当元素的 xsi:type 属性的值满足以下条件之一时,Apache CXF 允许简单的类型替换:

  • 它指定一个与元素的 schema 类型兼容的原语类型。
  • 它指定根据元素的 schema 类型的限制派生的类型。
  • 它指定由扩展从元素的 schema 类型派生的复杂类型。

当运行时执行类型替换时,它不会保留元素 xsi:type 属性中指定的类型的任何知识。如果类型替换是从复杂类型到简单类型,则只保留与简单类型相关的值。通过扩展添加的任何其他元素和属性都将丢失。

支持无丢失类型替换

您可以自定义简单类型的生成,以便使用以下方法减少对简单类型替换的丢失支持:

  • globalBindings 自定义元素的 mapSimpleTypeDef 设置为 true

    这指示代码生成器为全局范围中定义的所有名为 simple 类型创建 Java 值类。

    如需更多信息,请参阅 第 38.3 节 “为简单类型生成 Java 类”

  • globalBindings 自定义元素中添加 javaType 元素。

    这指示代码生成器将 XML 架构类型的所有实例映射到 s 的特定类对象。

    如需更多信息,请参阅 第 38.2 节 “指定 XML 架构 Primitive 的 Java 类”

  • baseType 自定义元素添加到您要自定义的特定元素中。

    baseType 自定义元素允许您指定生成的 Java 类型来代表属性。为确保简单类型替换的最佳兼容性,请使用 java.lang.Object 作为基本类型。

    如需更多信息,请参阅 第 38.6 节 “指定元素或属性的基本类型”

返回顶部
Red Hat logoGithubredditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

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

让开源更具包容性

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

關於紅帽

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

Theme

© 2025 Red Hat, Inc.