Repository: activemq Updated Branches: refs/heads/master 54b2e21f4 -> b488df694
AMQ-7037 - allow sslContext attribute of networkConnector to be added via runtime config plugin jaxb processor Project: http://git-wip-us.apache.org/repos/asf/activemq/repo Commit: http://git-wip-us.apache.org/repos/asf/activemq/commit/b488df69 Tree: http://git-wip-us.apache.org/repos/asf/activemq/tree/b488df69 Diff: http://git-wip-us.apache.org/repos/asf/activemq/diff/b488df69 Branch: refs/heads/master Commit: b488df694c5226b600fb4a547cfcb904d56d7046 Parents: 54b2e21 Author: gtully <[email protected]> Authored: Wed Aug 22 12:20:21 2018 +0100 Committer: gtully <[email protected]> Committed: Wed Aug 22 12:20:21 2018 +0100 ---------------------------------------------------------------------- .../plugin/DefaultConfigurationProcessor.java | 19 ++++++++++++++++- .../org/apache/activemq/plugin/JAXBUtils.java | 22 +++++++++++++++----- .../src/main/resources/binding.xjb | 4 ++++ .../apache/activemq/NetworkConnectorTest.java | 2 ++ .../networkConnectorTest-mod-one-nc.xml | 7 ++++++- 5 files changed, 47 insertions(+), 7 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/activemq/blob/b488df69/activemq-runtime-config/src/main/java/org/apache/activemq/plugin/DefaultConfigurationProcessor.java ---------------------------------------------------------------------- diff --git a/activemq-runtime-config/src/main/java/org/apache/activemq/plugin/DefaultConfigurationProcessor.java b/activemq-runtime-config/src/main/java/org/apache/activemq/plugin/DefaultConfigurationProcessor.java index 1e539ed..26662c8 100644 --- a/activemq-runtime-config/src/main/java/org/apache/activemq/plugin/DefaultConfigurationProcessor.java +++ b/activemq-runtime-config/src/main/java/org/apache/activemq/plugin/DefaultConfigurationProcessor.java @@ -20,6 +20,7 @@ import org.apache.activemq.util.IntrospectionSupport; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import javax.annotation.PostConstruct; import javax.xml.bind.JAXBElement; import java.lang.reflect.Method; import java.util.ArrayList; @@ -204,12 +205,28 @@ public class DefaultConfigurationProcessor implements ConfigurationProcessor { try { setter.invoke(instance, JAXBUtils.matchType(argument, setter.getParameterTypes()[0])); } catch (Exception e) { - plugin.info("failed to invoke " + setter + " on " + instance, e); + plugin.info("failed to invoke " + setter + " on " + instance + " with args " + argument, e); } } else { plugin.info("failed to find setter for " + elementName + " on :" + instance); } } + invokePostConstruct(instance); return instance; } + + private <T> void invokePostConstruct(T instance) { + try { + for (Method m : instance.getClass().getDeclaredMethods()) { + if (m.isAnnotationPresent(PostConstruct.class) && m.getParameterCount() == 0) { + try { + JAXBUtils.ensureAccessible(m); + m.invoke(instance, null); + } catch (Exception e) { + plugin.info("failed to invoke @PostConstruct method " + m + " on " + instance, e); + } + } + } + } catch (Exception ignored) {} + } } http://git-wip-us.apache.org/repos/asf/activemq/blob/b488df69/activemq-runtime-config/src/main/java/org/apache/activemq/plugin/JAXBUtils.java ---------------------------------------------------------------------- diff --git a/activemq-runtime-config/src/main/java/org/apache/activemq/plugin/JAXBUtils.java b/activemq-runtime-config/src/main/java/org/apache/activemq/plugin/JAXBUtils.java index 9139b79..3230b6d 100644 --- a/activemq-runtime-config/src/main/java/org/apache/activemq/plugin/JAXBUtils.java +++ b/activemq-runtime-config/src/main/java/org/apache/activemq/plugin/JAXBUtils.java @@ -16,22 +16,24 @@ */ package org.apache.activemq.plugin; -import javax.xml.bind.JAXBElement; import java.lang.reflect.Method; +import java.lang.reflect.Modifier; +import java.util.Collection; import java.util.HashSet; -import java.util.LinkedList; import java.util.List; import java.util.Set; import org.apache.activemq.broker.region.virtual.FilteredDestination; import org.apache.activemq.command.ActiveMQQueue; import org.apache.activemq.command.ActiveMQTopic; +import org.apache.activemq.schema.core.DtoAuthenticationUser; import org.apache.activemq.schema.core.DtoFilteredDestination; -import org.apache.activemq.schema.core.DtoTopic; import org.apache.activemq.schema.core.DtoQueue; -import org.apache.activemq.schema.core.DtoAuthenticationUser; +import org.apache.activemq.schema.core.DtoSslContext; +import org.apache.activemq.schema.core.DtoTopic; import org.apache.activemq.security.AuthenticationUser; +import org.apache.activemq.spring.SpringSslContext; public class JAXBUtils { @@ -45,6 +47,12 @@ public class JAXBUtils { return null; } + public static void ensureAccessible(Method m) { + if ((!Modifier.isPublic(m.getModifiers()) || !Modifier.isPublic(m.getDeclaringClass().getModifiers())) && !m.isAccessible()) { + m.setAccessible(true); + } + } + public static Object inferTargetObject(Object elementContent) { if (DtoTopic.class.isAssignableFrom(elementContent.getClass())) { return new ActiveMQTopic(); @@ -53,7 +61,9 @@ public class JAXBUtils { } else if (DtoAuthenticationUser.class.isAssignableFrom(elementContent.getClass())) { return new AuthenticationUser(); } else if (DtoFilteredDestination.class.isAssignableFrom(elementContent.getClass())) { - return new FilteredDestination(); + return new FilteredDestination(); + } else if (DtoSslContext.class.isAssignableFrom(elementContent.getClass())) { + return new SpringSslContext(); } else { return new Object(); } @@ -63,6 +73,8 @@ public class JAXBUtils { Object result = parameterValues; if (Set.class.isAssignableFrom(aClass)) { result = new HashSet(parameterValues); + } else if (!Collection.class.isAssignableFrom(aClass)) { + result = parameterValues.get(0); } return result; } http://git-wip-us.apache.org/repos/asf/activemq/blob/b488df69/activemq-runtime-config/src/main/resources/binding.xjb ---------------------------------------------------------------------- diff --git a/activemq-runtime-config/src/main/resources/binding.xjb b/activemq-runtime-config/src/main/resources/binding.xjb index 0e728c2..2fd7739 100644 --- a/activemq-runtime-config/src/main/resources/binding.xjb +++ b/activemq-runtime-config/src/main/resources/binding.xjb @@ -68,6 +68,10 @@ <jxb:property name="Contents" /> </jxb:bindings> + <jxb:bindings node="xs:element[@name='networkConnector']/xs:complexType/xs:choice/xs:choice/xs:element[@name='sslContext']/xs:complexType/xs:choice"> + <jxb:property name="Contents" /> + </jxb:bindings> + <jxb:bindings node="xs:element[@name='broker']/xs:complexType/xs:choice/xs:choice/xs:element[@name='destinationInterceptors']/xs:complexType/xs:choice"> <jxb:property name="Contents" /> </jxb:bindings> http://git-wip-us.apache.org/repos/asf/activemq/blob/b488df69/activemq-runtime-config/src/test/java/org/apache/activemq/NetworkConnectorTest.java ---------------------------------------------------------------------- diff --git a/activemq-runtime-config/src/test/java/org/apache/activemq/NetworkConnectorTest.java b/activemq-runtime-config/src/test/java/org/apache/activemq/NetworkConnectorTest.java index 400fbde..822d5cf 100644 --- a/activemq-runtime-config/src/test/java/org/apache/activemq/NetworkConnectorTest.java +++ b/activemq-runtime-config/src/test/java/org/apache/activemq/NetworkConnectorTest.java @@ -89,6 +89,8 @@ public class NetworkConnectorTest extends RuntimeConfigTestSupport { NetworkConnector modNetworkConnector = brokerService.getNetworkConnectors().get(0); assertEquals("got ttl update", 2, modNetworkConnector.getNetworkTTL()); + assertNotNull("got ssl", modNetworkConnector.getSslContext()); + // apply again - ensure no change applyNewConfig(brokerConfig, configurationSeed + "-mod-one-nc", SLEEP); assertEquals("no new network connectors", 1, brokerService.getNetworkConnectors().size()); http://git-wip-us.apache.org/repos/asf/activemq/blob/b488df69/activemq-runtime-config/src/test/resources/org/apache/activemq/networkConnectorTest-mod-one-nc.xml ---------------------------------------------------------------------- diff --git a/activemq-runtime-config/src/test/resources/org/apache/activemq/networkConnectorTest-mod-one-nc.xml b/activemq-runtime-config/src/test/resources/org/apache/activemq/networkConnectorTest-mod-one-nc.xml index e72dfc2..095293e 100644 --- a/activemq-runtime-config/src/test/resources/org/apache/activemq/networkConnectorTest-mod-one-nc.xml +++ b/activemq-runtime-config/src/test/resources/org/apache/activemq/networkConnectorTest-mod-one-nc.xml @@ -27,7 +27,12 @@ </plugins> <networkConnectors> - <networkConnector uri="static:(tcp://localhost:5555)" networkTTL="2" name="one" /> + <networkConnector uri="static:(tcp://localhost:5555)" networkTTL="2" name="one"> + <sslContext> + <sslContext keyStorePassword="PPAA" trustStorePassword="PPBB" /> + </sslContext> + </networkConnector> + </networkConnectors> </broker> </beans>
