use of com.swiftmq.amqp.v100.generated.messaging.message_format.Data in project swiftmq-ce by iitsoftware.
the class BodyTypeMessageFactory method create.
public MessageImpl create(AMQPMessage source) throws Exception {
List data = source.getData();
if (data != null && data.size() > 0) {
if (data.size() == 1) {
byte[] b = ((Data) data.get(0)).getValue();
return new BytesMessageImpl(b, b.length);
} else {
BytesMessageImpl msg = new BytesMessageImpl();
for (int i = 0; i < data.size(); i++) {
msg.writeBytes(((Data) data.get(i)).getValue());
}
return msg;
}
}
List sequenceList = source.getAmqpSequence();
if (sequenceList != null && sequenceList.size() > 0) {
StreamMessageImpl msg = new StreamMessageImpl();
for (int i = 0; i < sequenceList.size(); i++) {
AmqpSequence seq = (AmqpSequence) sequenceList.get(i);
List list = seq.getValue();
if (list != null && list.size() > 0) {
for (int j = 0; j < list.size(); j++) {
try {
msg.writeObject(Util.convertAMQPtoJMS((AMQPType) list.get(j)));
} catch (Exception e) {
msg.setBooleanProperty(PROP_ERROR, true);
msg.setStringProperty(PROP_ERROR_CAUSE, e.toString());
break;
}
}
}
}
return msg;
}
AmqpValue amqpValue = source.getAmqpValue();
if (amqpValue != null) {
AMQPType value = amqpValue.getValue();
AMQPDescribedConstructor constructor = value.getConstructor();
int code = constructor != null ? constructor.getFormatCode() : value.getCode();
if (AMQPTypeDecoder.isSymbol(code) || AMQPTypeDecoder.isString(code)) {
TextMessageImpl msg = new TextMessageImpl();
msg.setText((String) Util.convertAMQPtoJMS(value));
return msg;
}
if (AMQPTypeDecoder.isBinary(code)) {
byte[] b = ((AMQPBinary) value).getValue();
return new BytesMessageImpl(b, b.length);
}
if (AMQPTypeDecoder.isList(code)) {
StreamMessageImpl msg = new StreamMessageImpl();
List list = ((AMQPList) value).getValue();
for (int i = 0; i < list.size(); i++) {
try {
msg.writeObject(Util.convertAMQPtoJMS((AMQPType) list.get(i)));
} catch (Exception e) {
msg.setBooleanProperty(PROP_ERROR, true);
msg.setStringProperty(PROP_ERROR_CAUSE, e.toString());
break;
}
}
return msg;
}
if (AMQPTypeDecoder.isMap(code)) {
MapMessageImpl msg = new MapMessageImpl();
Map map = ((AMQPMap) value).getValue();
for (Iterator iter = map.entrySet().iterator(); iter.hasNext(); ) {
Map.Entry entry = (Map.Entry) iter.next();
try {
String name = Util.convertAMQPtoJMS((AMQPType) entry.getKey()).toString();
msg.setObject(name, Util.convertAMQPtoJMS((AMQPType) entry.getValue()));
} catch (Exception e) {
msg.setBooleanProperty(PROP_ERROR, true);
msg.setStringProperty(PROP_ERROR_CAUSE, e.toString());
break;
}
}
return msg;
}
// Everything else is a ObjectMessage
ObjectMessageImpl msg = new ObjectMessageImpl();
try {
msg.setObject((Serializable) Util.convertAMQPtoJMS(value));
} catch (Exception e) {
msg.setBooleanProperty(PROP_ERROR, true);
msg.setStringProperty(PROP_ERROR_CAUSE, e.toString());
}
return msg;
}
return new MessageImpl();
}
use of com.swiftmq.amqp.v100.generated.messaging.message_format.Data in project swiftmq-ce by iitsoftware.
the class MessageTypeBodyFactory method createBody.
public void createBody(MessageImpl jmsMessage, AMQPMessage amqpMessage) throws JMSException, AMQPException {
jmsMessage.reset();
if (jmsMessage instanceof TextMessageImpl) {
amqpMessage.setAmqpValue(new AmqpValue(new AMQPString(((TextMessageImpl) jmsMessage).getText())));
} else if (jmsMessage instanceof MapMessageImpl) {
MapMessageImpl msg = (MapMessageImpl) jmsMessage;
Map map = new HashMap();
for (Enumeration _enum = msg.getMapNames(); _enum.hasMoreElements(); ) {
String name = (String) _enum.nextElement();
map.put(new AMQPString(name), Util.convertJMStoAMQP(msg.getObject(name)));
}
try {
amqpMessage.setAmqpValue(new AmqpValue(new AMQPMap(map)));
} catch (IOException e) {
throw new AMQPException(e.toString());
}
} else if (jmsMessage instanceof BytesMessageImpl) {
BytesMessageImpl msg = (BytesMessageImpl) jmsMessage;
byte[] b = new byte[(int) msg.getBodyLength()];
msg.readBytes(b);
amqpMessage.addData(new Data(b));
} else if (jmsMessage instanceof ObjectMessageImpl) {
amqpMessage.setAmqpValue(new AmqpValue(Util.convertJMStoAMQP(((ObjectMessageImpl) jmsMessage).getObject())));
} else if (jmsMessage instanceof StreamMessageImpl) {
List list = new ArrayList();
StreamMessageImpl msg = (StreamMessageImpl) jmsMessage;
try {
for (; ; ) {
list.add(Util.convertJMStoAMQP(msg.readObject()));
}
} catch (MessageEOFException e) {
}
try {
amqpMessage.addAmqpSequence(new AmqpSequence(list));
} catch (IOException e) {
throw new AMQPException(e.toString());
}
}
}
use of com.swiftmq.amqp.v100.generated.messaging.message_format.Data in project rabbitmq-stream-java-client by rabbitmq.
the class SwiftMqCodec method createMessage.
protected Message createMessage(byte[] data) {
AMQPMessage amqpMessage;
try {
amqpMessage = new AMQPMessage(data);
} catch (Exception e) {
throw new StreamException("Error while decoding AMQP 1.0 message");
}
Object body = extractBody(amqpMessage);
com.rabbitmq.stream.Properties properties = createProperties(amqpMessage);
Map<String, Object> applicationProperties = createApplicationProperties(amqpMessage);
Map<String, Object> messageAnnotations = createMessageAnnotations(amqpMessage);
return new SwiftMqMessage(amqpMessage, body, properties, applicationProperties, messageAnnotations);
}
Aggregations