You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by an...@apache.org on 2021/04/27 09:05:37 UTC
svn commit: r1889232 - in /jackrabbit/oak/trunk/oak-jcr/src:
main/java/org/apache/jackrabbit/oak/jcr/observation/ConsolidatedListenerMBeanImpl.java
test/java/org/apache/jackrabbit/oak/jcr/observation/ConsolidatedListenerMBeanTest.java
Author: angela
Date: Tue Apr 27 09:05:37 2021
New Revision: 1889232
URL: http://svn.apache.org/viewvc?rev=1889232&view=rev
Log:
OAK-9417 : ClassCastException in ConsolidatedListenerMBeanImpl (patch provided by Carsten Ziegeler)
Modified:
jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/observation/ConsolidatedListenerMBeanImpl.java
jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/observation/ConsolidatedListenerMBeanTest.java
Modified: jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/observation/ConsolidatedListenerMBeanImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/observation/ConsolidatedListenerMBeanImpl.java?rev=1889232&r1=1889231&r2=1889232&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/observation/ConsolidatedListenerMBeanImpl.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/main/java/org/apache/jackrabbit/oak/jcr/observation/ConsolidatedListenerMBeanImpl.java Tue Apr 27 09:05:37 2021
@@ -27,6 +27,7 @@ import java.util.List;
import java.util.Map;
import java.util.concurrent.atomic.AtomicInteger;
+import javax.management.MalformedObjectNameException;
import javax.management.ObjectName;
import javax.management.openmbean.CompositeData;
import javax.management.openmbean.CompositeDataSupport;
@@ -186,7 +187,7 @@ public class ConsolidatedListenerMBeanIm
List<BackgroundObserverMBean> observers = Lists.newArrayList();
for (Map.Entry<ObjectName, BackgroundObserverMBean> o : bgObservers.entrySet()){
- String listenerId = getListenerId(o.getKey());
+ String listenerId = getListenerId(o.getKey());
if (listenerId == null){
observers.add(o.getValue());
}
@@ -271,12 +272,12 @@ public class ConsolidatedListenerMBeanIm
@SuppressWarnings("unused")
protected void bindChangeProcessorMBean(ChangeProcessorMBean mbean, Map<String, ?> config){
- changeProcessors.put(getObjectName(config), mbean);
+ changeProcessors.put(getObjectName(config), mbean);
}
@SuppressWarnings("unused")
protected void unbindChangeProcessorMBean(ChangeProcessorMBean mbean, Map<String, ?> config){
- changeProcessors.remove(getObjectName(config));
+ changeProcessors.remove(getObjectName(config));
}
@SuppressWarnings("unused")
@@ -299,9 +300,19 @@ public class ConsolidatedListenerMBeanIm
filterConfigs.remove(getObjectName(config));
}
- private static ObjectName getObjectName(Map<String, ?> config){
- return checkNotNull((ObjectName) config.get("jmx.objectname"),
- "No 'jmx.objectname' property defined for MBean %s", config);
+ static ObjectName getObjectName(Map<String, ?> config) {
+ Object value = config.get("jmx.objectname");
+ ObjectName name = null;
+ if (value instanceof String) {
+ try {
+ name = new ObjectName((String) value);
+ } catch (MalformedObjectNameException e) {
+ // ignore name will be null in this case
+ }
+ } else if (value instanceof ObjectName) {
+ name = (ObjectName) value;
+ }
+ return checkNotNull(name, "No 'jmx.objectname' property defined for MBean %s", config);
}
private static String getListenerId(ObjectName name){
Modified: jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/observation/ConsolidatedListenerMBeanTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/observation/ConsolidatedListenerMBeanTest.java?rev=1889232&r1=1889231&r2=1889232&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/observation/ConsolidatedListenerMBeanTest.java (original)
+++ jackrabbit/oak/trunk/oak-jcr/src/test/java/org/apache/jackrabbit/oak/jcr/observation/ConsolidatedListenerMBeanTest.java Tue Apr 27 09:05:37 2021
@@ -18,8 +18,11 @@
*/
package org.apache.jackrabbit.oak.jcr.observation;
+import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertSame;
+import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.atomic.AtomicInteger;
@@ -50,6 +53,32 @@ public class ConsolidatedListenerMBeanTe
assertNotNull(data);
}
+ @Test(expected = NullPointerException.class)
+ public void testGetConfigNameNoValue() {
+ final Map<String, Object> properties = Collections.emptyMap();
+ ConsolidatedListenerMBeanImpl.getObjectName(properties);
+ }
+
+ @Test
+ public void testGetConfigNameObjectNameValue() throws MalformedObjectNameException {
+ final ObjectName name = new ObjectName("*:*");
+ final Map<String, Object> properties = Collections.singletonMap("jmx.objectname", name);
+ assertSame(name, ConsolidatedListenerMBeanImpl.getObjectName(properties));
+ }
+
+ @Test
+ public void testGetConfigNameStringValue() throws MalformedObjectNameException {
+ final String name = "*:*";
+ final Map<String, Object> properties = Collections.singletonMap("jmx.objectname", name);
+ assertEquals(new ObjectName(name), ConsolidatedListenerMBeanImpl.getObjectName(properties));
+ }
+
+ @Test(expected = NullPointerException.class)
+ public void testGetConfigNameInvalidValue() {
+ final Map<String, Object> properties = Collections.singletonMap("jmx.objectname", Boolean.TRUE);
+ ConsolidatedListenerMBeanImpl.getObjectName(properties);
+ }
+
private static class Listener implements EventListener {
private final AtomicInteger eventCount;