上下文容器

在某些情况下,用户编写的报文处理程序和报文头处理程序需要了解它们被调用时的上下文信息。 CICS®在一组上下文容器中提供这些信息,并将其传递给程序。

CICS 会初始化每个上下文容器的内容,但在某些情况下,您可以在消息处理程序和头处理程序中更改内容。 例如,在服务提供者管道中,终端处理程序是 CICS 提供的 SOAP 处理程序之一,您可以通过修改相应上下文容器的内容来更改目标应用程序的用户 ID 和事务 ID;在这种情况下,会发生 上下文切换,导致 <apphandler> 元素中命名的程序在单独的任务中运行。

容器中提供的某些信息只适用于服务提供者,或只适用于服务请求者,因此某些上下文容器在两者中都不可用。

DFH-EXIT-HEADER1 容器

DFH-EXIT-HEADER1 是 DATATYPE(CHAR) 的容器。 它包含一个或多个 SOAP 标头,这些标头将添加到 CICS 中网络服务提供商应用程序的响应中。

运行全局用户退出 XWSPRRWO 的程序可以在 SOAP 响应中添加一个标头。 标头必须是有效的 SOAP,名称空间必须自包含在标头 XML 中。 将数据放入该容器的程序必须检查其是否存在,并将新标头添加到数据末尾。 通过采用这种最佳做法,可以根据需要在同一出口点驱动多个程序。

DFH-HANDLERPLIST 容器

DFH-HANDLERPLIST 是一个 DATATYPE(CHAR)容器,使用管道配置文件中相应 <handler_parameter_list> 元素的内容进行初始化。 如果没有在管道配置文件中指定处理程序参数列表,容器就是空的;也就是说,它的长度为零。 您不能更改此容器中的内容。

DFH-SERVICEPLIST 容器

DFH-SERVICEPLIST 是一个 DATATYPE(CHAR)容器,包含管道配置文件中 <service_parameter_list> 元素的内容。 如果没有在管道配置文件中指定服务参数列表,容器就是空的;也就是说,它的长度为零。 您不能更改此容器中的内容。

DFHWS-APPHANDLER 集装箱

DFHWS-APPHANDLER 是一个 DATATYPE(CHAR)容器,在服务提供者管道中,它使用管道配置文件中 <apphandler> 元素的内容进行初始化。

在包含 <apphandler> 元素的管道终端处理程序中,所提供的 SOAP 处理程序会从该容器中获取目标应用程序的名称。

您可以在报文处理程序或报文头处理程序中更改该容器的内容。

CICS 不在服务请求者管道中提供此容器。

DFHWS-APPHANCLAS 容器

DFHWS-APPHANCLAS 是一个 DATATYPE(CHAR)容器,在服务提供者管道中,它使用管道配置文件中 <apphandler_class> 元素的内容进行初始化。

在基于 Java 的管道的终端处理程序中,所提供的 SOAP 处理程序 <cics_soap_1.1_handler_java><cics_soap_1.2_handler_java> 会从该容器中获取目标应用程序的名称。

CICS 不在服务请求者管道中提供此容器。

DFHWS-DATA 容器

容器 DFHWS-DATA 用于服务请求者应用程序,也可用于使用 CICS Web 服务助手部署的服务提供者应用程序。 DFHWS-DATA 是一个 DATATYPE(BIT) 容器,用于保存与 SOAP 请求映射的顶层数据结构。

在服务请求程序应用程序中,当服务请求程序发出 EXEC CICS INVOKE SERVICE 命令时,DFHWS-DATA 容器必须存在。 发出命令后,CICS 会将容器中的数据结构转换为 SOAP 请求。 收到 SOAP 响应后,CICS 会将其转换为另一种数据结构,并在同一容器中返回给应用程序。

在服务提供商应用程序中,如果没有在 DFHLS2WS 或 DFHWS2LS 批次作业中指定 CONTID 参数,则默认使用 DFHWS-DATA 容器。 CICS将 SOAP 请求消息转换为 DFHWS-DATA 容器中传递给应用程序的数据结构。 然后将响应保存在同一容器中,CICS 将数据结构转换为 SOAP 响应消息。

DFHWS-DPLTRANID 容器

