我的任務:我有一個IBM MQ系列提供的隊列系統。我需要獲取「死信隊列」的所有消息。 RFH2-Header和原始有效載荷在Dead-Letter中組裝。我原來的有效載荷主要是一個zip文件或字符串。由於有效負載可能是一個zip文件,因此我需要將有效負載保存爲java中的byte []。 RFH2應該是鏈接的HashMap。如何將Java中的MQ系列死信的負載(字節[])中的RFH2(字符串)拆分?
我已經走到這一步:
public ZMessageDTO(final ZMessageType messageType, MQMessage message) throws ZDAEQException {
this.mqMessage = message;
this.messageType = messageType;
List<byte[]> payloadRFH2List = this.split("</usr>".getBytes(StandardCharsets.UTF_8));
rfh2 = getRFH2OfXMLBytes(payloadRFH2List.get(0));
payload = payloadRFH2List.get(1);
}
public boolean isMatch(byte[] pattern, byte[] input, int pos) {
for (int i = 0; i < pattern.length; i++) {
if (pattern[i] != input[pos + i]) {
return false;
}
}
return true;
}
public List<byte[]> split(byte[] pattern) throws ZDAEQException {
try {
byte[] input = new byte[(int) mqMessage.getMessageLength()];
for (int i = 0; i < (int) mqMessage.getMessageLength(); i++) {
input[i] = mqMessage.readByte();
}
List<byte[]> l = new LinkedList<byte[]>();
int blockStart = 0;
for (int i = 0; i < input.length; i++) {
if (isMatch(pattern, input, i)) {
l.add(Arrays.copyOfRange(input, blockStart, i));
blockStart = i + pattern.length;
i = blockStart;
}
}
l.add(Arrays.copyOfRange(input, blockStart, input.length));
return l;
} catch (IOException e) {
throw new ZDAEQException("Couldn't split dead letter" + e);
}
}
會發生什麼現在: 如果我創建一個新的消息出來的數據的獲取的,它由第二千零六十六字符切RFH2 。如果我打電話給原始有效載荷,我會得到一個NullPointer。
什麼是關鍵? 正如我在作業中提到的那樣,RFH2和原始有效載荷都在「死信有效載荷」中組裝(我希望你能夠擺出我想說的東西)。到目前爲止,我嘗試的是搜索</usr>
-ending標籤的有效載荷並保存這兩部分。我將第一部分保存爲字符串,將第二部分保存爲字節[]。如果這有效,我絕對沒有想法。
我的問題: 是否有可能分裂死信有效負載兩個部分,並保存的第一個作爲一個字符串,而第二個作爲一個byte []?
我不是一個Java程序員,但你不能使用MQHeaderIterator或MQHeaderList?請參閱http://www.ibm.com/support/knowledgecenter/SSFKSJ_9.0.0/com.ibm.mq.dev.doc/q030880_.htm - 該頁面有其他各種有用的信息,我懷疑您需要。 –