You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2016/07/28 07:12:00 UTC

[8/9] camel git commit: Changed Osgi Resolvers

Changed Osgi Resolvers


Project: http://git-wip-us.apache.org/repos/asf/camel/repo
Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/8caf3c08
Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/8caf3c08
Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/8caf3c08

Branch: refs/heads/master
Commit: 8caf3c08025c47a5c3ffd31559589a9d0a9cc36d
Parents: 8ec0cd1
Author: Nicola Ferraro <ni...@gmail.com>
Authored: Wed Jul 27 19:08:10 2016 +0200
Committer: Claus Ibsen <da...@apache.org>
Committed: Thu Jul 28 08:41:34 2016 +0200

----------------------------------------------------------------------
 .../camel/core/osgi/OsgiComponentResolver.java  | 28 ++-----
 .../camel/core/osgi/OsgiDataFormatResolver.java | 18 ++--
 .../camel/core/osgi/OsgiLanguageResolver.java   | 20 ++---
 .../core/osgi/OsgiComponentResolverTest.java    | 83 ++++++++++++++++++-
 .../core/osgi/OsgiDataFormatResolverTest.java   | 87 ++++++++++++++++++++
 .../core/osgi/OsgiLanguageResolverTest.java     | 58 +++++++++++++
 6 files changed, 242 insertions(+), 52 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/camel/blob/8caf3c08/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiComponentResolver.java
----------------------------------------------------------------------
diff --git a/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiComponentResolver.java b/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiComponentResolver.java
index 3eb0d9c..d47af2d 100644
--- a/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiComponentResolver.java
+++ b/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiComponentResolver.java
@@ -19,8 +19,8 @@ package org.apache.camel.core.osgi;
 import org.apache.camel.CamelContext;
 import org.apache.camel.Component;
 import org.apache.camel.spi.ComponentResolver;
-import org.apache.camel.util.CamelContextHelper;
 import org.apache.camel.util.ObjectHelper;
+import org.apache.camel.util.ResolverHelper;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.InvalidSyntaxException;
 import org.osgi.framework.ServiceReference;
