1

作为 Web 服务的提供者,我想将相关 Web 请求中的 ID 字段的值强制限制为预期的位数,但根据 CICS,我似乎无法使用模式方面用于此目的的 xsd/schema 中的元素。此外,AFAIK 长度方面元素不支持仅将字符限制为数字。

我已经为我的同事(CICS 用户)提供了一个 WSDL 文件和一个单独但包含的用于 Web 服务的 xsd 文件,显然 CICS Web Services Assistant 中的 DFHWS2LS 工具无法识别 xsd 文件中包含的模式构面元素。

(我知道以下内容 - 我的同事已经单独确认 - 从我的 Web 服务代码中添加的日志打印出来 - 尽管 SOAP 请求的全文目前不可用,因为我在我的 tomcat 中关闭了 HTTP 转储设置启动脚本以避免淹没日志文件。)

结果,我的同事生成的 Web 客户端(可能是 COBOL - 不确定)向我的 Web 服务发送了一个请求,该请求的 ID 字段值为 255 个字符(默认长度)字符串,其中包含预期的位数 - 但后跟填充空白 - 用于 ID 字段。

这是一个包含模式/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 用户;因此我没有供应商支持合同。另外,我还没有询问我同事的供应商支持是否有解决办法。

4

1 回答 1

1

您可以使用固定长度的字符串(minLength并且maxLength具有相同的值)来缩短字符串。在 COBOL 中,所有字符串都是固定长度的。

您可以使用decimalwith totalDigits="16"and类型fractionDigits="0"来强制执行仅数字规则。COBOL 程序需要编译,ARITH(EXTEND)DFHWS2LS 工具需要一个控制卡来指示WIDE-COMP3=YES

这并不能解决问题;它可能会减轻它。该字段中仍允许使用字符+-和。.

COBOL 程序将对此字段进行定义,指定 USAGE COMP-3(压缩十进制)。

在撰写本文时,CICS (5.2) 的最新版本的文档表明 DFHWS2LS 不支持模式方面。

于 2015-01-24T15:24:51.003 回答