DFHWS-DPLTRANID 是一个 DATATYPE(CHAR)容器,可包含用于远程运行目标应用程序的镜像任务的事务标识符。 如果该容器是在服务提供商管道中创建的,则它应包含用于在远程区域运行应用程序的镜像任务的事务标识符。 如果要使容器产生任何效果,必须在将控制权传递给目标应用程序之前创建容器。 如果容器不存在,远程网络服务应用程序将在默认镜像事务 CSMI 下执行。

DFHWS-FAULT 容器

DFHWS-FAULT 是 DATATYPE(BIT) 的容器,它保存有关 CICS 生成的 SOAP 故障类型的信息。 容器中包含一个二进制全字,表示可用于进一步处理网络服务响应的故障类型:
  1. 最近的 SOAP 故障是 CICS 故障(例如,CICS 或用户中止)。
  2. 最近的 SOAP 故障是应用程序故障。 当您发出 EXEC CICS SOAPFAULT DELETE 命令时,容器将被删除。 如果创建了第二个或新的 SOAP 故障,CICS 会适当更新新容器。

您不能更改此容器中的内容。

DFHWS-LOCATION 容器

当 HTTP为302、303或307时,DFHWS-LOCATION是一个DATATYPE(CHAR)的容器,其中包含提供的Location标头。

DFHWS-MEP 容器

DFHWS-MEP 是 DATATYPE(BIT) 容器,其中包含入站或出站 SOAP 消息的消息交换模式 (MEP) 的代表值。 该值的长度为一个字节。

CICS为服务请求者和服务提供者支持四种消息交换模式。 消息交换模式在 Web 服务的 WSDL 2.0 文档中定义,并决定 CICS 是否作为提供者响应,以及 CICS 是否期望从外部提供者得到响应。 在请求者模式下,CICS 等待响应的时间由 PIPELINE 资源配置。

如果您使用 CICS Web 服务助手来部署应用程序,该容器将由 CICS 填充:

  • 在服务提供商管道中,当 DFHPITP 应用程序处理程序从终端处理程序收到入站消息时,就会填充该容器。
  • 在服务请求者管道中,当应用程序使用 INVOKE SERVICE 命令时,就会填充此容器。

如果应用程序使用 DFHPIRT 通道启动管道,则应用程序会填充此容器。 如果容器不存在或没有值,CICS 会根据通道中是否存在 DFHNORESPONSE 容器,假定请求使用的是 In-Out 或 In-Only MEP。

该容器由提供的应用程序处理程序 DFHPITP 填充。 如果使用其他应用程序处理程序,则无法使用此容器。

表 1. 容器 DFHWS-MEP 中可能出现的值
MEP URI
1 只限内部 http://www.w3.org/ns/wsdl/in-only
2 进出 http://www.w3.org/ns/wsdl/in-out
4 稳健的只进不出 http://www.w3.org/ns/wsdl/robust-in-only
8 内部-可选-外部 http://www.w3.org/ns/wsdl/in-opt-out

DFHWS-OPERATION 容器

容器 DFHWS-OPERATION 通常用于使用 CICS Web 服务助手部署的服务提供者应用程序。 DFHWS-OPERATION 是一个 DATATYPE(CHAR)容器,用于保存 SOAP 请求中指定的操作名称。

在服务提供者中,容器提供调用应用程序的操作名称。 当提供的 SOAP 消息处理程序将控制权传递给目标应用程序时,它就会被填充,并且只有在目标程序使用通道接口调用时才可见。

在服务请求者管道中,容器持有 EXEC CICS INVOKE SERVICE 命令的 OPERATION 选项中指定的名称。 发出命令的应用程序无法使用容器。

该容器由提供的应用程序处理程序 DFHPITP 填充。 如果使用其他应用程序处理程序,则无法使用此容器。

DFHWS-PIPELINE 集装箱

DFHWS-PIPELINE 是一个 DATATYPE(CHAR)容器,其中包含正在运行程序的管道名称。 您不能更改此容器中的内容。

DFHWS-RESPWAIT 容器

DFHWS-RESPWAIT 是 DATATYPE(BIT) 的容器,它包含一个无符号全字二进制数,以秒为单位表示超时时间,适用于向外 Web 服务请求和响应消息。

此容器的值由 PIPELINE 定义的 RESPWAIT 属性提供,并在发出 INVOKE SERVICE 命令时由 CICS 设置。 用户应用程序在 INVOKE SERVICE 命令发出前在此容器中设置的任何值都将被忽略。

