34.2. 通过限制定义的简单类型
概述
XML Schema 允许您通过从另一原语类型或简单类型推断新的类型来创建简单类型。使用 simpleType
元素对简单类型进行描述。
通过限制一个或多个方面 的基础类型,可以描述新的类型。这些因素限制可在新类型中保存的有效值。例如,您可以定义一个简单的类型 SSN
,该字符串为正好 9 个字符的字符串。
原语 XML Schema 类型都有自己的一组可选 facets。
流程
要定义您自己的简单类型,请执行以下操作:
- 确定您的新简单类型的基础类型。
- 根据所选基本类型的可用问题,确定新类型定义新类型。
-
使用本节中显示的语法,在您的合同的 type 部分中输入适当的
simpleType
元素。
在 XML Schema 中定义简单类型
例 34.1 “简单类型语法” 显示描述简单类型的语法。
例 34.1. 简单类型语法
<simpleType name="typeName"> <restriction base="baseType"> <facet value="value" /> <facet value="value" /> ... </restriction> </simpleType>
类型描述包含在 simpleType
元素中,并由 name
属性的值标识。新的简单类型定义的基本类型通过 xsd:restriction
元素的 base
属性指定。每个 facet 元素在 限制
元素中指定。可用因素及其有效设置取决于基本类型。例如,xsd:string
有很多问题,其中包括:
-
length
-
minLength
-
maxLength
-
pattern
-
whitespace
例 34.2 “邮编简单类型” 显示表示用于美国状态的双字母邮政代码的简单类型定义。它只能包含两个大写字母。TX
是有效的值,但 tx
或 tX
不是有效值。
例 34.2. 邮编简单类型
<xsd:simpleType name="postalCode"> <xsd:restriction base="xsd:string"> <xsd:pattern value="[A-Z]{2}" /> </xsd:restriction> </xsd:simpleType>
映射到 Java
Apache CXF 将用户定义的简单类型映射到简单类型的基本类型的 Java 类型。因此,使用简单类型邮政代码(如 例 34.2 “邮编简单类型” 所示)的消息都映射到一个字符串,因为
的基本类型是 postalCode
xsd:string
。例如,例 34.3 “使用简单类型进行信用请求” 中显示的 WSDL 片段生成 Java 方法的
state ()
,它采用一个参数、邮政
代码,即 String
。
例 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 节 “模式验证类型值”。