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 2021/12/14 06:27:13 UTC
[camel] branch main updated: CAMEL-17310: Reload routes should match resources that are the same when loaded via classpath or file scheme. Added getScheme to Resource API. mvn camel:dev now works.
This is an automated email from the ASF dual-hosted git repository.
davsclaus pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel.git
The following commit(s) were added to refs/heads/main by this push:
new f477092 CAMEL-17310: Reload routes should match resources that are the same when loaded via classpath or file scheme. Added getScheme to Resource API. mvn camel:dev now works.
f477092 is described below
commit f4770921a344f26dacdccebd41577b222e62fc13
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Tue Dec 14 07:10:13 2021 +0100
CAMEL-17310: Reload routes should match resources that are the same when loaded via classpath or file scheme. Added getScheme to Resource API. mvn camel:dev now works.
---
.../camel/language/bean/BeanResourceResolver.java | 12 ++++------
.../org/apache/camel/github/GitHubResource.java | 2 +-
.../main/java/org/apache/camel/spi/Resource.java | 5 +++++
.../impl/engine/DefaultResourceResolvers.java | 18 +++++++--------
.../apache/camel/urlhandler/custom/Handler.java | 8 ++-----
.../org/apache/camel/urlhandler/pd/Handler.java | 8 ++-----
.../support/FileWatcherResourceReloadStrategy.java | 4 ++++
.../org/apache/camel/support/ResourceHelper.java | 7 +-----
.../org/apache/camel/support/ResourceSupport.java | 13 +++++++----
.../camel/support/RouteWatcherReloadStrategy.java | 26 +++++++++++++++++++++-
.../ROOT/pages/camel-3x-upgrade-guide-3_15.adoc | 11 +++++++++
.../modules/ROOT/pages/camel-3x-upgrade-guide.adoc | 1 +
.../camel/dsl/yaml/support/YamlTestSupport.groovy | 6 +++++
.../main/java/org/apache/camel/maven/DevMojo.java | 5 +++++
14 files changed, 84 insertions(+), 42 deletions(-)
diff --git a/components/camel-bean/src/main/java/org/apache/camel/language/bean/BeanResourceResolver.java b/components/camel-bean/src/main/java/org/apache/camel/language/bean/BeanResourceResolver.java
index cb72f23..216c9ae 100644
--- a/components/camel-bean/src/main/java/org/apache/camel/language/bean/BeanResourceResolver.java
+++ b/components/camel-bean/src/main/java/org/apache/camel/language/bean/BeanResourceResolver.java
@@ -26,13 +26,14 @@ import org.apache.camel.spi.Resource;
import org.apache.camel.spi.annotations.ResourceResolver;
import org.apache.camel.support.DefaultExchange;
import org.apache.camel.support.ResourceResolverSupport;
+import org.apache.camel.support.ResourceSupport;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@ResourceResolver(BeanResourceResolver.SCHEME)
public class BeanResourceResolver extends ResourceResolverSupport {
public static final String SCHEME = "bean";
- private static final Logger LOGGER = LoggerFactory.getLogger(BeanResourceResolver.class);
+ private static final Logger LOG = LoggerFactory.getLogger(BeanResourceResolver.class);
public BeanResourceResolver() {
super(SCHEME);
@@ -40,14 +41,9 @@ public class BeanResourceResolver extends ResourceResolverSupport {
@Override
public Resource createResource(String location, String remaining) {
- LOGGER.trace("Creating resource from expression {}", remaining);
-
- return new Resource() {
- @Override
- public String getLocation() {
- return location;
- }
+ LOG.trace("Creating resource from calling bean: {}", remaining);
+ return new ResourceSupport(SCHEME, location) {
@Override
public boolean exists() {
return false;
diff --git a/components/camel-resourceresolver-github/src/main/java/org/apache/camel/github/GitHubResource.java b/components/camel-resourceresolver-github/src/main/java/org/apache/camel/github/GitHubResource.java
index 25b44ba..2b76e71 100644
--- a/components/camel-resourceresolver-github/src/main/java/org/apache/camel/github/GitHubResource.java
+++ b/components/camel-resourceresolver-github/src/main/java/org/apache/camel/github/GitHubResource.java
@@ -31,7 +31,7 @@ public final class GitHubResource extends ResourceSupport {
private boolean init;
public GitHubResource(CamelContext camelContext, String location) {
- super(location);
+ super("github", location);
this.camelContext = camelContext;
}
diff --git a/core/camel-api/src/main/java/org/apache/camel/spi/Resource.java b/core/camel-api/src/main/java/org/apache/camel/spi/Resource.java
index feac689..b5c04bb 100644
--- a/core/camel-api/src/main/java/org/apache/camel/spi/Resource.java
+++ b/core/camel-api/src/main/java/org/apache/camel/spi/Resource.java
@@ -32,6 +32,11 @@ import java.nio.charset.StandardCharsets;
public interface Resource {
/**
+ * The scheme of the resource such as file, classpath, http
+ */
+ String getScheme();
+
+ /**
* The location of the resource.
*/
String getLocation();
diff --git a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultResourceResolvers.java b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultResourceResolvers.java
index 7d451a9..21ec8fe 100644
--- a/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultResourceResolvers.java
+++ b/core/camel-base-engine/src/main/java/org/apache/camel/impl/engine/DefaultResourceResolvers.java
@@ -59,7 +59,7 @@ public final class DefaultResourceResolvers {
public Resource createResource(String location, String remaining) {
final File path = new File(tryDecodeUri(remaining));
- return new ResourceSupport(location) {
+ return new ResourceSupport(SCHEME, location) {
@Override
public boolean exists() {
return path.exists();
@@ -110,7 +110,7 @@ public final class DefaultResourceResolvers {
@Override
public Resource createResource(String location, String remaining) {
- return new ResourceSupport(location) {
+ return new ResourceSupport(SCHEME, location) {
@Override
public boolean exists() {
URLConnection connection = null;
@@ -169,7 +169,7 @@ public final class DefaultResourceResolvers {
public Resource createResource(String location, String remaining) {
final String path = getPath(remaining);
- return new ResourceSupport(location) {
+ return new ResourceSupport(SCHEME, location) {
@Override
public boolean exists() {
return getURI() != null;
@@ -234,7 +234,7 @@ public final class DefaultResourceResolvers {
public Resource createResource(String location, String remaining) {
final String val = CamelContextHelper.lookup(getCamelContext(), remaining, String.class);
- return new ResourceSupport(location) {
+ return new ResourceSupport(SCHEME, location) {
@Override
public boolean exists() {
return val != null;
@@ -265,7 +265,7 @@ public final class DefaultResourceResolvers {
@Override
public Resource createResource(String location, String remaining) {
- return new ResourceSupport(location) {
+ return new ResourceSupport(SCHEME, location) {
@Override
public boolean exists() {
return remaining != null;
@@ -278,9 +278,7 @@ public final class DefaultResourceResolvers {
}
final byte[] decoded = Base64.getDecoder().decode(remaining);
- final InputStream is = new ByteArrayInputStream(decoded);
-
- return is;
+ return new ByteArrayInputStream(decoded);
}
};
}
@@ -300,7 +298,7 @@ public final class DefaultResourceResolvers {
@Override
public Resource createResource(String location, String remaining) {
- return new ResourceSupport(location) {
+ return new ResourceSupport(SCHEME, location) {
@Override
public boolean exists() {
return remaining != null;
@@ -334,7 +332,7 @@ public final class DefaultResourceResolvers {
@Override
public Resource createResource(String location, String remaining) {
- return new ResourceSupport(location) {
+ return new ResourceSupport(SCHEME, location) {
@Override
public boolean exists() {
return remaining != null;
diff --git a/core/camel-core/src/test/java/org/apache/camel/urlhandler/custom/Handler.java b/core/camel-core/src/test/java/org/apache/camel/urlhandler/custom/Handler.java
index c0f5295..dd70e36 100644
--- a/core/camel-core/src/test/java/org/apache/camel/urlhandler/custom/Handler.java
+++ b/core/camel-core/src/test/java/org/apache/camel/urlhandler/custom/Handler.java
@@ -23,6 +23,7 @@ import java.nio.charset.StandardCharsets;
import org.apache.camel.spi.Resource;
import org.apache.camel.support.ResourceResolverSupport;
+import org.apache.camel.support.ResourceSupport;
public class Handler extends ResourceResolverSupport {
public Handler() {
@@ -31,12 +32,7 @@ public class Handler extends ResourceResolverSupport {
@Override
protected Resource createResource(String location, String remaining) {
- return new Resource() {
- @Override
- public String getLocation() {
- return location;
- }
-
+ return new ResourceSupport("mem", location) {
@Override
public boolean exists() {
return true;
diff --git a/core/camel-core/src/test/java/org/apache/camel/urlhandler/pd/Handler.java b/core/camel-core/src/test/java/org/apache/camel/urlhandler/pd/Handler.java
index 92a43b5..9f243eb 100644
--- a/core/camel-core/src/test/java/org/apache/camel/urlhandler/pd/Handler.java
+++ b/core/camel-core/src/test/java/org/apache/camel/urlhandler/pd/Handler.java
@@ -24,6 +24,7 @@ import java.util.concurrent.atomic.AtomicInteger;
import org.apache.camel.spi.Resource;
import org.apache.camel.support.ResourceResolverSupport;
+import org.apache.camel.support.ResourceSupport;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
@@ -62,12 +63,7 @@ public class Handler extends ResourceResolverSupport {
@Override
protected Resource createResource(String location, String remaining) {
- return new Resource() {
- @Override
- public String getLocation() {
- return location;
- }
-
+ return new ResourceSupport("mem", location) {
@Override
public boolean exists() {
return true;
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/FileWatcherResourceReloadStrategy.java b/core/camel-support/src/main/java/org/apache/camel/support/FileWatcherResourceReloadStrategy.java
index b1f3ffa..970aff8 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/FileWatcherResourceReloadStrategy.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/FileWatcherResourceReloadStrategy.java
@@ -85,6 +85,10 @@ public class FileWatcherResourceReloadStrategy extends ResourceReloadStrategySup
}
public void setFolder(String folder) {
+ // clip file: prefix if mistakenly specified
+ if (folder != null && folder.startsWith("file:")) {
+ folder = folder.substring(5);
+ }
this.folder = folder;
}
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/ResourceHelper.java b/core/camel-support/src/main/java/org/apache/camel/support/ResourceHelper.java
index 519caa0..30a1585 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/ResourceHelper.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/ResourceHelper.java
@@ -264,12 +264,7 @@ public final class ResourceHelper {
* @return a resource wrapping the given byte array
*/
public static Resource fromBytes(String location, byte[] content) {
- return new Resource() {
- @Override
- public String getLocation() {
- return location;
- }
-
+ return new ResourceSupport("mem", location) {
@Override
public boolean exists() {
return true;
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/ResourceSupport.java b/core/camel-support/src/main/java/org/apache/camel/support/ResourceSupport.java
index d277f8a..cbab7dd 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/ResourceSupport.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/ResourceSupport.java
@@ -22,21 +22,26 @@ import org.apache.camel.spi.Resource;
* Base class for {@link Resource} implementations.
*/
public abstract class ResourceSupport implements Resource {
+ private final String scheme;
private final String location;
- protected ResourceSupport(String location) {
+ protected ResourceSupport(String scheme, String location) {
+ this.scheme = scheme;
this.location = location;
}
@Override
+ public String getScheme() {
+ return scheme;
+ }
+
+ @Override
public String getLocation() {
return location;
}
@Override
public String toString() {
- return getClass().getSimpleName() + "{" +
- "location=" + getLocation() +
- '}';
+ return "Resource[" + scheme + ":" + location + "]";
}
}
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/RouteWatcherReloadStrategy.java b/core/camel-support/src/main/java/org/apache/camel/support/RouteWatcherReloadStrategy.java
index f2d84be..0b1b204 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/RouteWatcherReloadStrategy.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/RouteWatcherReloadStrategy.java
@@ -17,6 +17,7 @@
package org.apache.camel.support;
import java.io.File;
+import java.net.URI;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.ArrayList;
@@ -156,7 +157,7 @@ public class RouteWatcherReloadStrategy extends FileWatcherResourceReloadStrateg
// remember all the sources of the current routes (except the updated)
getCamelContext().getRoutes().forEach(r -> {
Resource rs = r.getSourceResource();
- if (rs != null && (resource == null || !rs.getLocation().equals(resource.getLocation()))) {
+ if (rs != null && !equalResourceLocation(resource, rs)) {
sources.add(rs);
}
});
@@ -230,4 +231,27 @@ public class RouteWatcherReloadStrategy extends FileWatcherResourceReloadStrateg
}
}
+ /**
+ * Whether the two resources are loading the same resource
+ */
+ private static boolean equalResourceLocation(Resource source, Resource target) {
+ if (source == null || target == null) {
+ return false;
+ }
+
+ // use URI to match as file/classpath resources may refer to the same uri
+ URI u1 = source.getURI();
+ URI u2 = target.getURI();
+ boolean answer = u1.equals(u2);
+ if (!answer) {
+ // file and classpath may refer to the same when they have src/main/resources && target/classes
+ String s1 = u1.toString().replace("src/main/resources/", "").replace("src/test/resources/", "")
+ .replace("target/classes/", "");
+ String s2 = u2.toString().replace("src/main/resources/", "").replace("src/test/resources/", "")
+ .replace("target/classes/", "");
+ answer = s1.equals(s2);
+ }
+ return answer;
+ }
+
}
diff --git a/docs/user-manual/modules/ROOT/pages/camel-3x-upgrade-guide-3_15.adoc b/docs/user-manual/modules/ROOT/pages/camel-3x-upgrade-guide-3_15.adoc
new file mode 100644
index 0000000..8bad4c5
--- /dev/null
+++ b/docs/user-manual/modules/ROOT/pages/camel-3x-upgrade-guide-3_15.adoc
@@ -0,0 +1,11 @@
+= Apache Camel 3.x Upgrade Guide
+
+This document is for helping you upgrade your Apache Camel application
+from Camel 3.x to 3.y. For example if you are upgrading Camel 3.0 to 3.2, then you should follow the guides
+from both 3.0 to 3.1 and 3.1 to 3.2.
+
+== Upgrading Camel 3.14 to 3.15
+
+=== API changes
+
+Added `getScheme` method to `org.apache.camel.spi.Resource`.
diff --git a/docs/user-manual/modules/ROOT/pages/camel-3x-upgrade-guide.adoc b/docs/user-manual/modules/ROOT/pages/camel-3x-upgrade-guide.adoc
index d413e78..b7dff7f 100644
--- a/docs/user-manual/modules/ROOT/pages/camel-3x-upgrade-guide.adoc
+++ b/docs/user-manual/modules/ROOT/pages/camel-3x-upgrade-guide.adoc
@@ -23,3 +23,4 @@ You can find upgrade guide for each release in the following pages:
- xref:camel-3x-upgrade-guide-3_12.adoc[Upgrade guide 3.11 -> 3.12]
- xref:camel-3x-upgrade-guide-3_13.adoc[Upgrade guide 3.12 -> 3.13]
- xref:camel-3x-upgrade-guide-3_14.adoc[Upgrade guide 3.13 -> 3.14]
+- xref:camel-3x-upgrade-guide-3_15.adoc[Upgrade guide 3.14 -> 3.15]
diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/support/YamlTestSupport.groovy b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/support/YamlTestSupport.groovy
index 78c81da..bfd3b77 100644
--- a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/support/YamlTestSupport.groovy
+++ b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/test/groovy/org/apache/camel/dsl/yaml/support/YamlTestSupport.groovy
@@ -149,6 +149,12 @@ class YamlTestSupport extends Specification implements HasCamelContext {
static Resource asResource(String location, String content) {
return new Resource() {
+
+ @Override
+ String getScheme() {
+ return "mem"
+ }
+
@Override
String getLocation() {
return location.endsWith('.yaml') ? location : location + '.yaml'
diff --git a/tooling/maven/camel-maven-plugin/src/main/java/org/apache/camel/maven/DevMojo.java b/tooling/maven/camel-maven-plugin/src/main/java/org/apache/camel/maven/DevMojo.java
index b4316d4..ffa8086 100644
--- a/tooling/maven/camel-maven-plugin/src/main/java/org/apache/camel/maven/DevMojo.java
+++ b/tooling/maven/camel-maven-plugin/src/main/java/org/apache/camel/maven/DevMojo.java
@@ -16,6 +16,8 @@
*/
package org.apache.camel.maven;
+import java.io.File;
+
import org.apache.maven.plugins.annotations.LifecyclePhase;
import org.apache.maven.plugins.annotations.Mojo;
import org.apache.maven.plugins.annotations.Parameter;
@@ -47,6 +49,9 @@ public class DevMojo extends RunMojo {
dir = "src/main/resources";
}
+ // use absolute path for dir
+ dir = new File(dir).getAbsolutePath();
+
System.setProperty("camel.main.routesReloadEnabled", "true");
System.setProperty("camel.main.routesReloadDirectory", dir);
System.setProperty("camel.main.routesReloadDirectoryRecursive", "true");