mirror of
https://github.com/apache/activemq-artemis.git
synced 2025-02-24 11:30:47 +00:00
This closes #2640
This commit is contained in:
commit
0043d9cd29
@ -23,6 +23,7 @@ import javax.xml.transform.dom.DOMSource;
|
|||||||
import javax.xml.validation.Schema;
|
import javax.xml.validation.Schema;
|
||||||
import javax.xml.validation.SchemaFactory;
|
import javax.xml.validation.SchemaFactory;
|
||||||
import javax.xml.validation.Validator;
|
import javax.xml.validation.Validator;
|
||||||
|
import java.io.InputStream;
|
||||||
import java.io.InputStreamReader;
|
import java.io.InputStreamReader;
|
||||||
import java.io.Reader;
|
import java.io.Reader;
|
||||||
import java.io.StringReader;
|
import java.io.StringReader;
|
||||||
@ -51,12 +52,18 @@ public final class XMLUtil {
|
|||||||
// Utility class
|
// Utility class
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Element streamToElement(InputStream inputStream) throws Exception {
|
||||||
|
try (Reader reader = new InputStreamReader(inputStream)) {
|
||||||
|
return XMLUtil.readerToElement(reader);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public static Element stringToElement(final String s) throws Exception {
|
public static Element stringToElement(final String s) throws Exception {
|
||||||
return XMLUtil.readerToElement(new StringReader(s));
|
return XMLUtil.readerToElement(new StringReader(s));
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Element urlToElement(final URL url) throws Exception {
|
public static Element urlToElement(final URL url) throws Exception {
|
||||||
return XMLUtil.readerToElement(new InputStreamReader(url.openStream()));
|
return XMLUtil.streamToElement(url.openStream());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static String readerToString(final Reader r) throws Exception {
|
public static String readerToString(final Reader r) throws Exception {
|
||||||
@ -70,24 +77,11 @@ public final class XMLUtil {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static Element readerToElement(final Reader r) throws Exception {
|
public static Element readerToElement(final Reader r) throws Exception {
|
||||||
// Read into string
|
|
||||||
StringBuffer buff = new StringBuffer();
|
|
||||||
int c;
|
|
||||||
while ((c = r.read()) != -1) {
|
|
||||||
buff.append((char) c);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Quick hardcoded replace, FIXME this is a kludge - use regexp to match properly
|
|
||||||
String s = buff.toString();
|
|
||||||
|
|
||||||
StringReader sreader = new StringReader(s);
|
|
||||||
|
|
||||||
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
|
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
|
||||||
// see http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6529766
|
|
||||||
factory.setNamespaceAware(true);
|
factory.setNamespaceAware(true);
|
||||||
factory.setXIncludeAware(true);
|
factory.setXIncludeAware(true);
|
||||||
DocumentBuilder parser = factory.newDocumentBuilder();
|
DocumentBuilder parser = factory.newDocumentBuilder();
|
||||||
Document doc = parser.parse(new InputSource(sreader));
|
Document doc = replaceSystemPropsInXml(parser.parse(new InputSource(r)));
|
||||||
return doc.getDocumentElement();
|
return doc.getDocumentElement();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -257,7 +251,8 @@ public final class XMLUtil {
|
|||||||
}
|
}
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
public static String replaceSystemProps(String xml) {
|
|
||||||
|
public static String replaceSystemPropsInString(String xml) {
|
||||||
while (xml.contains("${")) {
|
while (xml.contains("${")) {
|
||||||
int start = xml.indexOf("${");
|
int start = xml.indexOf("${");
|
||||||
int end = xml.indexOf("}") + 1;
|
int end = xml.indexOf("}") + 1;
|
||||||
@ -280,6 +275,33 @@ public final class XMLUtil {
|
|||||||
return xml;
|
return xml;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static Document replaceSystemPropsInXml(Document doc) {
|
||||||
|
NodeList nodeList = doc.getElementsByTagName("*");
|
||||||
|
for (int i = 0, len = nodeList.getLength(); i < len; i++) {
|
||||||
|
Node node = nodeList.item(i);
|
||||||
|
if (node != null && node.getNodeType() == Node.ELEMENT_NODE) {
|
||||||
|
if (node.hasAttributes()) {
|
||||||
|
NamedNodeMap attributes = node.getAttributes();
|
||||||
|
for (int j = 0; j < attributes.getLength(); j++) {
|
||||||
|
Node attribute = attributes.item(j);
|
||||||
|
attribute.setTextContent(XMLUtil.replaceSystemPropsInString(attribute.getTextContent()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (node.hasChildNodes()) {
|
||||||
|
NodeList children = node.getChildNodes();
|
||||||
|
for (int j = 0; j < children.getLength(); j++) {
|
||||||
|
String value = children.item(j).getNodeValue();
|
||||||
|
if (value != null) {
|
||||||
|
children.item(j).setNodeValue(XMLUtil.replaceSystemPropsInString(value));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return doc;
|
||||||
|
}
|
||||||
|
|
||||||
public static long parseLong(final Node elem) {
|
public static long parseLong(final Node elem) {
|
||||||
String value = elem.getTextContent().trim();
|
String value = elem.getTextContent().trim();
|
||||||
|
|
||||||
|
@ -214,7 +214,7 @@ public class XMLUtilTest extends SilentTestCase {
|
|||||||
String after = "<configuration>\n" + " <test name=\"test1\">content1</test>\n" + " <test name=\"test2\">content2</test>\n" + " <test name=\"test3\">content3</test>\n" + " <test name=\"test4\">content4</test>\n" + " <test name=\"test5\">content5</test>\n" + " <test name=\"test6\">content6</test>\n" + "</configuration>";
|
String after = "<configuration>\n" + " <test name=\"test1\">content1</test>\n" + " <test name=\"test2\">content2</test>\n" + " <test name=\"test3\">content3</test>\n" + " <test name=\"test4\">content4</test>\n" + " <test name=\"test5\">content5</test>\n" + " <test name=\"test6\">content6</test>\n" + "</configuration>";
|
||||||
System.setProperty("sysprop1", "test1");
|
System.setProperty("sysprop1", "test1");
|
||||||
System.setProperty("sysprop2", "content4");
|
System.setProperty("sysprop2", "content4");
|
||||||
String replaced = XMLUtil.replaceSystemProps(before);
|
String replaced = XMLUtil.replaceSystemPropsInString(before);
|
||||||
Assert.assertEquals(after, replaced);
|
Assert.assertEquals(after, replaced);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -17,9 +17,6 @@
|
|||||||
package org.apache.activemq.artemis.jms.server.impl;
|
package org.apache.activemq.artemis.jms.server.impl;
|
||||||
|
|
||||||
import javax.naming.NamingException;
|
import javax.naming.NamingException;
|
||||||
import java.io.InputStream;
|
|
||||||
import java.io.InputStreamReader;
|
|
||||||
import java.io.Reader;
|
|
||||||
import java.net.InetAddress;
|
import java.net.InetAddress;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.net.UnknownHostException;
|
import java.net.UnknownHostException;
|
||||||
@ -1632,13 +1629,7 @@ public class JMSServerManagerImpl implements JMSServerManager, ActivateCallback
|
|||||||
public void reload(URL url) throws Exception {
|
public void reload(URL url) throws Exception {
|
||||||
ActiveMQServerLogger.LOGGER.reloadingConfiguration("jms");
|
ActiveMQServerLogger.LOGGER.reloadingConfiguration("jms");
|
||||||
|
|
||||||
InputStream input = url.openStream();
|
Element e = XMLUtil.urlToElement(url);
|
||||||
String xml;
|
|
||||||
try (Reader reader = new InputStreamReader(input)) {
|
|
||||||
xml = XMLUtil.readerToString(reader);
|
|
||||||
}
|
|
||||||
xml = XMLUtil.replaceSystemProps(xml);
|
|
||||||
Element e = XMLUtil.stringToElement(xml);
|
|
||||||
|
|
||||||
if (config instanceof FileJMSConfiguration) {
|
if (config instanceof FileJMSConfiguration) {
|
||||||
NodeList children = e.getElementsByTagName("jms");
|
NodeList children = e.getElementsByTagName("jms");
|
||||||
|
@ -124,7 +124,7 @@ public class MessageServiceManager {
|
|||||||
JAXBContext jaxb = JAXBContext.newInstance(MessageServiceConfiguration.class);
|
JAXBContext jaxb = JAXBContext.newInstance(MessageServiceConfiguration.class);
|
||||||
try (Reader reader = new InputStreamReader(url.openStream())) {
|
try (Reader reader = new InputStreamReader(url.openStream())) {
|
||||||
String xml = XMLUtil.readerToString(reader);
|
String xml = XMLUtil.readerToString(reader);
|
||||||
xml = XMLUtil.replaceSystemProps(xml);
|
xml = XMLUtil.replaceSystemPropsInString(xml);
|
||||||
configuration = (MessageServiceConfiguration) jaxb.createUnmarshaller().unmarshal(new StringReader(xml));
|
configuration = (MessageServiceConfiguration) jaxb.createUnmarshaller().unmarshal(new StringReader(xml));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -17,8 +17,6 @@
|
|||||||
package org.apache.activemq.artemis.core.config;
|
package org.apache.activemq.artemis.core.config;
|
||||||
|
|
||||||
import javax.management.MBeanServer;
|
import javax.management.MBeanServer;
|
||||||
import java.io.InputStreamReader;
|
|
||||||
import java.io.Reader;
|
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.LinkedHashMap;
|
import java.util.LinkedHashMap;
|
||||||
@ -68,23 +66,18 @@ public class FileDeploymentManager {
|
|||||||
// The URL is outside of the classloader. Trying a pure url now
|
// The URL is outside of the classloader. Trying a pure url now
|
||||||
url = new URL(configurationUrl);
|
url = new URL(configurationUrl);
|
||||||
}
|
}
|
||||||
// create a reader
|
|
||||||
try (Reader reader = new InputStreamReader(url.openStream())) {
|
|
||||||
String xml = XMLUtil.readerToString(reader);
|
|
||||||
//replace any system props
|
|
||||||
xml = XMLUtil.replaceSystemProps(xml);
|
|
||||||
Element e = XMLUtil.stringToElement(xml);
|
|
||||||
|
|
||||||
//iterate around all the deployables
|
Element e = XMLUtil.urlToElement(url);
|
||||||
for (Deployable deployable : deployables.values()) {
|
|
||||||
String root = deployable.getRootElement();
|
//iterate around all the deployables
|
||||||
NodeList children = e.getElementsByTagName(root);
|
for (Deployable deployable : deployables.values()) {
|
||||||
//if the root element exists then parse it
|
String root = deployable.getRootElement();
|
||||||
if (root != null && children.getLength() > 0) {
|
NodeList children = e.getElementsByTagName(root);
|
||||||
Node item = children.item(0);
|
//if the root element exists then parse it
|
||||||
XMLUtil.validate(item, deployable.getSchema());
|
if (root != null && children.getLength() > 0) {
|
||||||
deployable.parse((Element) item, url);
|
Node item = children.item(0);
|
||||||
}
|
XMLUtil.validate(item, deployable.getSchema());
|
||||||
|
deployable.parse((Element) item, url);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -18,8 +18,6 @@ package org.apache.activemq.artemis.core.config.impl;
|
|||||||
|
|
||||||
import javax.management.MBeanServer;
|
import javax.management.MBeanServer;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.io.InputStreamReader;
|
|
||||||
import java.io.Reader;
|
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
@ -102,10 +100,7 @@ public class LegacyJMSConfiguration implements Deployable {
|
|||||||
|
|
||||||
|
|
||||||
public void parseConfiguration(final InputStream input) throws Exception {
|
public void parseConfiguration(final InputStream input) throws Exception {
|
||||||
Reader reader = new InputStreamReader(input);
|
Element e = XMLUtil.streamToElement(input);
|
||||||
String xml = XMLUtil.readerToString(reader);
|
|
||||||
xml = XMLUtil.replaceSystemProps(xml);
|
|
||||||
Element e = XMLUtil.stringToElement(xml);
|
|
||||||
// only parse elements from <jms>
|
// only parse elements from <jms>
|
||||||
NodeList children = e.getElementsByTagName(CONFIGURATION_SCHEMA_ROOT_ELEMENT);
|
NodeList children = e.getElementsByTagName(CONFIGURATION_SCHEMA_ROOT_ELEMENT);
|
||||||
if (children.getLength() > 0) {
|
if (children.getLength() > 0) {
|
||||||
|
@ -16,9 +16,12 @@
|
|||||||
*/
|
*/
|
||||||
package org.apache.activemq.artemis.core.deployers.impl;
|
package org.apache.activemq.artemis.core.deployers.impl;
|
||||||
|
|
||||||
|
import javax.xml.XMLConstants;
|
||||||
|
import javax.xml.transform.dom.DOMSource;
|
||||||
|
import javax.xml.validation.Schema;
|
||||||
|
import javax.xml.validation.SchemaFactory;
|
||||||
|
import javax.xml.validation.Validator;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.io.InputStreamReader;
|
|
||||||
import java.io.Reader;
|
|
||||||
import java.security.AccessController;
|
import java.security.AccessController;
|
||||||
import java.security.PrivilegedAction;
|
import java.security.PrivilegedAction;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
@ -93,12 +96,6 @@ import org.w3c.dom.NamedNodeMap;
|
|||||||
import org.w3c.dom.Node;
|
import org.w3c.dom.Node;
|
||||||
import org.w3c.dom.NodeList;
|
import org.w3c.dom.NodeList;
|
||||||
|
|
||||||
import javax.xml.XMLConstants;
|
|
||||||
import javax.xml.transform.dom.DOMSource;
|
|
||||||
import javax.xml.validation.Schema;
|
|
||||||
import javax.xml.validation.SchemaFactory;
|
|
||||||
import javax.xml.validation.Validator;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Parses an XML document according to the {@literal artemis-configuration.xsd} schema.
|
* Parses an XML document according to the {@literal artemis-configuration.xsd} schema.
|
||||||
*/
|
*/
|
||||||
@ -286,10 +283,7 @@ public final class FileConfigurationParser extends XMLConfigurationUtil {
|
|||||||
}
|
}
|
||||||
|
|
||||||
public Configuration parseMainConfig(final InputStream input) throws Exception {
|
public Configuration parseMainConfig(final InputStream input) throws Exception {
|
||||||
Reader reader = new InputStreamReader(input);
|
Element e = XMLUtil.streamToElement(input);
|
||||||
String xml = XMLUtil.readerToString(reader);
|
|
||||||
xml = XMLUtil.replaceSystemProps(xml);
|
|
||||||
Element e = XMLUtil.stringToElement(xml);
|
|
||||||
SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
|
SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
|
||||||
Schema schema = schemaFactory.newSchema(XMLUtil.findResource("schema/artemis-server.xsd"));
|
Schema schema = schemaFactory.newSchema(XMLUtil.findResource("schema/artemis-server.xsd"));
|
||||||
Validator validator = schema.newValidator();
|
Validator validator = schema.newValidator();
|
||||||
|
@ -16,42 +16,15 @@
|
|||||||
*/
|
*/
|
||||||
package org.apache.activemq.artemis.core.persistence.impl.journal;
|
package org.apache.activemq.artemis.core.persistence.impl.journal;
|
||||||
|
|
||||||
import static org.apache.activemq.artemis.core.persistence.impl.journal.JournalRecordIds.ACKNOWLEDGE_CURSOR;
|
import javax.transaction.xa.Xid;
|
||||||
import static org.apache.activemq.artemis.core.persistence.impl.journal.JournalRecordIds.ACKNOWLEDGE_REF;
|
|
||||||
import static org.apache.activemq.artemis.core.persistence.impl.journal.JournalRecordIds.ADDRESS_BINDING_RECORD;
|
|
||||||
import static org.apache.activemq.artemis.core.persistence.impl.journal.JournalRecordIds.ADDRESS_SETTING_RECORD;
|
|
||||||
import static org.apache.activemq.artemis.core.persistence.impl.journal.JournalRecordIds.ADD_LARGE_MESSAGE;
|
|
||||||
import static org.apache.activemq.artemis.core.persistence.impl.journal.JournalRecordIds.ADD_LARGE_MESSAGE_PENDING;
|
|
||||||
import static org.apache.activemq.artemis.core.persistence.impl.journal.JournalRecordIds.ADD_MESSAGE;
|
|
||||||
import static org.apache.activemq.artemis.core.persistence.impl.journal.JournalRecordIds.ADD_MESSAGE_PROTOCOL;
|
|
||||||
import static org.apache.activemq.artemis.core.persistence.impl.journal.JournalRecordIds.ADD_REF;
|
|
||||||
import static org.apache.activemq.artemis.core.persistence.impl.journal.JournalRecordIds.DUPLICATE_ID;
|
|
||||||
import static org.apache.activemq.artemis.core.persistence.impl.journal.JournalRecordIds.HEURISTIC_COMPLETION;
|
|
||||||
import static org.apache.activemq.artemis.core.persistence.impl.journal.JournalRecordIds.ID_COUNTER_RECORD;
|
|
||||||
import static org.apache.activemq.artemis.core.persistence.impl.journal.JournalRecordIds.PAGE_CURSOR_COMPLETE;
|
|
||||||
import static org.apache.activemq.artemis.core.persistence.impl.journal.JournalRecordIds.PAGE_CURSOR_COUNTER_INC;
|
|
||||||
import static org.apache.activemq.artemis.core.persistence.impl.journal.JournalRecordIds.PAGE_CURSOR_COUNTER_VALUE;
|
|
||||||
import static org.apache.activemq.artemis.core.persistence.impl.journal.JournalRecordIds.PAGE_CURSOR_PENDING_COUNTER;
|
|
||||||
import static org.apache.activemq.artemis.core.persistence.impl.journal.JournalRecordIds.PAGE_TRANSACTION;
|
|
||||||
import static org.apache.activemq.artemis.core.persistence.impl.journal.JournalRecordIds.QUEUE_BINDING_RECORD;
|
|
||||||
import static org.apache.activemq.artemis.core.persistence.impl.journal.JournalRecordIds.QUEUE_STATUS_RECORD;
|
|
||||||
import static org.apache.activemq.artemis.core.persistence.impl.journal.JournalRecordIds.SECURITY_RECORD;
|
|
||||||
import static org.apache.activemq.artemis.core.persistence.impl.journal.JournalRecordIds.SET_SCHEDULED_DELIVERY_TIME;
|
|
||||||
import static org.apache.activemq.artemis.core.persistence.impl.journal.JournalRecordIds.UPDATE_DELIVERY_COUNT;
|
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
import java.io.IOException;
|
|
||||||
import java.io.InputStreamReader;
|
|
||||||
import java.io.PrintStream;
|
import java.io.PrintStream;
|
||||||
import java.io.Reader;
|
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.LinkedList;
|
import java.util.LinkedList;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
import javax.transaction.xa.Xid;
|
|
||||||
|
|
||||||
import org.apache.activemq.artemis.api.core.ActiveMQBuffer;
|
import org.apache.activemq.artemis.api.core.ActiveMQBuffer;
|
||||||
import org.apache.activemq.artemis.api.core.ActiveMQBuffers;
|
import org.apache.activemq.artemis.api.core.ActiveMQBuffers;
|
||||||
import org.apache.activemq.artemis.api.core.Message;
|
import org.apache.activemq.artemis.api.core.Message;
|
||||||
@ -95,6 +68,29 @@ import org.w3c.dom.Element;
|
|||||||
import org.w3c.dom.Node;
|
import org.w3c.dom.Node;
|
||||||
import org.w3c.dom.NodeList;
|
import org.w3c.dom.NodeList;
|
||||||
|
|
||||||
|
import static org.apache.activemq.artemis.core.persistence.impl.journal.JournalRecordIds.ACKNOWLEDGE_CURSOR;
|
||||||
|
import static org.apache.activemq.artemis.core.persistence.impl.journal.JournalRecordIds.ACKNOWLEDGE_REF;
|
||||||
|
import static org.apache.activemq.artemis.core.persistence.impl.journal.JournalRecordIds.ADDRESS_BINDING_RECORD;
|
||||||
|
import static org.apache.activemq.artemis.core.persistence.impl.journal.JournalRecordIds.ADDRESS_SETTING_RECORD;
|
||||||
|
import static org.apache.activemq.artemis.core.persistence.impl.journal.JournalRecordIds.ADD_LARGE_MESSAGE;
|
||||||
|
import static org.apache.activemq.artemis.core.persistence.impl.journal.JournalRecordIds.ADD_LARGE_MESSAGE_PENDING;
|
||||||
|
import static org.apache.activemq.artemis.core.persistence.impl.journal.JournalRecordIds.ADD_MESSAGE;
|
||||||
|
import static org.apache.activemq.artemis.core.persistence.impl.journal.JournalRecordIds.ADD_MESSAGE_PROTOCOL;
|
||||||
|
import static org.apache.activemq.artemis.core.persistence.impl.journal.JournalRecordIds.ADD_REF;
|
||||||
|
import static org.apache.activemq.artemis.core.persistence.impl.journal.JournalRecordIds.DUPLICATE_ID;
|
||||||
|
import static org.apache.activemq.artemis.core.persistence.impl.journal.JournalRecordIds.HEURISTIC_COMPLETION;
|
||||||
|
import static org.apache.activemq.artemis.core.persistence.impl.journal.JournalRecordIds.ID_COUNTER_RECORD;
|
||||||
|
import static org.apache.activemq.artemis.core.persistence.impl.journal.JournalRecordIds.PAGE_CURSOR_COMPLETE;
|
||||||
|
import static org.apache.activemq.artemis.core.persistence.impl.journal.JournalRecordIds.PAGE_CURSOR_COUNTER_INC;
|
||||||
|
import static org.apache.activemq.artemis.core.persistence.impl.journal.JournalRecordIds.PAGE_CURSOR_COUNTER_VALUE;
|
||||||
|
import static org.apache.activemq.artemis.core.persistence.impl.journal.JournalRecordIds.PAGE_CURSOR_PENDING_COUNTER;
|
||||||
|
import static org.apache.activemq.artemis.core.persistence.impl.journal.JournalRecordIds.PAGE_TRANSACTION;
|
||||||
|
import static org.apache.activemq.artemis.core.persistence.impl.journal.JournalRecordIds.QUEUE_BINDING_RECORD;
|
||||||
|
import static org.apache.activemq.artemis.core.persistence.impl.journal.JournalRecordIds.QUEUE_STATUS_RECORD;
|
||||||
|
import static org.apache.activemq.artemis.core.persistence.impl.journal.JournalRecordIds.SECURITY_RECORD;
|
||||||
|
import static org.apache.activemq.artemis.core.persistence.impl.journal.JournalRecordIds.SET_SCHEDULED_DELIVERY_TIME;
|
||||||
|
import static org.apache.activemq.artemis.core.persistence.impl.journal.JournalRecordIds.UPDATE_DELIVERY_COUNT;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Outputs a String description of the Journals contents.
|
* Outputs a String description of the Journals contents.
|
||||||
* <p>
|
* <p>
|
||||||
@ -113,15 +109,10 @@ public final class DescribeJournal {
|
|||||||
if (instanceFolder != null) {
|
if (instanceFolder != null) {
|
||||||
configuration = new FileConfiguration();
|
configuration = new FileConfiguration();
|
||||||
File configFile = new File(instanceFolder + "/etc/broker.xml");
|
File configFile = new File(instanceFolder + "/etc/broker.xml");
|
||||||
URL url;
|
|
||||||
Reader reader = null;
|
|
||||||
|
|
||||||
try {
|
try {
|
||||||
url = configFile.toURI().toURL();
|
URL url = configFile.toURI().toURL();
|
||||||
reader = new InputStreamReader(url.openStream());
|
Element e = XMLUtil.urlToElement(url);
|
||||||
String xml = XMLUtil.readerToString(reader);
|
|
||||||
xml = XMLUtil.replaceSystemProps(xml);
|
|
||||||
Element e = XMLUtil.stringToElement(xml);
|
|
||||||
|
|
||||||
String root = ((FileConfiguration) configuration).getRootElement();
|
String root = ((FileConfiguration) configuration).getRootElement();
|
||||||
NodeList children = e.getElementsByTagName(root);
|
NodeList children = e.getElementsByTagName(root);
|
||||||
@ -132,14 +123,6 @@ public final class DescribeJournal {
|
|||||||
}
|
}
|
||||||
} catch (Exception e) {
|
} catch (Exception e) {
|
||||||
logger.error("failed to load broker.xml", e);
|
logger.error("failed to load broker.xml", e);
|
||||||
} finally {
|
|
||||||
if (reader != null) {
|
|
||||||
try {
|
|
||||||
reader.close();
|
|
||||||
} catch (IOException e) {
|
|
||||||
// ignore
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
configuration = new ConfigurationImpl();
|
configuration = new ConfigurationImpl();
|
||||||
|
@ -59,11 +59,31 @@ import org.apache.activemq.artemis.core.server.cluster.impl.MessageLoadBalancing
|
|||||||
import org.apache.activemq.artemis.core.server.impl.LegacyLDAPSecuritySettingPlugin;
|
import org.apache.activemq.artemis.core.server.impl.LegacyLDAPSecuritySettingPlugin;
|
||||||
import org.apache.activemq.artemis.core.server.plugin.ActiveMQServerPlugin;
|
import org.apache.activemq.artemis.core.server.plugin.ActiveMQServerPlugin;
|
||||||
import org.apache.activemq.artemis.core.settings.impl.SlowConsumerPolicy;
|
import org.apache.activemq.artemis.core.settings.impl.SlowConsumerPolicy;
|
||||||
|
import org.junit.AfterClass;
|
||||||
import org.junit.Assert;
|
import org.junit.Assert;
|
||||||
|
import org.junit.Before;
|
||||||
|
import org.junit.BeforeClass;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
public class FileConfigurationTest extends ConfigurationImplTest {
|
public class FileConfigurationTest extends ConfigurationImplTest {
|
||||||
|
|
||||||
|
@BeforeClass
|
||||||
|
public static void setupProperties() {
|
||||||
|
System.setProperty("a2Prop", "a2");
|
||||||
|
System.setProperty("falseProp", "false");
|
||||||
|
System.setProperty("trueProp", "true");
|
||||||
|
System.setProperty("ninetyTwoProp", "92");
|
||||||
|
}
|
||||||
|
|
||||||
|
@AfterClass
|
||||||
|
public static void clearProperties() {
|
||||||
|
System.clearProperty("a2Prop");
|
||||||
|
System.clearProperty("falseProp");
|
||||||
|
System.clearProperty("trueProp");
|
||||||
|
System.clearProperty("ninetyTwoProp");
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
protected String getConfigurationName() {
|
protected String getConfigurationName() {
|
||||||
return "ConfigurationTest-full-config.xml";
|
return "ConfigurationTest-full-config.xml";
|
||||||
}
|
}
|
||||||
|
@ -84,7 +84,7 @@
|
|||||||
tcp://0.0.0.0:61616?
|
tcp://0.0.0.0:61616?
|
||||||
tcpNoDelay=456;
|
tcpNoDelay=456;
|
||||||
connectionTtl=44;
|
connectionTtl=44;
|
||||||
connectionsAllowed=92
|
connectionsAllowed=${ninetyTwoProp}
|
||||||
</acceptor>
|
</acceptor>
|
||||||
<acceptor>vm://0?e1=z1;e2=567;connectionsAllowed=87</acceptor>
|
<acceptor>vm://0?e1=z1;e2=567;connectionsAllowed=87</acceptor>
|
||||||
</acceptors>
|
</acceptors>
|
||||||
@ -364,7 +364,7 @@
|
|||||||
<security-setting match="a1">
|
<security-setting match="a1">
|
||||||
<permission type="createNonDurableQueue" roles="a1.1"/>
|
<permission type="createNonDurableQueue" roles="a1.1"/>
|
||||||
</security-setting>
|
</security-setting>
|
||||||
<security-setting match="a2">
|
<security-setting match="${a2Prop}">
|
||||||
<permission type="deleteNonDurableQueue" roles="a2.1"/>
|
<permission type="deleteNonDurableQueue" roles="a2.1"/>
|
||||||
</security-setting>
|
</security-setting>
|
||||||
</security-settings>
|
</security-settings>
|
||||||
@ -438,11 +438,11 @@
|
|||||||
<address name="addr1">
|
<address name="addr1">
|
||||||
<anycast>
|
<anycast>
|
||||||
<queue name="q1">
|
<queue name="q1">
|
||||||
<durable>false</durable>
|
<durable>${falseProp}</durable>
|
||||||
<filter string="color='blue'"/>
|
<filter string="color='blue'"/>
|
||||||
</queue>
|
</queue>
|
||||||
<queue name="q2" max-consumers="-1" purge-on-no-consumers="false">
|
<queue name="q2" max-consumers="-1" purge-on-no-consumers="${falseProp}">
|
||||||
<durable>true</durable>
|
<durable>${trueProp}</durable>
|
||||||
<filter string="color='green'"/>
|
<filter string="color='green'"/>
|
||||||
</queue>
|
</queue>
|
||||||
</anycast>
|
</anycast>
|
||||||
@ -452,8 +452,8 @@
|
|||||||
<queue name="q3" max-consumers="10" >
|
<queue name="q3" max-consumers="10" >
|
||||||
<filter string="color='red'"/>
|
<filter string="color='red'"/>
|
||||||
</queue>
|
</queue>
|
||||||
<queue name="q4" purge-on-no-consumers="true">
|
<queue name="q4" purge-on-no-consumers="${trueProp}">
|
||||||
<durable>true</durable>
|
<durable>${trueProp}</durable>
|
||||||
</queue>
|
</queue>
|
||||||
</multicast>
|
</multicast>
|
||||||
</address>
|
</address>
|
||||||
|
@ -0,0 +1,20 @@
|
|||||||
|
<!--
|
||||||
|
Licensed to the Apache Software Foundation (ASF) under one or more
|
||||||
|
contributor license agreements. See the NOTICE file distributed with
|
||||||
|
this work for additional information regarding copyright ownership.
|
||||||
|
The ASF licenses this file to You under the Apache License, Version 2.0
|
||||||
|
(the "License"); you may not use this file except in compliance with
|
||||||
|
the License. You may obtain a copy of the License at
|
||||||
|
|
||||||
|
http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
|
||||||
|
Unless required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
See the License for the specific language governing permissions and
|
||||||
|
limitations under the License.
|
||||||
|
-->
|
||||||
|
<acceptors xmlns="urn:activemq:core">
|
||||||
|
<acceptor>tcp://0.0.0.0:61616?tcpNoDelay=456;connectionTtl=44;connectionsAllowed=${ninetyTwoProp}</acceptor>
|
||||||
|
<acceptor>vm://0?e1=z1;e2=567;connectionsAllowed=87</acceptor>
|
||||||
|
</acceptors>
|
@ -18,11 +18,11 @@
|
|||||||
<address name="addr1">
|
<address name="addr1">
|
||||||
<anycast>
|
<anycast>
|
||||||
<queue name="q1">
|
<queue name="q1">
|
||||||
<durable>false</durable>
|
<durable>${falseProp}</durable>
|
||||||
<filter string="color='blue'"/>
|
<filter string="color='blue'"/>
|
||||||
</queue>
|
</queue>
|
||||||
<queue name="q2" max-consumers="-1" purge-on-no-consumers="false">
|
<queue name="q2" max-consumers="-1" purge-on-no-consumers="${falseProp}">
|
||||||
<durable>true</durable>
|
<durable>${trueProp}</durable>
|
||||||
<filter string="color='green'"/>
|
<filter string="color='green'"/>
|
||||||
</queue>
|
</queue>
|
||||||
</anycast>
|
</anycast>
|
||||||
@ -32,8 +32,8 @@
|
|||||||
<queue name="q3" max-consumers="10" >
|
<queue name="q3" max-consumers="10" >
|
||||||
<filter string="color='red'"/>
|
<filter string="color='red'"/>
|
||||||
</queue>
|
</queue>
|
||||||
<queue name="q4" purge-on-no-consumers="true">
|
<queue name="q4" purge-on-no-consumers="${trueProp}">
|
||||||
<durable>true</durable>
|
<durable>${trueProp}</durable>
|
||||||
</queue>
|
</queue>
|
||||||
</multicast>
|
</multicast>
|
||||||
</address>
|
</address>
|
||||||
|
@ -18,7 +18,7 @@
|
|||||||
<security-setting match="a1">
|
<security-setting match="a1">
|
||||||
<permission type="createNonDurableQueue" roles="a1.1"/>
|
<permission type="createNonDurableQueue" roles="a1.1"/>
|
||||||
</security-setting>
|
</security-setting>
|
||||||
<security-setting match="a2">
|
<security-setting match="${a2Prop}">
|
||||||
<permission type="deleteNonDurableQueue" roles="a2.1"/>
|
<permission type="deleteNonDurableQueue" roles="a2.1"/>
|
||||||
</security-setting>
|
</security-setting>
|
||||||
</security-settings>
|
</security-settings>
|
@ -76,10 +76,9 @@
|
|||||||
<connector name="connector1">tcp://localhost1:5678?localAddress=mylocal;localPort=99</connector>
|
<connector name="connector1">tcp://localhost1:5678?localAddress=mylocal;localPort=99</connector>
|
||||||
<connector name="connector2">vm://5</connector>
|
<connector name="connector2">vm://5</connector>
|
||||||
</connectors>
|
</connectors>
|
||||||
<acceptors>
|
|
||||||
<acceptor>tcp://0.0.0.0:61616?tcpNoDelay=456;connectionTtl=44;connectionsAllowed=92</acceptor>
|
<xi:include href="./src/test/resources/ConfigurationTest-xinclude-config-acceptors.xml"/>
|
||||||
<acceptor>vm://0?e1=z1;e2=567;connectionsAllowed=87</acceptor>
|
|
||||||
</acceptors>
|
|
||||||
<broadcast-groups>
|
<broadcast-groups>
|
||||||
<broadcast-group name="bg1">
|
<broadcast-group name="bg1">
|
||||||
<local-bind-port>10999</local-bind-port>
|
<local-bind-port>10999</local-bind-port>
|
||||||
|
@ -26,6 +26,13 @@ import org.w3c.dom.Element;
|
|||||||
|
|
||||||
public class ConfigurationValidationTest extends ActiveMQTestBase {
|
public class ConfigurationValidationTest extends ActiveMQTestBase {
|
||||||
|
|
||||||
|
static {
|
||||||
|
System.setProperty("a2Prop", "a2");
|
||||||
|
System.setProperty("falseProp", "false");
|
||||||
|
System.setProperty("trueProp", "true");
|
||||||
|
System.setProperty("ninetyTwoProp", "92");
|
||||||
|
}
|
||||||
|
|
||||||
// Constants -----------------------------------------------------
|
// Constants -----------------------------------------------------
|
||||||
|
|
||||||
// Attributes ----------------------------------------------------
|
// Attributes ----------------------------------------------------
|
||||||
|
Loading…
x
Reference in New Issue
Block a user