@@ -35,29 +35,11 @@ public class OsgiComponentResolver implements ComponentResolver {
     public OsgiComponentResolver(BundleContext bundleContext) {
         this.bundleContext = bundleContext;
     }
-    
-    public Component resolveComponent(String name, CamelContext context) throws Exception {
-        Object bean = null;
-        try {
-            bean = context.getRegistry().lookupByName(name);
-            if (bean != null) {
-                LOG.debug("Found component: {} in registry: {}", name, bean);
-            }
-        } catch (Exception e) {
-            LOG.debug("Ignored error looking up bean: " + name + ". Error: " + e);
-        }
 
-        if (bean != null) {
-            if (bean instanceof Component) {
-                return (Component)bean;
-            } else {
-                // lets use Camel's type conversion mechanism to convert things like CamelContext
-                // and other types into a valid Component
-                Component component = CamelContextHelper.convertTo(context, Component.class, bean);
-                if (component != null) {
-                    return component;
-                }
-            }
+    public Component resolveComponent(String name, CamelContext context) throws Exception {
+        Component componentReg = ResolverHelper.lookupComponentInRegistryWithFallback(context, name);
+        if (componentReg != null) {
+            return componentReg;
         }
 
         // Check in OSGi bundles

http://git-wip-us.apache.org/repos/asf/camel/blob/8caf3c08/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiDataFormatResolver.java
----------------------------------------------------------------------
diff --git a/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiDataFormatResolver.java b/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiDataFormatResolver.java
index 13fc809..c403632 100644
--- a/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiDataFormatResolver.java
+++ b/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiDataFormatResolver.java
@@ -20,6 +20,7 @@ import org.apache.camel.CamelContext;
 import org.apache.camel.spi.DataFormat;
 import org.apache.camel.spi.DataFormatResolver;
 import org.apache.camel.util.ObjectHelper;
+import org.apache.camel.util.ResolverHelper;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.InvalidSyntaxException;
 import org.osgi.framework.ServiceReference;
@@ -37,20 +38,11 @@ public class OsgiDataFormatResolver implements DataFormatResolver {
 
     public DataFormat resolveDataFormat(String name, CamelContext context) {
         // lookup in registry first
-        Object bean = null;
-        try {
-            bean = context.getRegistry().lookupByName(name);
-            if (bean != null) {
-                LOG.debug("Found language: {} in registry: {}", name, bean);
-            }
-        } catch (Exception e) {
-            if (LOG.isDebugEnabled()) {
-                LOG.debug("Ignored error looking up bean: " + name + ". Error: " + e);
-            }
-        }
-        if (bean instanceof DataFormat) {
-            return (DataFormat) bean;
+        DataFormat dataFormatReg = ResolverHelper.lookupDataFormatInRegistryWithFallback(context, name);
+        if (dataFormatReg != null) {
+            return dataFormatReg;
         }
+
         return getDataFormat(name, context);
     }
 

http://git-wip-us.apache.org/repos/asf/camel/blob/8caf3c08/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiLanguageResolver.java
----------------------------------------------------------------------
diff --git a/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiLanguageResolver.java b/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiLanguageResolver.java
index 77a6f13..8ae1eaf 100644
--- a/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiLanguageResolver.java
+++ b/components/camel-core-osgi/src/main/java/org/apache/camel/core/osgi/OsgiLanguageResolver.java
@@ -21,6 +21,7 @@ import org.apache.camel.NoSuchLanguageException;
 import org.apache.camel.spi.Language;
 import org.apache.camel.spi.LanguageResolver;
 import org.apache.camel.util.ObjectHelper;
+import org.apache.camel.util.ResolverHelper;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.InvalidSyntaxException;
 import org.osgi.framework.ServiceReference;
@@ -38,21 +39,12 @@ public class OsgiLanguageResolver implements LanguageResolver {
 
     public Language resolveLanguage(String name, CamelContext context) {
         // lookup in registry first
-        Object bean = null;
-        try {
-            bean = context.getRegistry().lookupByName(name);
-            if (bean != null) {
-                LOG.debug("Found language: {} in registry: {}", name, bean);
-            }
-        } catch (Exception e) {
-            if (LOG.isDebugEnabled()) {
-                LOG.debug("Ignored error looking up bean: " + name + ". Error: " + e);
-            }
-        }
-        if (bean instanceof Language) {
-            return (Language)bean;
+        Language lang = ResolverHelper.lookupLanguageInRegistryWithFallback(context, name);
+        if (lang != null) {
+            return lang;
         }
-        Language lang = getLanguage(name, context);
+
+        lang = getLanguage(name, context);
         if (lang != null) {
             return lang;
         }

http://git-wip-us.apache.org/repos/asf/camel/blob/8caf3c08/components/camel-core-osgi/src/test/java/org/apache/camel/core/osgi/OsgiComponentResolverTest.java
----------------------------------------------------------------------
diff --git a/components/camel-core-osgi/src/test/java/org/apache/camel/core/osgi/OsgiComponentResolverTest.java b/components/camel-core-osgi/src/test/java/org/apache/camel/core/osgi/OsgiComponentResolverTest.java
index a00b2a1..c9a4d14 100644
--- a/components/camel-core-osgi/src/test/java/org/apache/camel/core/osgi/OsgiComponentResolverTest.java
+++ b/components/camel-core-osgi/src/test/java/org/apache/camel/core/osgi/OsgiComponentResolverTest.java
@@ -18,14 +18,18 @@ package org.apache.camel.core.osgi;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.Component;
+import org.apache.camel.ComponentConfiguration;
+import org.apache.camel.Endpoint;
+import org.apache.camel.EndpointConfiguration;
 import org.apache.camel.component.file.FileComponent;
 import org.apache.camel.impl.DefaultCamelContext;
+import org.apache.camel.impl.SimpleRegistry;
 import org.junit.Test;
 
 public class OsgiComponentResolverTest extends CamelOsgiTestSupport {
-    
+
     @Test
-    public void testOsgiResolverFindLanguageTest() throws Exception {
+    public void testOsgiResolverFindComponentTest() throws Exception {
         CamelContext camelContext = new DefaultCamelContext();
         OsgiComponentResolver resolver = new OsgiComponentResolver(getBundleContext());
         Component component = resolver.resolveComponent("file_test", camelContext);
@@ -33,4 +37,79 @@ public class OsgiComponentResolverTest extends CamelOsgiTestSupport {
         assertTrue("We should get the file component here", component instanceof FileComponent);
     }
 
+    @Test
+    public void testOsgiResolverFindComponentFallbackTest() throws Exception {
+        SimpleRegistry registry = new SimpleRegistry();
+        registry.put("allstar-component", new SampleComponent(true));
+
+        CamelContext camelContext = new DefaultCamelContext(registry);
+
+        OsgiComponentResolver resolver = new OsgiComponentResolver(getBundleContext());
+        Component component = resolver.resolveComponent("allstar", camelContext);
+        assertNotNull("We should find the super component", component);
+        assertTrue("We should get the super component here", component instanceof SampleComponent);
+    }
+
+    @Test
+    public void testOsgiResolverFindLanguageDoubleFallbackTest() throws Exception {
+        SimpleRegistry registry = new SimpleRegistry();
+        registry.put("allstar", new SampleComponent(false));
+        registry.put("allstar-component", new SampleComponent(true));
+
+        CamelContext camelContext = new DefaultCamelContext(registry);
+
+        OsgiComponentResolver resolver = new OsgiComponentResolver(getBundleContext());
+        Component component = resolver.resolveComponent("allstar", camelContext);
+        assertNotNull("We should find the super component", component);
+        assertTrue("We should get the super component here", component instanceof SampleComponent);
+        assertFalse("We should NOT find the fallback component", ((SampleComponent) component).isFallback());
+    }
+
+    private static class SampleComponent implements Component {
+
+        private boolean fallback;
+
+        public SampleComponent(boolean fallback) {
+            this.fallback = fallback;
+        }
+
+        @Override
+        public void setCamelContext(CamelContext camelContext) {
+            throw new UnsupportedOperationException("Should not be called");
+        }
+
+        @Override
+        public CamelContext getCamelContext() {
+            throw new UnsupportedOperationException("Should not be called");
+        }
+
+        @Override
+        public Endpoint createEndpoint(String uri) throws Exception {
+            throw new UnsupportedOperationException("Should not be called");
+        }
+
+        @Override
+        public boolean useRawUri() {
+            throw new UnsupportedOperationException("Should not be called");
+        }
+
+        @Override
+        public EndpointConfiguration createConfiguration(String uri) throws Exception {
+            throw new UnsupportedOperationException("Should not be called");
+        }
+
+        @Override
+        public ComponentConfiguration createComponentConfiguration() {
+            throw new UnsupportedOperationException("Should not be called");
+        }
+
+        public boolean isFallback() {
+            return fallback;
+        }
+
+        public void setFallback(boolean fallback) {
+            this.fallback = fallback;
+        }
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/camel/blob/8caf3c08/components/camel-core-osgi/src/test/java/org/apache/camel/core/osgi/OsgiDataFormatResolverTest.java
----------------------------------------------------------------------
diff --git a/components/camel-core-osgi/src/test/java/org/apache/camel/core/osgi/OsgiDataFormatResolverTest.java b/components/camel-core-osgi/src/test/java/org/apache/camel/core/osgi/OsgiDataFormatResolverTest.java
new file mode 100644
index 0000000..3803a7f
--- /dev/null
+++ b/components/camel-core-osgi/src/test/java/org/apache/camel/core/osgi/OsgiDataFormatResolverTest.java
@@ -0,0 +1,87 @@
+/**
+ * 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.
+ */
+package org.apache.camel.core.osgi;
+
+import java.io.InputStream;
+import java.io.OutputStream;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.Exchange;
+import org.apache.camel.impl.DefaultCamelContext;
+import org.apache.camel.impl.SimpleRegistry;
+import org.apache.camel.spi.DataFormat;
+import org.junit.Test;
+
+public class OsgiDataFormatResolverTest extends CamelOsgiTestSupport {
+
+
+    @Test
+    public void testOsgiResolverFindDataFormatFallbackTest() throws Exception {
+        SimpleRegistry registry = new SimpleRegistry();
+        registry.put("allstar-dataformat", new SampleDataFormat(true));
+
+        CamelContext camelContext = new DefaultCamelContext(registry);
+
+        OsgiDataFormatResolver resolver = new OsgiDataFormatResolver(getBundleContext());
+        DataFormat dataformat = resolver.resolveDataFormat("allstar", camelContext);
+        assertNotNull("We should find the super dataformat", dataformat);
+        assertTrue("We should get the super dataformat here", dataformat instanceof SampleDataFormat);
+    }
+
+    @Test
+    public void testOsgiResolverFindLanguageDoubleFallbackTest() throws Exception {
+        SimpleRegistry registry = new SimpleRegistry();
+        registry.put("allstar", new SampleDataFormat(false));
+        registry.put("allstar-dataformat", new SampleDataFormat(true));
+
+        CamelContext camelContext = new DefaultCamelContext(registry);
+
+        OsgiDataFormatResolver resolver = new OsgiDataFormatResolver(getBundleContext());
+        DataFormat dataformat = resolver.resolveDataFormat("allstar", camelContext);
+        assertNotNull("We should find the super dataformat", dataformat);
+        assertTrue("We should get the super dataformat here", dataformat instanceof SampleDataFormat);
+        assertFalse("We should NOT find the fallback dataformat", ((SampleDataFormat) dataformat).isFallback());
+    }
+
+    private static class SampleDataFormat implements DataFormat {
+
+        private boolean fallback;
+
+        public SampleDataFormat(boolean fallback) {
+            this.fallback = fallback;
+        }
+
+        @Override
+        public void marshal(Exchange exchange, Object graph, OutputStream stream) throws Exception {
+            throw new UnsupportedOperationException("Should not be called");
+        }
+
+        @Override
+        public Object unmarshal(Exchange exchange, InputStream stream) throws Exception {
+            throw new UnsupportedOperationException("Should not be called");
+        }
+
+        public boolean isFallback() {
+            return fallback;
+        }
+
+        public void setFallback(boolean fallback) {
+            this.fallback = fallback;
+        }
+    }
+
+}

http://git-wip-us.apache.org/repos/asf/camel/blob/8caf3c08/components/camel-core-osgi/src/test/java/org/apache/camel/core/osgi/OsgiLanguageResolverTest.java
----------------------------------------------------------------------
diff --git a/components/camel-core-osgi/src/test/java/org/apache/camel/core/osgi/OsgiLanguageResolverTest.java b/components/camel-core-osgi/src/test/java/org/apache/camel/core/osgi/OsgiLanguageResolverTest.java
index e2a25aa..09fa281 100644
--- a/components/camel-core-osgi/src/test/java/org/apache/camel/core/osgi/OsgiLanguageResolverTest.java
+++ b/components/camel-core-osgi/src/test/java/org/apache/camel/core/osgi/OsgiLanguageResolverTest.java
@@ -19,7 +19,10 @@ package org.apache.camel.core.osgi;
 import java.io.IOException;
 
 import org.apache.camel.CamelContext;
+import org.apache.camel.Expression;
+import org.apache.camel.Predicate;
 import org.apache.camel.impl.DefaultCamelContext;
+import org.apache.camel.impl.SimpleRegistry;
 import org.apache.camel.spi.Language;
 import org.junit.Test;
 
@@ -32,4 +35,59 @@ public class OsgiLanguageResolverTest extends CamelOsgiTestSupport {
         Language language = resolver.resolveLanguage("simple", camelContext);
         assertNotNull("We should find simple language", language);
     }
+
+    @Test
+    public void testOsgiResolverFindLanguageFallbackTest() throws IOException {
+        SimpleRegistry registry = new SimpleRegistry();
+        registry.put("fuffy-language", new SampleLanguage(true));
+
+        CamelContext camelContext = new DefaultCamelContext(registry);
+
+        OsgiLanguageResolver resolver = new OsgiLanguageResolver(getBundleContext());
+        Language language = resolver.resolveLanguage("fuffy", camelContext);
+        assertNotNull("We should find fuffy language", language);
+        assertTrue("We should find the fallback language", ((SampleLanguage) language).isFallback());
+    }
+
+    @Test
+    public void testOsgiResolverFindLanguageDoubleFallbackTest() throws IOException {
+        SimpleRegistry registry = new SimpleRegistry();
+        registry.put("fuffy", new SampleLanguage(false));
+        registry.put("fuffy-language", new SampleLanguage(true));
+
+        CamelContext camelContext = new DefaultCamelContext(registry);
+
+        OsgiLanguageResolver resolver = new OsgiLanguageResolver(getBundleContext());
+        Language language = resolver.resolveLanguage("fuffy", camelContext);
+        assertNotNull("We should find fuffy language", language);
+        assertFalse("We should NOT find the fallback language", ((SampleLanguage) language).isFallback());
+    }
+
+    private static class SampleLanguage implements Language {
+
+        private boolean fallback;
+
+        public SampleLanguage(boolean fallback) {
+            this.fallback = fallback;
+        }
+
+        @Override
+        public Predicate createPredicate(String expression) {
+            throw new UnsupportedOperationException("Should not be called");
+        }
+
+        @Override
+        public Expression createExpression(String expression) {
+            throw new UnsupportedOperationException("Should not be called");
+        }
+
+        public boolean isFallback() {
+            return fallback;
+        }
+
+        public void setFallback(boolean fallback) {
+            this.fallback = fallback;
+        }
+    }
+
 }