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 2022/01/29 08:05:25 UTC

[camel] branch camel-3.14.x updated: [CAMEL-17566]add a HttpsResolver into org.apache.camel.impl.engine.DefaultResourceResolvers so RestEndpoint producer can access https url (#6849)

This is an automated email from the ASF dual-hosted git repository.

davsclaus pushed a commit to branch camel-3.14.x
in repository https://gitbox.apache.org/repos/asf/camel.git


The following commit(s) were added to refs/heads/camel-3.14.x by this push:
     new 1cac9e1  [CAMEL-17566]add a HttpsResolver into org.apache.camel.impl.engine.DefaultResourceResolvers so RestEndpoint producer can access https url (#6849)
1cac9e1 is described below

commit 1cac9e1318875c2d1cd9e5b608ed0f82cdf3aa32
Author: Freeman(Yue) Fang <fr...@gmail.com>
AuthorDate: Sat Jan 29 03:00:59 2022 -0500

    [CAMEL-17566]add a HttpsResolver into org.apache.camel.impl.engine.DefaultResourceResolvers so RestEndpoint producer can access https url (#6849)
---
 .../org/apache/camel/resource-resolver/https       |  2 +
 .../impl/engine/DefaultResourceResolvers.java      | 59 ++++++++++++++++++++++
 2 files changed, 61 insertions(+)

diff --git a/core/camel-base-engine/src/generated/resources/META-INF/services/org/apache/camel/resource-resolver/https b/core/camel-base-engine/src/generated/resources/META-INF/services/org/apache/camel/resource-resolver/https
new file mode 100644
index 0000000..ea3aeeb
--- /dev/null
+++ b/core/camel-base-engine/src/generated/resources/META-INF/services/org/apache/camel/resource-resolver/https
@@ -0,0 +1,2 @@
+# Generated by camel build tools - do NOT edit this file!
+class=org.apache.camel.impl.engine.DefaultResourceResolvers$HttpsResolver
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..9c43f18 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
@@ -32,6 +32,8 @@ import java.nio.charset.StandardCharsets;
 import java.util.Base64;
 import java.util.zip.GZIPInputStream;
 
+import javax.net.ssl.HttpsURLConnection;
+
 import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.spi.Resource;
 import org.apache.camel.spi.annotations.ResourceResolver;
@@ -155,6 +157,63 @@ public final class DefaultResourceResolvers {
     }
 
     /**
+     * An implementation of the {@link ResourceResolver} that resolves a {@link Resource} from https.
+     */
+    @ResourceResolver(HttpsResolver.SCHEME)
+    public static class HttpsResolver extends ResourceResolverSupport {
+        public static final String SCHEME = "https";
+
+        public HttpsResolver() {
+            super(SCHEME);
+        }
+
+        @Override
+        public Resource createResource(String location, String remaining) {
+            return new ResourceSupport(SCHEME, location) {
+                @Override
+                public boolean exists() {
+                    URLConnection connection = null;
+
+                    try {
+                        connection = new URL(location).openConnection();
+
+                        if (connection instanceof HttpsURLConnection) {
+                            return ((HttpsURLConnection) connection).getResponseCode() == HttpURLConnection.HTTP_OK;
+                        }
+
+                        return connection.getContentLengthLong() > 0;
+                    } catch (IOException e) {
+                        throw new IllegalArgumentException(e);
+                    } finally {
+                        // close the http connection to avoid
+                        // leaking gaps in case of an exception
+                        if (connection instanceof HttpsURLConnection) {
+                            ((HttpsURLConnection) connection).disconnect();
+                        }
+                    }
+                }
+
+                @Override
+                public InputStream getInputStream() throws IOException {
+                    URLConnection con = new URL(location).openConnection();
+                    con.setUseCaches(false);
+
+                    try {
+                        return con.getInputStream();
+                    } catch (IOException e) {
+                        // close the http connection to avoid
+                        // leaking gaps in case of an exception
+                        if (con instanceof HttpsURLConnection) {
+                            ((HttpsURLConnection) con).disconnect();
+                        }
+                        throw e;
+                    }
+                }
+            };
+        }
+    }
+
+    /**
      * An implementation of the {@link ResourceResolver} that resolves a {@link Resource} from the classpath.
      */
     @ResourceResolver(ClasspathResolver.SCHEME)