0

当我尝试从 COBOL 程序发送到 KAFKA 时,JSON 数据中缺少“方括号”

我已经启动了 KAFKA-REST 服务器并尝试在 COBOL 程序中格式化 json 数据并使用“WEB SEND POST”发送数据。

注意:用于网络发送 POST 的媒体类型是:application/vnd.kafka.json.v1+json

我可以看到 COBOL 击中了我的 KAFKa 服务器,但在 KAFKA 服务器端出现以下错误:

 "POST /topics/test HTTP/1.1" 400 159  (io.confluent.restutils.requests:77)

尝试从 COBOL 发送的数据:

{"records":[{"value":{"name":"vikash"}}]}

但方括号在 COBOL 端本身被删除,数据采用以下格式:

{"records": {"value":{"name":"vikash"}} }

请帮忙!!

下面是 COBOL 代码 '''在此处输入图像描述

使用的媒体类型

网络发送 POST 在此处输入图像描述

`EXEC CICS WEB SEND POST                     
  SESSTOKEN(WS-SESSION-TOKEN)            
  FROM(WS-TRY-DATA)                      
  FROMLENGTH(LENGTH OF WS-TRY-DATA)      
  MEDIATYPE(MEDIA-TYPE)                  
  PATH(WS-KAFKA-PATH)                    
  PATHLENGTH(LENGTH OF WS-KAFKA-PATH)    
  RESP(WS-RESP) RESP2(WS-RESP2)          
  NOHANDLE                               
 END-EXEC.   

工作存储变量

   01 WS-TRY-DATA.                                                
   05 WS-FILLER1                 PIC X(01) VALUE "{".          
   05 WS-FILLER4                 PIC X(01) VALUE '"'.          
   05 WS-RECORD                  PIC X(09) VALUE 'records":'.  
   05 WS-LEFT-BRACE              PIC X(01) VALUE '['.          
   05 WS-FILLER2                 PIC X(01) VALUE "{".          
   05 WS-FILLER6                 PIC X(01) VALUE '"'.          
   05 WS-VALUE-LIT               PIC X(09) VALUE 'value":{"'.  
   05 WS-VALUE                   PIC X(07) VALUE 'name":"'.    
   05 WS-VALUE2                  PIC X(09) VALUE 'vikash"}}'.  
   05 WS-RIGHT-BRACE             PIC X(01) VALUE ']'.          
   05 WS-FILLER3                 PIC X(01) VALUE "}".          

媒体类型

    01 MEDIA-TYPE                    PIC X(56)  VALUE 
         'application/vnd.kafka.json.v1+json'.    

网络发帖

4

1 回答 1

1

众所周知,方括号会导致 PC 和大型机之间出现问题。您要确保在大型机上,这些是 EBCDIC 字符 x'BA' 和 x'BB' 作为左括号 ('[') 和右括号 (']')。当您使用键盘输入时,某些终端仿真器无法正确显示这些字符或未为其分配正确的 EBCDIC 字符。

例如,我将您上面的 COBOL 结构复制到一个程序中。当我从我的 PC 中将 [ 字符键入 WS-LEFT-BRACE 字段时,我没有得到 x'BA' 字符。相反,它显示为 x'5F'。同样,WS-RIGHT-BRACE 显示为 x'A5' 而不是 x'BB'。

因此,首先要做的是检查 COBOL 结构中的实际十六进制值。

在字段中输入正确的值后,我使用了与您相同的媒体类型的 WEB SEND。我的 HTTP 客户端收到了正确的 JSON 输出,包括方括号。我确实对 CHARACTERSET('iso-8859-1') 进行了显式编码,但您不必编写该操作数,因为它是默认值。

如果您的 COBOL 结构中确实有正确的十六进制值,我建议您向 IBM 开一个问题单。CICS 不应该从 HTTP 正文中去除方括号。

于 2019-11-19T16:01:28.360 回答