具有特殊字符(Ý,¨)的XML消息(实际上是XML有效字符)被视为默认编码的无效字符,即 未指定时分配给消息。我们尝试通过专门将编码类型添加到邮件顶部来完成此工作。我们使用了UTF-8编码。因此,通过在XML消息的最开头添加“”,理想情况下字符应成为有效字符。
要添加XML声明,我们在执行XML GENERATE时使用WITH ENCODING 1208来生成xml文档中的声明。
然后,我们将生成的XML(带声明)放入CICS容器DFHWS-BODY中。但是CICS然后将Envelope附加到从Cobol程序传递的xml文档的最开头。
所以,这里的问题是我们如何将XML声明(在CICS中)附加到xml文档的最开头,以便外部环境识别编码选项并以正确的格式转换特殊字符?
答案 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容器的内容以确定请求的阶段)将能够改变该容器(如果需要),并且可以在回应的开始。在构建新的响应容器时,请密切关注代码页转换,因为在那里很容易出错......