作为Web服务的提供者,我希望对关联的Web请求中的ID字段的值实施限制,使其达到预期的位数,但根据CICS,我认为我是这样做的。 m为此目的无法在xsd / schema中使用模式facet元素。另外,AFAIK长度构面元素并不支持将字符限制为数字。
我已经为我的同事(一位CICS用户)提供了一个WSDL文件和一个用于Web服务的单独但包含的xsd文件,显然CICS Web服务助手中的DFHWS2LS工具无法识别包含在中的模式构面元素xsd文件。
(我知道以下内容 - 我的同事已经单独确认 - 从我的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用户;因此我没有供应商支持合同。此外,我还没有询问我的同事的供应商支持是否有解决方法。
答案 0 :(得分:1)
您可以使用固定长度的字符串(minLength
和maxLength
具有相同的值)来缩短字符串。在COBOL中,所有字符串都是固定长度的。
您可以使用decimal
totalDigits="16"
和fractionDigits="0"
类型来强制执行仅限数字的规则。 COBOL程序需要使用ARITH(EXTEND)
进行编译,DFHWS2LS工具需要一个指示WIDE-COMP3=YES
的控制卡。
这不能解决问题;它可以缓解它。字段中仍然允许使用字符+
,-
和.
。
COBOL程序将为此字段定义一个指定USAGE COMP-3(压缩十进制)的字段。
在撰写本文时,CICS(5.2)最新版本的发布documentation表示DFHWS2LS不支持模式方面。