[572246] CDO interferes with Oomph setup

https://bugs.eclipse.org/bugs/show_bug.cgi?id=572246
diff --git a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/bundle/OM.java b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/bundle/OM.java
index 6330a7b..10f2e3e 100644
--- a/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/bundle/OM.java
+++ b/plugins/org.eclipse.emf.cdo.common/src/org/eclipse/emf/cdo/internal/common/bundle/OM.java
@@ -60,6 +60,8 @@
    */
   public static final class Activator extends OSGiActivator
   {
+    private static final boolean disableURIHandlerRegistry = OMPlatform.INSTANCE.isProperty("org.eclipse.emf.cdo.common.disableURIHandlerRegistry");
+
     public Activator()
     {
       super(BUNDLE);
@@ -70,18 +72,20 @@
     {
       super.doStart();
 
-      try
+      if (!disableURIHandlerRegistry)
       {
-        List<URIHandler> defaultHandlers = new ArrayList<>();
-        defaultHandlers.add(URIHandlerRegistryImpl.INSTANCE);
-        defaultHandlers.addAll(URIHandler.DEFAULT_HANDLERS);
+        try
+        {
+          List<URIHandler> defaultHandlers = new ArrayList<>(URIHandler.DEFAULT_HANDLERS);
+          defaultHandlers.add(4, URIHandlerRegistryImpl.INSTANCE); // Add our registry before EMF's catch-all handler.
 
-        Field field = ReflectUtil.getField(URIHandler.class, "DEFAULT_HANDLERS");
-        ReflectUtil.setValue(field, null, Collections.unmodifiableList(defaultHandlers), true);
-      }
-      catch (Throwable t)
-      {
-        LOG.error(t);
+          Field field = ReflectUtil.getField(URIHandler.class, "DEFAULT_HANDLERS");
+          ReflectUtil.setValue(field, null, Collections.unmodifiableList(defaultHandlers), true);
+        }
+        catch (Throwable t)
+        {
+          LOG.error(t);
+        }
       }
     }
   }