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 6d047a0 [CAMEL-17566]add a HttpsResolver into org.apache.camel.impl.engine.DefaultResourceResolvers so RestEndpoint producer can access https url (#6849) 6d047a0 is described below commit 6d047a005715d7272647da61d0279d813ae4af02 Author: Freeman(Yue) Fang <freeman.f...@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 21ec8fe..feffef7 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)