in qpid-jms-client/src/main/java/org/apache/qpid/jms/provider/amqp/message/AmqpCodec.java [284:353]
public static AmqpJmsMessageFacade decodeMessage(AmqpConsumer consumer, ReadableBuffer messageBytes) throws IOException {
DecoderImpl decoder = getDecoder();
decoder.setBuffer(messageBytes);
Header header = null;
DeliveryAnnotations deliveryAnnotations = null;
MessageAnnotations messageAnnotations = null;
Properties properties = null;
ApplicationProperties applicationProperties = null;
Section body = null;
Footer footer = null;
Section section = null;
while (messageBytes.hasRemaining()) {
section = (Section) decoder.readObject();
switch (section.getType()) {
case Header:
header = (Header) section;
break;
case DeliveryAnnotations:
deliveryAnnotations = (DeliveryAnnotations) section;
break;
case MessageAnnotations:
messageAnnotations = (MessageAnnotations) section;
break;
case Properties:
properties = (Properties) section;
break;
case ApplicationProperties:
applicationProperties = (ApplicationProperties) section;
break;
case Data:
case AmqpSequence:
case AmqpValue:
body = section;
break;
case Footer:
footer = (Footer) section;
break;
default:
throw new IOException("Unknown Message Section forced decode abort.");
}
}
decoder.setByteBuffer(null);
// First we try the easy way, if the annotation is there we don't have to work hard.
AmqpJmsMessageFacade result = createFromMsgAnnotation(messageAnnotations);
if (result == null) {
// Next, match specific section structures and content types
result = createWithoutAnnotation(body, properties);
}
if (result != null) {
result.setHeader(header);
result.setDeliveryAnnotations(deliveryAnnotations);
result.setMessageAnnotations(messageAnnotations);
result.setProperties(properties);
result.setApplicationProperties(applicationProperties);
result.setBody(body);
result.setFooter(footer);
result.initialize(consumer);
return result;
}
throw new IOException("Could not create a JMS message from incoming message");
}