当我尝试从COBOL程序发送到KAFKA时,JSON数据中缺少“方括号”
我已经启动了KAFKA-REST服务器,并尝试在COBOL程序中格式化json数据,然后使用“ WEB SEND POST”发送数据。
注意:用于Web发送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代码 '''enter image description here
网络发送POST enter image description here
`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'.
答案 0 :(得分: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正文中删除方括号。