我正在尝试从一个应用程序获取数据并在处理数据后将其发送到另一个(大型机)。
假设我正在获取“这是来自另一个应用程序”的数据,处理与“此数据已处理”相同的处理状态。最终消息应结合使用编码(Cp1047)到大型机应用程序来读取与
0024这是来自另一个应用程序001A此数据已处理
0024 的十进制值为 36(消息长度 + 4 是十六进制值长度)
001A 的十进制值为 26(处理的消息长度 + 4)
我的应用程序在 Java8 上运行并使用 websphere MQ。我需要将数据发送到从 Mainframe MQ 接收数据的应用程序。WebSphere MQ 中的远程队列将消息放入大型机 MQ 的本地队列。我的代码如下,使用 Cp1047 转换数据和编码,
String incomingData = "This is from another application";
String processingData = "This data is processed"
public String outGoingData(String incomingData, String processingData) {
StringBuilder strBuilder = new StringBuilder();
return stringbuilder.append(new String(convertToEbcidie(incomingData, "Cp1047")))
.append(incomingData)
.append(new String(convertToEbcidie(processingData, "Cp1047")))
.append(processing data).toString(); //playing this string to queue
}
private byte[] convertToEbcidic(String s) {
String hexStr = StringUtils.leftPad(s.length+4, 8, "0");
byte[] byteAry = new byte[hexStr.length()/2];
for (int i = 0; i < hexStr.length(); i+=2) {
byteAry[i/2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)
+ Character.digit(s.charAt(i+1), 16));
} return byteAry;
}
接收方应用程序(大型机)决定哪个是原始消息和基于处理状态的 4 个字符的十六进制值。他们能够阅读大部分信息,但不是全部。例如,长度 805 的十六进制值为 325,但在大型机 mq 条目中为 315。由于长度不匹配,它们无法处理。
另一个样本数据:- OO25这是来自源001A的原始数据,已成功处理
0025 是 org msg length(33) + 4 的十六进制值,001A 是处理后的 msg 长度 (22) + 4 的十六进制值。这里 4 是十六进制值的长度。
我是否缺少任何转换为 ebcidic 的逻辑?