如何仅在 xsd simpleType 输入到 CICS/DFHWS2LS 中强制使用数字 - 不使用 pattern facet 元素?
How to enforce digits only in an xsd simpleType input to CICS/DFHWS2LS - without using the pattern facet element?
作为 Web 服务的提供者,我想将关联 Web 请求中 ID 字段的值强制限制为预期的位数,但根据 CICS 看来我无法做到为此目的,在 xsd/schema 中使用模式方面元素。此外,据我所知,长度方面元素不支持将字符限制为仅数字。
我已经为我的同事(一名 CICS 用户)提供了一个 WSDL 文件和单独但包含的 Web 服务文件 xsd,显然 CICS Web 服务助手中的 DFHWS2LS 工具无法识别模式xsd 文件中包含的 facet 元素。
(我知道以下内容 - 我的同事已分别确认 - 从我的 Web 服务代码中打印出的添加日志 - 虽然 SOAP 请求的全文目前不可用,因为我有 HTTP 转储设置在我的 tomcat 启动脚本中关闭以避免日志文件泛滥。)
因此,由我的同事生成的 Web 客户端(可能是 COBOL - 不确定)向我的 Web 服务发送了一个请求,其 ID 字段值为包含预期位数的 255 个字符(默认长度)的字符串- 但后跟填充空白 - 用于 ID 字段。
这里有一个示例 schema/xsd - 例如ID 长度为 16...
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xs:schema version="1.0" targetNamespace="snip1" xmlns:tns="snip2" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="myUpdateStatus" type="tns:myUpdateStatus"/>
<xs:element name="myUpdateStatusResponse" type="tns:myUpdateStatusResponse"/>
<xs:complexType name="myUpdateStatus">
<xs:sequence>
<xs:element name="ssn">
<xs:simpleType>
<xs:restriction base='xs:string'>
<!-- DFHWS2LS ignores the following pattern facet-->
<xs:pattern value='[0-9]{16}'/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="updatedStatus">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:length value="1"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="myUpdateStatusResponse">
<xs:sequence>
<xs:element name="return" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
仅供参考,我不是 CICS 用户;因此我没有供应商支持合同。另外,我还没有询问我同事的供应商支持是否有变通办法。
您可以使用固定长度的字符串(minLength
和 maxLength
具有相同的值)来缩短字符串。在 COBOL 中,所有字符串都是固定长度的。
您可以使用 decimal
与 totalDigits="16"
和 fractionDigits="0"
的类型来强制执行仅数字规则。 COBOL 程序将需要用 ARITH(EXTEND)
编译,DFHWS2LS 工具将需要一个指示 WIDE-COMP3=YES
.
的控制卡
这不能解决问题;它可能会减轻它。字段中仍然允许字符 +
、-
和 .
。
COBOL 程序将为此字段定义 USAGE COMP-3(压缩十进制)。
截至撰写本文时,CICS (5.2) 的最新 version.release 的 documentation 表示 DFHWS2LS 不支持模式方面。
作为 Web 服务的提供者,我想将关联 Web 请求中 ID 字段的值强制限制为预期的位数,但根据 CICS 看来我无法做到为此目的,在 xsd/schema 中使用模式方面元素。此外,据我所知,长度方面元素不支持将字符限制为仅数字。
我已经为我的同事(一名 CICS 用户)提供了一个 WSDL 文件和单独但包含的 Web 服务文件 xsd,显然 CICS Web 服务助手中的 DFHWS2LS 工具无法识别模式xsd 文件中包含的 facet 元素。
(我知道以下内容 - 我的同事已分别确认 - 从我的 Web 服务代码中打印出的添加日志 - 虽然 SOAP 请求的全文目前不可用,因为我有 HTTP 转储设置在我的 tomcat 启动脚本中关闭以避免日志文件泛滥。)
因此,由我的同事生成的 Web 客户端(可能是 COBOL - 不确定)向我的 Web 服务发送了一个请求,其 ID 字段值为包含预期位数的 255 个字符(默认长度)的字符串- 但后跟填充空白 - 用于 ID 字段。
这里有一个示例 schema/xsd - 例如ID 长度为 16...
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xs:schema version="1.0" targetNamespace="snip1" xmlns:tns="snip2" xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="myUpdateStatus" type="tns:myUpdateStatus"/>
<xs:element name="myUpdateStatusResponse" type="tns:myUpdateStatusResponse"/>
<xs:complexType name="myUpdateStatus">
<xs:sequence>
<xs:element name="ssn">
<xs:simpleType>
<xs:restriction base='xs:string'>
<!-- DFHWS2LS ignores the following pattern facet-->
<xs:pattern value='[0-9]{16}'/>
</xs:restriction>
</xs:simpleType>
</xs:element>
<xs:element name="updatedStatus">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:length value="1"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:complexType name="myUpdateStatusResponse">
<xs:sequence>
<xs:element name="return" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
仅供参考,我不是 CICS 用户;因此我没有供应商支持合同。另外,我还没有询问我同事的供应商支持是否有变通办法。
您可以使用固定长度的字符串(minLength
和 maxLength
具有相同的值)来缩短字符串。在 COBOL 中,所有字符串都是固定长度的。
您可以使用 decimal
与 totalDigits="16"
和 fractionDigits="0"
的类型来强制执行仅数字规则。 COBOL 程序将需要用 ARITH(EXTEND)
编译,DFHWS2LS 工具将需要一个指示 WIDE-COMP3=YES
.
这不能解决问题;它可能会减轻它。字段中仍然允许字符 +
、-
和 .
。
COBOL 程序将为此字段定义 USAGE COMP-3(压缩十进制)。
截至撰写本文时,CICS (5.2) 的最新 version.release 的 documentation 表示 DFHWS2LS 不支持模式方面。