在管道处理过程中调用的消息处理程序可以覆盖 DFHWS-RESPWAIT 容器的值。 如果这样做,只有当 PIPELINE 定义的 RESPWAIT 属性未设置为 DEFT 或留空时,才会使用更新后的值。 如果 PIPELINE 定义中的 RESPWAIT 属性被设置为 DEFT 或留空,那么无论 DFHWS-RESPWAIT 容器中的值是多少,传输协议的默认超时值始终会被使用。

该容器仅用于请求者模式管道。

DFHWS-SOAPLEVEL 容器

DFHWS-SOAPLEVEL 是 DATATYPE(BIT) 的一个容器,用于保存正在处理的报文中使用的 SOAP 级别的信息。 数据为二进制全字,是以下值之一:
1
请求或响应是 SOAP 1.1 消息。
2
请求或响应是 SOAP 1.2 消息。
10
请求或响应不是 SOAP 消息。

您不能更改此容器中的内容。

DFHWS-TRANID 容器

DFHWS-TRANID 是 DATATYPE(CHAR) 容器,使用在其中运行管道的任务的事务标识来初始化。

如果在终端处理程序为 CICS 提供的 SOAP 处理程序之一的服务提供者管道中更改此容器的内容(并且在控制权传递给目标应用程序之前更改),目标应用程序将在具有新事务 ID 的新任务中运行。

当管道的终端处理程序和应用程序处理程序在同一 JVM 服务器中运行时,无法启动新任务。 因此,如果将 JAX-WS Axis2 应用程序部署到 CICS 中,则不能使用 DFHWS-TRANID 更改事务 ID。

DFHWS-URI 容器

DFHWS-URI 是包含服务 URI 的 DATATYPE(CHAR) 的容器。

在服务提供者管道中,CICS 会从传入消息中提取相对 URI 并将其放入 DFHWS-URI 容器中。

在服务请求者管道中,CICS 会将 INVOKE SERVICE 命令中指定的 URI 放入 DFHWS-URI 容器,如果缺少 URI,则将 Web 服务绑定中的 URI 放入 DFHWS-URI 容器。 您可以通过在管道中使用消息处理程序来覆盖此 URI。

有关详情,请参阅 使用 DFHWS-URI 容器

DFHWS-URI-RESID 容器

容器 DFHWS-URI-RESID 仅适用于通过 JSON 管道连接的应用程序。 DFHWS-URI-RESID 是一个 DATATYPE(CHAR)容器,用于保存 URI 路径(资源标识符)的简化副本,其中用于 URIMAP 匹配的路径 URI 片段已被删除。

