public boolean send(@NotNull Value value, @Optional JMSQueue replyTo) throws JMSException { Message message = null; if (value.isArray()) { message = _session.createMapMessage(); ArrayValue array = (ArrayValue) value; Set<Map.Entry<Value, Value>> entrySet = array.entrySet(); for (Map.Entry<Value, Value> entry : entrySet) { if (entry.getValue() instanceof BinaryValue) { byte[] bytes = ((BinaryValue) entry.getValue()).toBytes(); ((MapMessage) message).setBytes(entry.getKey().toString(), bytes); } else { // every primitive except for bytes can be translated from a string ((MapMessage) message).setString(entry.getKey().toString(), entry.getValue().toString()); } } } else if (value instanceof BinaryValue) { message = _session.createBytesMessage(); byte[] bytes = ((BinaryValue) value).toBytes(); ((BytesMessage) message).writeBytes(bytes); } else if (value.isLongConvertible()) { message = _session.createStreamMessage(); ((StreamMessage) message).writeLong(value.toLong()); } else if (value.isDoubleConvertible()) { message = _session.createStreamMessage(); ((StreamMessage) message).writeDouble(value.toDouble()); } else if (value.toJavaObject() instanceof String) { message = _session.createTextMessage(); ((TextMessage) message).setText(value.toString()); } else if (value.toJavaObject() instanceof Serializable) { message = _session.createObjectMessage(); ((ObjectMessage) message).setObject((Serializable) value.toJavaObject()); } else { return false; } if (replyTo != null) message.setJMSReplyTo(replyTo._destination); _producer.send(message); return true; }
private MessageImpl convertStreamMessage(final StreamMessage message) throws JMSException { StreamMessageImpl streamMessage = createStreamMessage(); try { message.reset(); while (true) { streamMessage.writeObject(message.readObject()); } } catch (MessageEOFException e) { // we're at the end so don't mind the exception } return streamMessage; }
@Test public void testSendStreamToQueue() throws Exception { PutJMS putJms = new PutJMS(); TestRunner putRunner = TestRunners.newTestRunner(putJms); putRunner.setProperty(JmsProperties.JMS_PROVIDER, JmsProperties.ACTIVEMQ_PROVIDER); putRunner.setProperty(JmsProperties.URL, "vm://localhost?broker.persistent=false"); putRunner.setProperty(JmsProperties.DESTINATION_TYPE, JmsProperties.DESTINATION_TYPE_QUEUE); putRunner.setProperty(JmsProperties.DESTINATION_NAME, "queue.testing"); putRunner.setProperty(JmsProperties.ACKNOWLEDGEMENT_MODE, JmsProperties.ACK_MODE_AUTO); WrappedMessageProducer wrappedProducer = JmsFactory.createMessageProducer(putRunner.getProcessContext(), true); final Session jmsSession = wrappedProducer.getSession(); final MessageProducer producer = wrappedProducer.getProducer(); final StreamMessage message = jmsSession.createStreamMessage(); message.writeBytes("Hello Stream".getBytes()); producer.send(message); jmsSession.commit(); GetJMSQueue getJmsQueue = new GetJMSQueue(); TestRunner runner = TestRunners.newTestRunner(getJmsQueue); runner.setProperty(JmsProperties.JMS_PROVIDER, JmsProperties.ACTIVEMQ_PROVIDER); runner.setProperty(JmsProperties.URL, "vm://localhost?broker.persistent=false"); runner.setProperty(JmsProperties.DESTINATION_NAME, "queue.testing"); runner.setProperty(JmsProperties.ACKNOWLEDGEMENT_MODE, JmsProperties.ACK_MODE_AUTO); runner.run(); List<MockFlowFile> flowFiles = runner.getFlowFilesForRelationship(new Relationship.Builder().name("success").build()); assertTrue(flowFiles.size() == 1); MockFlowFile successFlowFile = flowFiles.get(0); successFlowFile.assertContentEquals("Hello Stream"); successFlowFile.assertAttributeEquals("jms.JMSDestination", "queue.testing"); producer.close(); jmsSession.close(); }
@Test public void testSendStreamMessage() throws JMSException, InterruptedException { JmsProducerCompletionListenerTest.CountingCompletionListener cl = new JmsProducerCompletionListenerTest.CountingCompletionListener(1); JMSProducer producer = context.createProducer(); producer.setAsync(cl); StreamMessage msg = context.createStreamMessage(); msg.setStringProperty("name", name.getMethodName()); String bprop = "booleanProp"; String iprop = "intProp"; msg.setBooleanProperty(bprop, true); msg.setIntProperty(iprop, 42); msg.writeBoolean(true); msg.writeInt(67); producer.send(queue1, msg); JMSConsumer consumer = context.createConsumer(queue1); Message msg2 = consumer.receive(100); Assert.assertNotNull(msg2); Assert.assertTrue(cl.completionLatch.await(1, TimeUnit.SECONDS)); StreamMessage sm = (StreamMessage) cl.lastMessage; Assert.assertEquals(true, sm.getBooleanProperty(bprop)); Assert.assertEquals(42, sm.getIntProperty(iprop)); Assert.assertEquals(true, sm.readBoolean()); Assert.assertEquals(67, sm.readInt()); }
public void writeBytes(byte[] value, int offset, int length) throws JMSException { ((StreamMessage) message).writeBytes(value, offset, length); }
public void writeByte(byte value) throws JMSException { ((StreamMessage) message).writeByte(value); }
public void writeBoolean(boolean value) throws JMSException { ((StreamMessage) message).writeBoolean(value); }
public void reset() throws JMSException { ((StreamMessage) message).reset(); }
public void writeString(String value) throws JMSException { ((StreamMessage) message).writeString(value); }
public void writeShort(short value) throws JMSException { ((StreamMessage) message).writeShort(value); }
public void writeObject(Object value) throws JMSException { ((StreamMessage) message).writeObject(value); }
public void writeInt(int value) throws JMSException { ((StreamMessage) message).writeInt(value); }
public void writeFloat(float value) throws JMSException { ((StreamMessage) message).writeFloat(value); }
public void writeDouble(double value) throws JMSException { ((StreamMessage) message).writeDouble(value); }
public void writeChar(char value) throws JMSException { ((StreamMessage) message).writeChar(value); }