38.5. 自定义修复的值属性映射

概述

默认情况下,代码生成器映射属性定义为具有正常属性的固定值。使用 schema 验证时,Apache CXF 可以强制执行 schema 定义(请参阅 第 24.3.4.7 节 “架构验证类型值”)。但是,使用 schema 验证会增加消息处理时间。

映射具有固定值到 Java 的属性的另一种方法是将其映射到 Java 常量。您可以使用 globalBindings 自定义元素指示代码生成器将固定值属性映射到 Java 常量。您还可以使用 attribute 元素在更本地化的级别上自定义固定值属性到 Java 常量的映射。

全局自定义

您可以通过添加 globalBinding 元素 的固定AttributeAsConstantProperty 属性来更改此行为。将此属性设置为 true 可指示代码生成器将使用 固定 属性定义的任何属性映射到 Java 常数。

例 38.21 “自动自定义以强制生成 Constants” 显示行自定义,它强制代码生成器为具有固定值的属性生成常数。

例 38.21. 自动自定义以强制生成 Constants

<schema targetNamespace="http://widget.com/types/widgetTypes"
        xmlns="http://www.w3.org/2001/XMLSchema"
        xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
        xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
        jaxb:version="2.0">
  <annotation>
    <appinfo>
      <jaxb:globalBindings fixedAttributeAsConstantProperty="true" />
    </appinfo>
  </annotation>
  ...
</schema>

例 38.22 “绑定文件以强制生成 Constants” 显示用于自定义固定属性生成的外部绑定文件。

例 38.22. 绑定文件以强制生成 Constants

<jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
               xmlns:xsd="http://www.w3.org/2001/XMLSchema"
               jaxb:version="2.0">
  <jaxb:bindings schemaLocation="types.xsd">
    <jaxb:globalBindings fixedAttributeAsConstantProperty="true" />
  <jaxb:bindings>
<jaxb:bindings>

本地映射

您可以使用 property 元素的 fixedAttributeAsConstantProperty 属性自定义每个attribute 属性的属性映射。将此属性设置为 true 可指示代码生成器将使用 固定 属性定义的任何属性映射到 Java 常数。

例 38.23 “自动自定义以强制生成 Constants” 显示了一个无线自定义,它强制代码生成器生成带有固定值的单个属性的常量。

例 38.23. 自动自定义以强制生成 Constants

<schema targetNamespace="http://widget.com/types/widgetTypes"
        xmlns="http://www.w3.org/2001/XMLSchema"
        xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
        xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
        jaxb:version="2.0">
  <complexType name="widgetAttr">
    <sequence>
      ...
    </sequence>
    <attribute name="fixer" type="xsd:int" fixed="7">
      <annotation> <appinfo> <jaxb:property fixedAttributeAsConstantProperty="true" /> </appinfo> </annotation>
     </attribute>
  </complexType>
  ...
</schema>

例 38.24 “绑定文件以强制生成 Constants” 显示用于自定义固定属性生成的外部绑定文件。

例 38.24. 绑定文件以强制生成 Constants

<jaxb:bindings xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
               xmlns:xsd="http://www.w3.org/2001/XMLSchema"
               jaxb:version="2.0">
  <jaxb:bindings schemaLocation="types.xsd">
    <jaxb:bindings node="xsd:complexType[@name='widgetAttr']">
      <jaxb:bindings node="xsd:attribute[@name='fixer']">
            <jaxb:property fixedAttributeAsConstantProperty="true" />
        </jaxb:bindings>
    </jaxb:bindings>
  </jaxb:bindings>
<jaxb:bindings>

Java 映射

在默认映射中,所有属性都通过 getter 和 setter 方法映射到标准 Java 属性。当此自定义应用到 使用固定 属性定义的属性时,属性将映射到 Java 常量,如 例 38.25 “将修复的 Value 属性映射到 Java Constant” 所示。

例 38.25. 将修复的 Value 属性映射到 Java Constant

@XmlAttribute
public final static type NAME = value;

type 通过使用 第 34.1 节 “原语类型” 中描述的映射将属性的基本类型映射到 Java 类型来确定。

NAMEattribute 元素的 name 属性的值转换为所有大写字母来确定。

attribute 元素 的固定 属性值决定。

例如: 例 38.23 “自动自定义以强制生成 Constants” 中定义的属性映射,如 例 38.26 “修复了值属性映射到 Java Constant” 所示。

例 38.26. 修复了值属性映射到 Java Constant

@XmlRootElement(name = "widgetAttr")
public class WidgetAttr {

    ...

  @XmlAttribute
  public final static int FIXER = 7;

  ...

}