List of usage examples for javax.jms StreamMessage readBytes
int readBytes(byte[] value) throws JMSException;
From source file:com.mirth.connect.connectors.jms.JmsMessageUtils.java
/** * @param message/*ww w . j a va 2 s .co m*/ * the message to receive the bytes from. Note this only works * for TextMessge, ObjectMessage, StreamMessage and BytesMessage. * @return a byte array corresponding with the message payload * @throws JMSException * if the message can't be read or if the message passed is a * MapMessage * @throws java.io.IOException * if a failiare occurs while stream and converting the message * data */ public static byte[] getBytesFromMessage(Message message) throws JMSException, IOException { ByteArrayOutputStream baos = new ByteArrayOutputStream(); byte[] buffer = new byte[1024 * 2]; int len; if (message instanceof BytesMessage) { BytesMessage bMsg = (BytesMessage) message; // put message in read-only mode bMsg.reset(); while ((len = bMsg.readBytes(buffer)) != -1) { baos.write(buffer, 0, len); } } else if (message instanceof StreamMessage) { StreamMessage sMsg = (StreamMessage) message; sMsg.reset(); while ((len = sMsg.readBytes(buffer)) != -1) { baos.write(buffer, 0, len); } } else if (message instanceof ObjectMessage) { ObjectMessage oMsg = (ObjectMessage) message; ByteArrayOutputStream bs = new ByteArrayOutputStream(); ObjectOutputStream os = new ObjectOutputStream(bs); os.writeObject(oMsg.getObject()); os.flush(); baos.write(bs.toByteArray()); os.close(); bs.close(); } else if (message instanceof TextMessage) { TextMessage tMsg = (TextMessage) message; baos.write(tMsg.getText().getBytes()); } else { throw new JMSException("Cannot get bytes from Map Message"); } baos.flush(); byte[] bytes = baos.toByteArray(); baos.close(); return bytes; }
From source file:com.jkoolcloud.tnt4j.streams.parsers.ActivityJMSMessageParser.java
/** * Parse JMS {@link StreamMessage} activity info into activity data map. * * @param streamMessage/* w w w . j av a 2 s .c o m*/ * JMS stream message * @param dataMap * activity data map collected from JMS {@link StreamMessage} * @throws JMSException * if JMS exception occurs while reading bytes from message. */ protected void parseStreamMessage(StreamMessage streamMessage, Map<String, Object> dataMap) throws JMSException { streamMessage.reset(); byte[] buffer = new byte[BYTE_BUFFER_LENGTH]; int bytesRead = 0; ByteArrayOutputStream baos = new ByteArrayOutputStream(buffer.length); try { do { bytesRead = streamMessage.readBytes(buffer); baos.write(buffer); } while (bytesRead != 0); } catch (IOException exc) { logger().log(OpLevel.ERROR, StreamsResources.getString(JMSStreamConstants.RESOURCE_BUNDLE_NAME, "ActivityJMSMessageParser.bytes.buffer.error"), exc); } byte[] bytes = baos.toByteArray(); Utils.close(baos); if (ArrayUtils.isNotEmpty(bytes)) { dataMap.put(StreamsConstants.ACTIVITY_DATA_KEY, convertToString ? Utils.getString(bytes) : bytes); } }
From source file:org.mule.transport.jms.JmsMessageUtils.java
/** * @param message the message to receive the bytes from. Note this only works for * TextMessge, ObjectMessage, StreamMessage and BytesMessage. * @param jmsSpec indicates the JMS API version, either * {@link JmsConstants#JMS_SPECIFICATION_102B} or * {@link JmsConstants#JMS_SPECIFICATION_11}. Any other value * including <code>null</code> is treated as fallback to * {@link JmsConstants#JMS_SPECIFICATION_102B}. * @return a byte array corresponding with the message payload * @throws JMSException if the message can't be read or if the message passed is * a MapMessage * @throws java.io.IOException if a failure occurs while reading the stream and * converting the message data *///from www . j a va 2 s .c om public static byte[] toByteArray(Message message, String jmsSpec, String encoding) throws JMSException, IOException { if (message instanceof BytesMessage) { BytesMessage bMsg = (BytesMessage) message; bMsg.reset(); if (JmsConstants.JMS_SPECIFICATION_11.equals(jmsSpec)) { long bmBodyLength = bMsg.getBodyLength(); if (bmBodyLength > Integer.MAX_VALUE) { throw new JMSException("Size of BytesMessage exceeds Integer.MAX_VALUE; " + "please consider using JMS StreamMessage instead"); } if (bmBodyLength > 0) { byte[] bytes = new byte[(int) bmBodyLength]; bMsg.readBytes(bytes); return bytes; } else { return ArrayUtils.EMPTY_BYTE_ARRAY; } } else { ByteArrayOutputStream baos = new ByteArrayOutputStream(4096); byte[] buffer = new byte[4096]; int len; while ((len = bMsg.readBytes(buffer)) != -1) { baos.write(buffer, 0, len); } if (baos.size() > 0) { return baos.toByteArray(); } else { return ArrayUtils.EMPTY_BYTE_ARRAY; } } } else if (message instanceof StreamMessage) { StreamMessage sMsg = (StreamMessage) message; sMsg.reset(); ByteArrayOutputStream baos = new ByteArrayOutputStream(4096); byte[] buffer = new byte[4096]; int len; while ((len = sMsg.readBytes(buffer)) != -1) { baos.write(buffer, 0, len); } return baos.toByteArray(); } else if (message instanceof ObjectMessage) { ObjectMessage oMsg = (ObjectMessage) message; ByteArrayOutputStream baos = new ByteArrayOutputStream(); ObjectOutputStream os = new ObjectOutputStream(baos); os.writeObject(oMsg.getObject()); os.flush(); os.close(); return baos.toByteArray(); } else if (message instanceof TextMessage) { TextMessage tMsg = (TextMessage) message; String tMsgText = tMsg.getText(); if (null == tMsgText) { // Avoid creating new instances of byte arrays, even empty ones. The // load on this part of the code can be high. return ArrayUtils.EMPTY_BYTE_ARRAY; } else { return tMsgText.getBytes(encoding); } } else { throw new JMSException("Cannot get bytes from Map Message"); } }