如何在CICS提供的响应容器中将XML声明添加到XML文档的开头

时间:2017-06-10 03:44:03

标签: utf-8 character-encoding cobol cics xml-declaration

具有特殊字符(Ý,¨)的XML消息(实际上是XML有效字符)被视为默认编码的无效字符,即 未指定时分配给消息。我们尝试通过专门将编码类型添加到邮件顶部来完成此工作。我们使用了UTF-8编码。因此,通过在XML消息的最开头添加“”,理想情况下字符应成为有效字符。

要添加XML声明,我们在执行XML GENERATE时使用WITH ENCODING 1208来生成xml文档中的声明。

  • 默认编码选项:IBM-1140
  • XML文档在字母数字数据项中生成。
  • XMLPARSE(XMLSS)编译器选项生效

然后,我们将生成的XML(带声明)放入CICS容器DFHWS-BODY中。但是CICS然后将Envelope附加到从Cobol程序传递的xml文档的最开头。

所以,这里的问题是我们如何将XML声明(在CICS中)附加到xml文档的最开头,以便外部环境识别编码选项并以正确的格式转换特殊字符?

2 个答案:

答案 0 :(得分:0)

您是否在程序中生成XML?这是一个有趣的方法。通常,对于CICS Web 服务(而不是CICS Web 支持程序),CICS会从您在DFHWS-BODY容器中提供的数据结构生成XML根据{{​​1}}文件。也许您选择使用WSBIND的{​​{1}}参数。

快速搜索表明您一直在尝试以各种方式解决此问题。您可能希望尝试XML-ONLY编译选项,并在必要时尝试DFHWS2LS编译选项。

在任何情况下,如果要在CICS完成响应处理后修改响应,请使用传输处理程序程序。在管道配置文件中声明传输处理程序。请记住,您的传输处理程序将被调用请求和响应,编码传输处理程序以检查它是否正在处理响应,然后将XML声明添加到相应容器的内容中{CODEPAGE(1208)相信)。您可以通过检查名为NOSQLCCSID的容器的内容来确定当前函数是否为响应。 IBM提供的副本DFHRESPONSE将为您提供一些您需要的常量。

您将要修改CICS通常为您处理的容器。如果你犯了一个错误,你可能会发现自己有一个有趣的异常终结者和一个不满意的CICS系统程序员。花些额外的时间彻底调试您的传输处理程序,以便在发生某些边缘情况时不会遇到生产问题。

管道配置文件,传输处理程序等都记录在CICS Knowledge Center

IBM在2007年10月10日发布的redbook SG247206实施CICS Web服务中提供了一个示例处理程序(SNIFFER)。有一个更新的同名红皮书,但它似乎没有包含处理程序的源代码。

答案 1 :(得分:0)

可以编写自己的处理程序,并将该处理程序作为服务处理程序添加到管道配置xml中。 现在,当您的程序将DFHWS-BODY容器交给终端SOAP处理程序时,它将在DFHRESPONSE容器中构造响应SOAP消息(包括,如您所注意到的,SOAP信封)。终止SOAP处理程序终止后启动的所有服务处理程序(检查DFHFUNCTION容器的内容以确定请求的阶段)将能够改变该容器(如果需要),并且可以在回应的开始。在构建新的响应容器时,请密切关注代码页转换,因为在那里很容易出错......