34.2. 通过 Restriction 定义的简单类型
概述
XML Schema 允许您通过从另一个原语类型或简单类型派生新类型来创建简单的类型。使用 simpleType 元素描述简单类型。
使用一个或多个方面限制 基本类型 来描述新类型。这些方面会限制可以在新类型中存储的可能的有效值。例如,您可以定义一个简单的类型 SSN,它是一个正好 9 个字符的字符串。
每个原语 XML 架构类型都有自己的一组可选问题。
步骤
要自行定义简单类型,请执行以下操作:
- 确定您的新简单类型的基本类型。
- 确定哪个限制根据所选基本类型的可用方面定义新类型。
-
使用本节中介绍的语法,在合同的 type 部分输入适当的
simpleType元素。
在 XML 架构中定义一个简单的类型
例 34.1 “简单类型语法” 显示描述简单类型的语法。
例 34.1. 简单类型语法
<simpleType name="typeName"> <restriction base="baseType"> <facet value="value" /> <facet value="value" /> ... </restriction> </simpleType>
类型描述包含在 simpleType 元素中,并由 name 属性的值标识。定义新简单类型的基本类型由 xsd:restriction 元素的基本属性指定。每个 facet 元素都在 限制 元素中指定。可用的 facet 及其有效设置取决于基本类型。例如,xsd:string 有很多方面,包括:
-
length -
minLength -
maxLength -
pattern -
whitespace
例 34.2 “postal Code Simple Type” 显示一个简单的类型定义,它代表了用于美国状态的双字母邮政代码。它只能包含两个大写字母。TX 是有效的值,但 tx 或 tX 不是有效的值。
例 34.2. postal Code Simple Type
<xsd:simpleType name="postalCode">
<xsd:restriction base="xsd:string">
<xsd:pattern value="[A-Z]{2}" />
</xsd:restriction>
</xsd:simpleType>映射到 Java
Apache CXF 将用户定义的简单类型映射到简单类型的基本类型的 Java 类型。因此,任何使用简单类型 postalCode 的消息(如 例 34.2 “postal Code Simple Type” 所示)被映射到 String,因为 postalCode 的基本类型是 xsd:string。例如,例 34.3 “带有简单类型的信用请求” 中显示的 WSDL 片段生成 Java 方法 state (),它采用 字符串 的参数后代码。
例 34.3. 带有简单类型的信用请求
<message name="stateRequest">
<part name="postalCode" type="postalCode" />
</message>
...
<portType name="postalSupport">
<operation name="state">
<input message="tns:stateRequest" name="stateRec" />
<output message="tns:stateResponse" name="credResp" />
</operation>
</portType>enforcing facets
默认情况下,Apache CXF 不会强制任何用于限制简单类型的问题。但是,您可以通过启用模式验证,将 Apache CXF 端点配置为强制面临的问题。
要将 Apache CXF 端点配置为使用 schema 验证,请将 schema-validation-enabled 属性设置为 true。例 34.4 “Service Provider Configured to Use Schema Validation” 显示使用 schema 验证的服务提供商的配置
例 34.4. Service Provider Configured to Use Schema Validation
<jaxws:endpoint name="{http://apache.org/hello_world_soap_http}SoapPort"
wsdlLocation="wsdl/hello_world.wsdl"
createdFromAPI="true">
<jaxws:properties>
<entry key="schema-validation-enabled" value="BOTH" />
</jaxws:properties>
</jaxws:endpoint>有关配置模式验证的更多信息,请参阅 第 24.3.4.7 节 “模式验证类型值”。