示例
假设与传入请求相匹配的 URIMAP 的 PATH 为 /JSONServices/CustomerDetails/*,客户端传入的 URI 为

http://www.example.org:10000/JSONServices/CustomerDetails/customerNumber/13388?action=query

那么 DFHWS-URI-RESID 的内容将是customerNumber/13388

RESTful JSON 应用程序可以使用此容器来帮助识别使用通配符 URIMAP 匹配的 RESTful 资源的资源 ID(或主键)。 这应该比解析 DFHWS-URI 的内容简单得多。
注:
  • 如果匹配 URIMAP 的 PATH 属性没有通配符(即包含 URI 的完整路径),则此容器的内容将为空。
  • 匹配 URIMAP 的 PATH 属性可包含一个可选的查询字符串片段。 如果是,则在构建此容器时忽略查询字符串片段。

DFHWS-URI-QUERY 容器

在所有 HTTP 提供程序模式 CICS 管道中,应用程序都可以使用容器DFHWS-URI-QUERY。 DFHWS-URI-QUERY 是一个 DATATYPE(CHAR)容器,用于保存 URI 的查询字符串片段。

示例
假设从客户端传入的 URI 是

http://www.example.org:10000/JSONServices/CustomerDetails/customerNumber/13388?action=query&page=1

那么 DFHWS-URI-QUERY 的内容将是action=query&page=1

应用程序可以解析该容器的内容,从 URI 中识别出单个 name=value 参数。

注意: 如果传入的 URI 不包含查询字符串,那么通道上将不会出现此容器。

DFHWS-URIMAP 容器

DFHWS-URIMAP 是 DATATYPE(CHAR) 的容器。 在请求者管道中,DFHWS-URIMAP 包含用于 INVOKE SERVICE 命令的 8 个字符的 URIMAP 名称,如果未指定 URIMAP,则包含 8 个空格。 对于提供商管道,DFHWS-URIMAP 包含与入站请求匹配的 URIMAP 的 8 个字符名称。 您不能更改此容器中的内容。

DFHWS-URIMAPPATH 容器

DFHWS-URIMAPPATH 是一个 DATATYPE(CHAR)容器,用于保存用于匹配传入 URI 的 URIMAP 中 PATH 数据的副本。 任何连接管道的应用程序都可以使用该容器来了解更多关于如何连接管道的信息。

DFHWS-USERID 容器

DFHWS-USERID 是 DATATYPE(CHAR) 容器,使用在其中运行管道的任务的用户标识来初始化。

如果在终端处理程序为 CICS 提供的 SOAP 处理程序之一的服务提供者管道中更改此容器的内容(并且在控制权传递给目标应用程序之前更改),目标应用程序将在与新用户 ID 关联的新任务中运行。 除非更改容器 DFHWS-TRANID 的内容,否则新任务的事务 ID 与管道正在运行的任务相同。

当管道的终端处理程序和应用程序处理程序在同一 JVM 服务器中运行时,无法启动新任务。 因此,如果将 JAX-WS Axis2 应用程序部署到 CICS 中,则不能使用 DFHWS-USERID 更改用户 ID。

DFHWS-WEBSERVICE 容器

DFHWS-WEBSERVICE 是 DATATYPE(CHAR)的容器,它包含网络服务的名称,当使用网络服务助手部署目标应用程序时,该名称指定了执行环境。

DFHWS-CID-DOMAIN 容器

DFHWS-CID-DOMAIN 是 DATATYPE(CHAR) 的容器。 它包含用于生成内容 ID 值的域名,以便引用二进制附件。 域名值默认为 cicsts 。 您可以通过在管道配置文件中指定 <mime_options> 元素来覆盖该值。 您不能更改此容器中的内容。

DFHWS-MTOM-IN 集装箱

DFHWS-MTOM-IN 是一个 DATATYPE(BIT) 容器,用于保存有关管道配置文件 <cics_mtom_handler> 元素的指定选项的信息,以及有关管道接收到的报文格式的信息。 它包含在管道中处理入站 MTOM 报文的信息。 入站信息可以是网络服务请求者发出的请求信息,也可以是网络服务提供者发出的响应信息。

如果未在管道配置文件中指定 <cics_mtom_handler> 元素,或者收到的是 SOAP 消息而不是 MTOM 消息,则不会创建此容器。

如果在管道中配置了 Web 服务安全性,或者为 Web 服务开启了验证,那么在创建容器时,DFHWS-MTOM-IN 中字段 XOP_MODE 的内容可以被 CICS 改写。 例如,如果您将管道配置为以直接模式处理 MTOM 消息内容,然后为 Web 服务开启验证,CICS 会覆盖管道配置文件中定义的值,并将 XOP 处理设置为在兼容模式下运行。 CICS执行覆盖,是因为在管道中处理 XOP 文档和二进制附件的支持受到了限制。

您不能更改此容器中的内容。

表 2. DFHWS-MTOM-IN 容器的结构
字段名 长度(字节) 目录
MTOM_STATUS 4 包含值 "1",表示 CICS 收到的报文是 MTOM 格式。
mtomnoxop_status 4 包含以下值之一:
0
MTOM 报文包含二进制附件。
1
MTOM 报文不包含二进制附件。
XOP_MODE 4 包含以下值之一:
0
不进行 XOP 处理。
1
XOP 处理在兼容模式下进行。
2
XOP 处理以直接模式进行。

DFHWS-MTOM-OUT 集装箱

DFHWS-MTOM-OUT 是一个 DATATYPE(BIT) 容器,用于保存管道配置文件 <cics_mtom_handler> 元素的指定选项信息。 它包含在管道中处理出站 MTOM 报文的信息,无论是网络服务请求者的响应报文,还是网络服务提供者的请求报文。

如果您没有在管道配置文件中指定 <cics_mtom_handler> 元素,或者管道配置文件中的 <mtom_options> 元素带有属性 send_mtom="no",则不会创建此容器。

在提供程序模式下,该容器与 DFHWS-MTOM-IN 容器同时创建。 如果管道配置文件中的 <mtom_options> 元素具有属性 send_mtom="same",则会设置 MTOM_STATUS 字段,以指示网络服务请求者想要 MTOM 还是 SOAP 响应消息。

如果在管道中配置了 Web 服务安全性,或者为 Web 服务开启了验证,那么在创建容器时,DFHWS-MTOM-OUT 的 XOP_MODE 字段可由 CICS 更改。 例如,如果您将管道配置为使用直接模式处理 XOP 文档和任何二进制附件,然后为 Web 服务打开验证,CICS 会覆盖管道配置文件中定义的值,并在创建容器时将 XOP 处理设置为在兼容模式下运行。 CICS执行覆盖是因为在管道中处理 XOP 文档和二进制附件的支持受到限制。

您不能更改此容器中的内容。

表 3. DFHWS-MTOM-OUT 容器的结构
字段名 长度(字节) 目录
MTOM_STATUS 4 表示是否启用 MTOM:
0
MTOM 未启用。 出站信息以 SOAP 格式发送。
1
已启用 MTOM。 出站报文以 MTOM 格式发送。
mtomnoxop_status 4 表示在没有二进制附件时是否使用 MTOM:
0
没有二进制附件时,请勿发送 MTOM 报文。
1
在没有二进制附件时发送 MTOM 报文。
XOP_MODE 4 表示应进行哪些 XOP 处理:
0
不进行 XOP 处理。
1
XOP 处理在兼容模式下进行。
2
XOP 处理以直接模式进行。

DFHWS-WSDL-CTX 容器

容器 DFHWS-WSDL-CTX 可在服务提供者或服务请求者应用程序中使用,该应用程序使用 CICS Web 服务助手进行部署。 DFHWS-WSDL-CTX 是一个 DATATYPE(CHAR)容器,用于保存可用于监控目的的 WSDL 上下文信息。

DFHWS-WSDL-CTX 保存 WSDL 文档的以下上下文信息:
  • 调用应用程序的操作名称和命名空间。
  • 如果已知,使用的 WSDL 1.1 端口或 WSDL 2.0 端点的名称和命名空间。

这些值用空格字符分隔。 DFHWS-WSDL-CTX 仅在运行时级别 2.1 及更高版本中由 CICS 填充。

如果您使用 CICS Web 服务助手来部署应用程序,该容器将由 CICS 填充:
  • 在服务提供商管道中,当 DFHPITP 应用程序处理程序从终端处理程序收到入站消息时,就会填充该容器。
  • 在服务请求者管道中,当应用程序使用 INVOKE SERVICE 命令时,就会填充此容器。

如果应用程序使用 DFHPIRT 程序启动管道,则应用程序会根据需要填充 DFHWS-WSDL-CTX 容器。

DFHWS-XOP-IN 集装箱

DFHWS-XOP-IN 是一个 DATATYPE(BIT) 容器,它包含一个二进制附件引用列表,这些附件已从入站 MIME 消息中解压缩,并通过 XOP 处理放入容器中。

DFHWS-XOP-IN 容器中的每个附件记录都由这些项目组成:
  • 存放二进制附件 MIME 标头的容器的 16 字节名称
  • 存放二进制附件的容器的 16 字节名称
  • 内容 ID 的 2 字节长度(带符号的半字二进制格式
  • 内容 ID,包括 <> 分隔符,以 ASCII 字符串形式存储

您不能更改此容器中的内容。

DFHWS-XOP-OUT 集装箱

DFHWS-XOP-OUT 是一个 DATATYPE(BIT) 容器,其中包含对容纳二进制附件的容器的引用列表。 MTOM 处理程序会将二进制附件打包成对外发送的 MIME 报文。

DFHWS-XOP-OUT 容器中的每个附件记录都由这些项目组成:
  • 存放二进制附件 MIME 标头的容器的 16 字节名称
  • 存放二进制附件的容器的 16 字节名称
  • 内容 ID 的 2 字节长度(带符号的半字二进制格式
  • 内容 ID,包括 <> 分隔符,以 ASCII 字符串形式存储

您不能更改此容器中的内容。