private String getInternalConvertedMimeType(final AMQMessage serverMessage, final Object convertedBodyObject) { String originalMimeType = serverMessage.getMessageHeader().getMimeType(); if (originalMimeType != null) { if (ConversionUtils.LIST_MESSAGE_CONTENT_TYPES.matcher(originalMimeType).matches() || ConversionUtils.MAP_MESSAGE_CONTENT_TYPES.matcher(originalMimeType).matches()) { return null; } else if (ConversionUtils.OBJECT_MESSAGE_CONTENT_TYPES.matcher(originalMimeType).matches()) { return "application/x-java-serialized-object"; } } return originalMimeType; }
@Override public InternalMessage convert(AMQMessage serverMessage, NamedAddressSpace addressSpace) { final String mimeType = serverMessage.getMessageHeader().getMimeType(); byte[] data = new byte[(int) serverMessage.getSize()]; try (QpidByteBuffer content = serverMessage.getContent()) { content.get(data); } String encoding = serverMessage.getMessageHeader().getEncoding(); byte[] uncompressed; if (GZIPUtils.GZIP_CONTENT_ENCODING.equals(encoding) && (uncompressed = GZIPUtils.uncompressBufferToArray(ByteBuffer.wrap(data))) != null) { data = uncompressed; encoding = null; } Object body = convertMessageBody(mimeType, data); final AMQMessageHeader convertedHeader = convertHeader(serverMessage, addressSpace, body, encoding); return InternalMessage.convert(serverMessage, convertedHeader, body); }
private AMQMessageHeader convertHeader(final AMQMessage serverMessage, final NamedAddressSpace addressSpace, final Object convertedBodyObject, final String encoding) { final String convertedMimeType = getInternalConvertedMimeType(serverMessage, convertedBodyObject); final AMQMessageHeader messageHeader = serverMessage.getMessageHeader(); Map<String, Object> headers = new HashMap<>(); messageHeader.getHeaderNames() .forEach(headerName -> headers.put(headerName, messageHeader.getHeader(headerName))); final InternalMessageHeader header = new InternalMessageHeader(headers, messageHeader.getCorrelationId(), messageHeader.getExpiration(), messageHeader.getUserId(), messageHeader.getAppId(), messageHeader.getMessageId(), convertedMimeType, messageHeader.getEncoding(), messageHeader.getPriority(), messageHeader.getTimestamp(), messageHeader.getNotValidBefore(), messageHeader.getType(), messageHeader.getReplyTo(), serverMessage.getArrivalTime()); return new DelegatingMessageHeader(header, encoding); }