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.ferr...@gmail.com> Authored: Wed Jul 27 19:08:10 2016 +0200 Committer: Claus Ibsen <davscl...@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; + } + } + }