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;
+ }
+ }
+
}