/** * This is the constructor to use if you wish to import all messages transactionally. * <br> * Pass in a session which doesn't use auto-commit for sends, and one that does (for management * operations necessary during import). * * @param inputStream the stream from which to read the XML for import * @param session used for sending messages, doesn't need to auto-commit sends * @param managementSession used for management queries, must use auto-commit for sends */ public void process(InputStream inputStream, ClientSession session, ClientSession managementSession) throws Exception { reader = XMLInputFactory.newInstance().createXMLStreamReader(inputStream); messageReader = new XMLMessageImporter(reader, session); messageReader.setOldPrefixTranslation(oldPrefixTranslation); this.session = session; if (managementSession != null) { this.managementSession = managementSession; } else { this.managementSession = session; } processXml(); }
private void processMessageQueues(ArrayList<String> queues) { for (int i = 0; i < reader.getAttributeCount(); i++) { if (XmlDataConstants.QUEUE_NAME.equals(reader.getAttributeLocalName(i))) { String queueName = reader.getAttributeValue(i); String translation = checkPrefix(queueName); queues.add(translation); } } }
@Override public synchronized Message read() throws Exception { reader.getRawXMLReader().nextTag(); // End of document. if (reader.getRawXMLReader().getLocalName().equals("messages")) return null; XMLMessageImporter.MessageInfo messageInfo = reader.readMessage(true); if (messageInfo == null) return null; // This is a large message ActiveMQMessage jmsMessage = new ActiveMQMessage((ClientMessage) messageInfo.message, clientSession); if (messageInfo.tempFile != null) { jmsMessage.setInputStream(new FileInputStream(messageInfo.tempFile)); } return jmsMessage; }
switch (attributeName) { case XmlDataConstants.MESSAGE_TYPE: type = getMessageType(reader.getAttributeValue(i)); break; case XmlDataConstants.MESSAGE_PRIORITY: case XMLStreamConstants.START_ELEMENT: if (XmlDataConstants.MESSAGE_BODY.equals(reader.getLocalName())) { largeMessageTemporaryFile = processMessageBody(message.toCore(), decodeUTF8); } else if (XmlDataConstants.PROPERTIES_CHILD.equals(reader.getLocalName())) { processMessageProperties(message); } else if (XmlDataConstants.QUEUES_CHILD.equals(reader.getLocalName())) { processMessageQueues(queues);
processor.processBodyBytes(bytes); } else { processor.processBodyBytes(decode(cdata.toString())); cdata.setLength(0);
private void processMessage() throws Exception { XMLMessageImporter.MessageInfo info = messageReader.readMessage(false); if (sort) { messages.add(info); } else { sendMessage(info.queues, info.message, info.tempFile); } }
@Override public synchronized void start() throws Exception { if (writer != null) { writer.getRawXMLWriter().writeStartDocument(XmlDataConstants.XML_VERSION); writer.getRawXMLWriter().writeStartElement(XmlDataConstants.MESSAGES_PARENT); } if (reader != null) { // <messages> reader.getRawXMLReader().nextTag(); } }
@Override public void setInput(InputStream inputStream, Session session) throws Exception { XMLStreamReader streamReader = XMLInputFactory.newInstance().createXMLStreamReader(inputStream); this.clientSession = ((ActiveMQSession) session).getCoreSession(); this.reader = new XMLMessageImporter(streamReader, clientSession); }
private File processMessageBody(final ICoreMessage message, boolean decodeTextMessage) throws XMLStreamException, IOException { File tempFileName = null; boolean isLarge = false; for (int i = 0; i < reader.getAttributeCount(); i++) { String attributeName = reader.getAttributeLocalName(i); if (XmlDataConstants.MESSAGE_IS_LARGE.equals(attributeName)) { isLarge = Boolean.parseBoolean(reader.getAttributeValue(i)); } } reader.next(); if (logger.isDebugEnabled()) { logger.debug("XMLStreamReader impl: " + reader); } if (isLarge) { tempFileName = File.createTempFile("largeMessage", ".tmp"); if (logger.isDebugEnabled()) { logger.debug("Creating temp file " + tempFileName + " for large message."); } try (OutputStream out = new BufferedOutputStream(new FileOutputStream(tempFileName))) { getMessageBodyBytes(bytes -> out.write(bytes), (message.toCore().getType() == Message.TEXT_TYPE) && decodeTextMessage); } FileInputStream fileInputStream = new FileInputStream(tempFileName); BufferedInputStream bufferedInput = new BufferedInputStream(fileInputStream); ((ClientMessage) message).setBodyInputStream(bufferedInput); } else { getMessageBodyBytes(bytes -> message.getBodyBuffer().writeBytes(bytes), (message.toCore().getType() == Message.TEXT_TYPE) && decodeTextMessage); } return tempFileName; }
switch (attributeName) { case XmlDataConstants.MESSAGE_TYPE: type = getMessageType(reader.getAttributeValue(i)); break; case XmlDataConstants.MESSAGE_PRIORITY: case XMLStreamConstants.START_ELEMENT: if (XmlDataConstants.MESSAGE_BODY.equals(reader.getLocalName())) { largeMessageTemporaryFile = processMessageBody(message.toCore(), decodeUTF8); } else if (XmlDataConstants.PROPERTIES_CHILD.equals(reader.getLocalName())) { processMessageProperties(message); } else if (XmlDataConstants.QUEUES_CHILD.equals(reader.getLocalName())) { processMessageQueues(queues);
processor.processBodyBytes(bytes); } else { processor.processBodyBytes(decode(cdata.toString())); cdata.setLength(0);
private void processMessage() throws Exception { XMLMessageImporter.MessageInfo info = messageReader.readMessage(false); if (sort) { messages.add(info); } else { sendMessage(info.queues, info.message, info.tempFile); } }
@Override public synchronized void start() throws Exception { if (writer != null) { writer.getRawXMLWriter().writeStartDocument(XmlDataConstants.XML_VERSION); writer.getRawXMLWriter().writeStartElement(XmlDataConstants.MESSAGES_PARENT); } if (reader != null) { // <messages> reader.getRawXMLReader().nextTag(); } }
@Override public void setInput(InputStream inputStream, Session session) throws Exception { XMLStreamReader streamReader = XMLInputFactory.newInstance().createXMLStreamReader(inputStream); this.clientSession = ((ActiveMQSession) session).getCoreSession(); this.reader = new XMLMessageImporter(streamReader, clientSession); }
private File processMessageBody(final ICoreMessage message, boolean decodeTextMessage) throws XMLStreamException, IOException { File tempFileName = null; boolean isLarge = false; for (int i = 0; i < reader.getAttributeCount(); i++) { String attributeName = reader.getAttributeLocalName(i); if (XmlDataConstants.MESSAGE_IS_LARGE.equals(attributeName)) { isLarge = Boolean.parseBoolean(reader.getAttributeValue(i)); } } reader.next(); if (logger.isDebugEnabled()) { logger.debug("XMLStreamReader impl: " + reader); } if (isLarge) { tempFileName = File.createTempFile("largeMessage", ".tmp"); if (logger.isDebugEnabled()) { logger.debug("Creating temp file " + tempFileName + " for large message."); } try (OutputStream out = new BufferedOutputStream(new FileOutputStream(tempFileName))) { getMessageBodyBytes(bytes -> out.write(bytes), (message.toCore().getType() == Message.TEXT_TYPE) && decodeTextMessage); } FileInputStream fileInputStream = new FileInputStream(tempFileName); BufferedInputStream bufferedInput = new BufferedInputStream(fileInputStream); ((ClientMessage) message).setBodyInputStream(bufferedInput); } else { getMessageBodyBytes(bytes -> message.getBodyBuffer().writeBytes(bytes), (message.toCore().getType() == Message.TEXT_TYPE) && decodeTextMessage); } return tempFileName; }
@Override public synchronized Message read() throws Exception { reader.getRawXMLReader().nextTag(); // End of document. if (reader.getRawXMLReader().getLocalName().equals("messages")) return null; XMLMessageImporter.MessageInfo messageInfo = reader.readMessage(true); if (messageInfo == null) return null; // This is a large message ActiveMQMessage jmsMessage = new ActiveMQMessage((ClientMessage) messageInfo.message, clientSession); if (messageInfo.tempFile != null) { jmsMessage.setInputStream(new FileInputStream(messageInfo.tempFile)); } return jmsMessage; }
/** * This is the constructor to use if you wish to import all messages transactionally. * <br> * Pass in a session which doesn't use auto-commit for sends, and one that does (for management * operations necessary during import). * * @param inputStream the stream from which to read the XML for import * @param session used for sending messages, doesn't need to auto-commit sends * @param managementSession used for management queries, must use auto-commit for sends */ public void process(InputStream inputStream, ClientSession session, ClientSession managementSession) throws Exception { reader = XMLInputFactory.newInstance().createXMLStreamReader(inputStream); messageReader = new XMLMessageImporter(reader, session); messageReader.setOldPrefixTranslation(oldPrefixTranslation); this.session = session; if (managementSession != null) { this.managementSession = managementSession; } else { this.managementSession = session; } processXml(); }
break; case XmlDataConstants.PROPERTY_TYPE_BYTES: message.putBytesProperty(key, value == null ? null : decode(value)); break; case XmlDataConstants.PROPERTY_TYPE_DOUBLE:
private void processMessageQueues(ArrayList<String> queues) { for (int i = 0; i < reader.getAttributeCount(); i++) { if (XmlDataConstants.QUEUE_NAME.equals(reader.getAttributeLocalName(i))) { String queueName = reader.getAttributeValue(i); String translation = checkPrefix(queueName); queues.add(translation); } } }
break; case XmlDataConstants.PROPERTY_TYPE_BYTES: message.putBytesProperty(key, value == null ? null : decode(value)); break; case XmlDataConstants.PROPERTY_TYPE_DOUBLE: