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 f7f2819b50bd CAMEL-24632: camel-http - fix proxy scheme defaulting to
https for https targets
f7f2819b50bd is described below
commit f7f2819b50bdea1661598ba97aad80b94b0a71e8
Author: Claus Ibsen <[email protected]>
AuthorDate: Mon Sep 7 16:51:58 2026 +0200
CAMEL-24632: camel-http - fix proxy scheme defaulting to https for https
targets
HttpComponent.configureHttpProxy() was deriving the proxy connection scheme
from the target endpoint scheme (secure ? "https" : "http"), which is wrong.
The proxy connection scheme is independent of the target: connecting to an
HTTPS target through an HTTP proxy uses a plain HTTP CONNECT tunnel, with
TLS
established end-to-end inside that tunnel.
Fix defaults proxyAuthScheme to "http" unconditionally in HttpComponent,
HttpEndpoint (deprecated global-options path), and updates the defaultValue
metadata in HttpCommonEndpoint and HttpConfiguration. The unused boolean
secure
parameter is also removed from configureHttpProxy(). Catalog and DSL
regenerated.
Closes #26167
Co-Authored-By: Claude Sonnet 4.6 <[email protected]>
---
.../org/apache/camel/catalog/components/http.json | 4 ++--
.../org/apache/camel/catalog/components/https.json | 4 ++--
.../camel/http/common/HttpCommonEndpoint.java | 5 ++--
.../camel/http/common/HttpConfiguration.java | 4 +++-
.../org/apache/camel/component/http/http.json | 4 ++--
.../org/apache/camel/component/http/https.json | 4 ++--
.../apache/camel/component/http/HttpComponent.java | 13 +++++-----
.../apache/camel/component/http/HttpEndpoint.java | 5 ++--
.../camel/component/http/HttpProxyServerTest.java | 28 ++++++++++++++++++++++
.../component/dsl/HttpComponentBuilderFactory.java | 6 ++++-
.../dsl/HttpsComponentBuilderFactory.java | 6 ++++-
.../endpoint/dsl/HttpEndpointBuilderFactory.java | 5 +++-
12 files changed, 65 insertions(+), 23 deletions(-)
diff --git
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/http.json
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/http.json
index c3e70f1f685f..62bd200a838a 100644
---
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/http.json
+++
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/http.json
@@ -65,7 +65,7 @@
"proxyAuthNtHost": { "index": 35, "kind": "property", "displayName":
"Proxy Auth Nt Host", "group": "proxy", "label": "producer,proxy", "required":
false, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": false, "description": "Proxy authentication
domain (workstation name) to use with NTLM (NTLM is deprecated)" },
"proxyAuthPassword": { "index": 36, "kind": "property", "displayName":
"Proxy Auth Password", "group": "proxy", "label": "producer,proxy", "required":
false, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": true, "security": "secret", "description": "Proxy
server password" },
"proxyAuthPort": { "index": 37, "kind": "property", "displayName": "Proxy
Auth Port", "group": "proxy", "label": "producer,proxy", "required": false,
"type": "integer", "javaType": "java.lang.Integer", "deprecated": true,
"autowired": false, "secret": false, "description": "Proxy server port" },
- "proxyAuthScheme": { "index": 38, "kind": "property", "displayName":
"Proxy Auth Scheme", "group": "proxy", "label": "producer,proxy", "required":
false, "type": "enum", "javaType": "java.lang.String", "enum": [ "http",
"https" ], "deprecated": false, "autowired": false, "secret": false,
"description": "Proxy server authentication protocol scheme to use" },
+ "proxyAuthScheme": { "index": 38, "kind": "property", "displayName":
"Proxy Auth Scheme", "group": "proxy", "label": "producer,proxy", "required":
false, "type": "enum", "javaType": "java.lang.String", "enum": [ "http",
"https" ], "deprecated": false, "autowired": false, "secret": false,
"defaultValue": "http", "description": "Proxy server connection protocol
scheme. Defaults to http regardless of the target endpoint scheme, because most
corporate HTTP proxies expect a plain HTTP con [...]
"proxyAuthUsername": { "index": 39, "kind": "property", "displayName":
"Proxy Auth Username", "group": "proxy", "label": "producer,proxy", "required":
false, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": true, "security": "secret", "description": "Proxy
server username" },
"proxyHost": { "index": 40, "kind": "property", "displayName": "Proxy
Host", "group": "proxy", "label": "producer,proxy", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false, "autowired":
false, "secret": false, "description": "Proxy server host" },
"proxyPort": { "index": 41, "kind": "property", "displayName": "Proxy
Port", "group": "proxy", "label": "producer,proxy", "required": false, "type":
"integer", "javaType": "java.lang.Integer", "deprecated": false, "autowired":
false, "secret": false, "description": "Proxy server port" },
@@ -141,7 +141,7 @@
"proxyAuthNtHost": { "index": 42, "kind": "parameter", "displayName":
"Proxy Auth Nt Host", "group": "proxy", "label": "producer,proxy", "required":
false, "type": "string", "javaType": "java.lang.String", "deprecated": true,
"autowired": false, "secret": false, "description": "Proxy authentication
domain (workstation name) to use with NTLM" },
"proxyAuthPassword": { "index": 43, "kind": "parameter", "displayName":
"Proxy Auth Password", "group": "proxy", "label": "producer,proxy", "required":
false, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": true, "security": "secret", "description": "Proxy
server password" },
"proxyAuthPort": { "index": 44, "kind": "parameter", "displayName": "Proxy
Auth Port", "group": "proxy", "label": "producer,proxy", "required": false,
"type": "integer", "javaType": "int", "deprecated": true, "autowired": false,
"secret": false, "description": "Proxy server port" },
- "proxyAuthScheme": { "index": 45, "kind": "parameter", "displayName":
"Proxy Auth Scheme", "group": "proxy", "label": "producer,proxy", "required":
false, "type": "enum", "javaType": "java.lang.String", "enum": [ "http",
"https" ], "deprecated": false, "autowired": false, "secret": false,
"description": "Proxy server authentication protocol scheme to use" },
+ "proxyAuthScheme": { "index": 45, "kind": "parameter", "displayName":
"Proxy Auth Scheme", "group": "proxy", "label": "producer,proxy", "required":
false, "type": "enum", "javaType": "java.lang.String", "enum": [ "http",
"https" ], "deprecated": false, "autowired": false, "secret": false,
"defaultValue": "http", "description": "Proxy server connection protocol
scheme. Defaults to http regardless of the target endpoint scheme, because most
corporate HTTP proxies expect a plain HTTP co [...]
"proxyAuthUsername": { "index": 46, "kind": "parameter", "displayName":
"Proxy Auth Username", "group": "proxy", "label": "producer,proxy", "required":
false, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": true, "security": "secret", "description": "Proxy
server username" },
"proxyHost": { "index": 47, "kind": "parameter", "displayName": "Proxy
Host", "group": "proxy", "label": "producer,proxy", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false, "autowired":
false, "secret": false, "description": "Proxy server host" },
"proxyPort": { "index": 48, "kind": "parameter", "displayName": "Proxy
Port", "group": "proxy", "label": "producer,proxy", "required": false, "type":
"integer", "javaType": "int", "deprecated": false, "autowired": false,
"secret": false, "description": "Proxy server port" },
diff --git
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/https.json
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/https.json
index b390e2baaa82..684054be5524 100644
---
a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/https.json
+++
b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/https.json
@@ -65,7 +65,7 @@
"proxyAuthNtHost": { "index": 35, "kind": "property", "displayName":
"Proxy Auth Nt Host", "group": "proxy", "label": "producer,proxy", "required":
false, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": false, "description": "Proxy authentication
domain (workstation name) to use with NTLM (NTLM is deprecated)" },
"proxyAuthPassword": { "index": 36, "kind": "property", "displayName":
"Proxy Auth Password", "group": "proxy", "label": "producer,proxy", "required":
false, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": true, "security": "secret", "description": "Proxy
server password" },
"proxyAuthPort": { "index": 37, "kind": "property", "displayName": "Proxy
Auth Port", "group": "proxy", "label": "producer,proxy", "required": false,
"type": "integer", "javaType": "java.lang.Integer", "deprecated": true,
"autowired": false, "secret": false, "description": "Proxy server port" },
- "proxyAuthScheme": { "index": 38, "kind": "property", "displayName":
"Proxy Auth Scheme", "group": "proxy", "label": "producer,proxy", "required":
false, "type": "enum", "javaType": "java.lang.String", "enum": [ "http",
"https" ], "deprecated": false, "autowired": false, "secret": false,
"description": "Proxy server authentication protocol scheme to use" },
+ "proxyAuthScheme": { "index": 38, "kind": "property", "displayName":
"Proxy Auth Scheme", "group": "proxy", "label": "producer,proxy", "required":
false, "type": "enum", "javaType": "java.lang.String", "enum": [ "http",
"https" ], "deprecated": false, "autowired": false, "secret": false,
"defaultValue": "http", "description": "Proxy server connection protocol
scheme. Defaults to http regardless of the target endpoint scheme, because most
corporate HTTP proxies expect a plain HTTP con [...]
"proxyAuthUsername": { "index": 39, "kind": "property", "displayName":
"Proxy Auth Username", "group": "proxy", "label": "producer,proxy", "required":
false, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": true, "security": "secret", "description": "Proxy
server username" },
"proxyHost": { "index": 40, "kind": "property", "displayName": "Proxy
Host", "group": "proxy", "label": "producer,proxy", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false, "autowired":
false, "secret": false, "description": "Proxy server host" },
"proxyPort": { "index": 41, "kind": "property", "displayName": "Proxy
Port", "group": "proxy", "label": "producer,proxy", "required": false, "type":
"integer", "javaType": "java.lang.Integer", "deprecated": false, "autowired":
false, "secret": false, "description": "Proxy server port" },
@@ -141,7 +141,7 @@
"proxyAuthNtHost": { "index": 42, "kind": "parameter", "displayName":
"Proxy Auth Nt Host", "group": "proxy", "label": "producer,proxy", "required":
false, "type": "string", "javaType": "java.lang.String", "deprecated": true,
"autowired": false, "secret": false, "description": "Proxy authentication
domain (workstation name) to use with NTLM" },
"proxyAuthPassword": { "index": 43, "kind": "parameter", "displayName":
"Proxy Auth Password", "group": "proxy", "label": "producer,proxy", "required":
false, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": true, "security": "secret", "description": "Proxy
server password" },
"proxyAuthPort": { "index": 44, "kind": "parameter", "displayName": "Proxy
Auth Port", "group": "proxy", "label": "producer,proxy", "required": false,
"type": "integer", "javaType": "int", "deprecated": true, "autowired": false,
"secret": false, "description": "Proxy server port" },
- "proxyAuthScheme": { "index": 45, "kind": "parameter", "displayName":
"Proxy Auth Scheme", "group": "proxy", "label": "producer,proxy", "required":
false, "type": "enum", "javaType": "java.lang.String", "enum": [ "http",
"https" ], "deprecated": false, "autowired": false, "secret": false,
"description": "Proxy server authentication protocol scheme to use" },
+ "proxyAuthScheme": { "index": 45, "kind": "parameter", "displayName":
"Proxy Auth Scheme", "group": "proxy", "label": "producer,proxy", "required":
false, "type": "enum", "javaType": "java.lang.String", "enum": [ "http",
"https" ], "deprecated": false, "autowired": false, "secret": false,
"defaultValue": "http", "description": "Proxy server connection protocol
scheme. Defaults to http regardless of the target endpoint scheme, because most
corporate HTTP proxies expect a plain HTTP co [...]
"proxyAuthUsername": { "index": 46, "kind": "parameter", "displayName":
"Proxy Auth Username", "group": "proxy", "label": "producer,proxy", "required":
false, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": true, "security": "secret", "description": "Proxy
server username" },
"proxyHost": { "index": 47, "kind": "parameter", "displayName": "Proxy
Host", "group": "proxy", "label": "producer,proxy", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false, "autowired":
false, "secret": false, "description": "Proxy server host" },
"proxyPort": { "index": 48, "kind": "parameter", "displayName": "Proxy
Port", "group": "proxy", "label": "producer,proxy", "required": false, "type":
"integer", "javaType": "int", "deprecated": false, "autowired": false,
"secret": false, "description": "Proxy server port" },
diff --git
a/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpCommonEndpoint.java
b/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpCommonEndpoint.java
index 84dc6fd9f138..d901c31f4247 100644
---
a/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpCommonEndpoint.java
+++
b/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpCommonEndpoint.java
@@ -183,8 +183,9 @@ public abstract class HttpCommonEndpoint extends
DefaultEndpoint
private String proxyHost;
@UriParam(label = "producer,proxy", description = "Proxy server port")
private int proxyPort;
- @UriParam(label = "producer,proxy", enums = "http,https",
- description = "Proxy server authentication protocol scheme to
use")
+ @UriParam(label = "producer,proxy", enums = "http,https", defaultValue =
"http",
+ description = "Proxy server connection protocol scheme. Defaults
to http regardless of the target endpoint scheme,"
+ + " because most corporate HTTP proxies expect a
plain HTTP connection on their listener port.")
private String proxyAuthScheme;
@UriParam(label = "producer,proxy", enums = "Basic,Bearer,NTLM",
description = "Proxy authentication method to use (NTLM is
deprecated)")
diff --git
a/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpConfiguration.java
b/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpConfiguration.java
index f850b79f9d52..aa47c42f7f10 100644
---
a/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpConfiguration.java
+++
b/components/camel-http-common/src/main/java/org/apache/camel/http/common/HttpConfiguration.java
@@ -68,7 +68,9 @@ public class HttpConfiguration implements Serializable {
private String proxyHost;
@Metadata(label = "producer,proxy", description = "Proxy port to use")
private int proxyPort;
- @Metadata(label = "producer,proxy", enums = "http,https", description =
"Authentication scheme to use")
+ @Metadata(label = "producer,proxy", enums = "http,https", defaultValue =
"http",
+ description = "Proxy server connection protocol scheme. Defaults
to http regardless of the target endpoint scheme,"
+ + " because most corporate HTTP proxies expect a
plain HTTP connection on their listener port.")
private String proxyAuthScheme;
@Metadata(label = "producer,proxy", enums = "Basic,Bearer,NTLM",
description = "Proxy authentication method to use")
private String proxyAuthMethod;
diff --git
a/components/camel-http/src/generated/resources/META-INF/org/apache/camel/component/http/http.json
b/components/camel-http/src/generated/resources/META-INF/org/apache/camel/component/http/http.json
index c3e70f1f685f..62bd200a838a 100644
---
a/components/camel-http/src/generated/resources/META-INF/org/apache/camel/component/http/http.json
+++
b/components/camel-http/src/generated/resources/META-INF/org/apache/camel/component/http/http.json
@@ -65,7 +65,7 @@
"proxyAuthNtHost": { "index": 35, "kind": "property", "displayName":
"Proxy Auth Nt Host", "group": "proxy", "label": "producer,proxy", "required":
false, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": false, "description": "Proxy authentication
domain (workstation name) to use with NTLM (NTLM is deprecated)" },
"proxyAuthPassword": { "index": 36, "kind": "property", "displayName":
"Proxy Auth Password", "group": "proxy", "label": "producer,proxy", "required":
false, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": true, "security": "secret", "description": "Proxy
server password" },
"proxyAuthPort": { "index": 37, "kind": "property", "displayName": "Proxy
Auth Port", "group": "proxy", "label": "producer,proxy", "required": false,
"type": "integer", "javaType": "java.lang.Integer", "deprecated": true,
"autowired": false, "secret": false, "description": "Proxy server port" },
- "proxyAuthScheme": { "index": 38, "kind": "property", "displayName":
"Proxy Auth Scheme", "group": "proxy", "label": "producer,proxy", "required":
false, "type": "enum", "javaType": "java.lang.String", "enum": [ "http",
"https" ], "deprecated": false, "autowired": false, "secret": false,
"description": "Proxy server authentication protocol scheme to use" },
+ "proxyAuthScheme": { "index": 38, "kind": "property", "displayName":
"Proxy Auth Scheme", "group": "proxy", "label": "producer,proxy", "required":
false, "type": "enum", "javaType": "java.lang.String", "enum": [ "http",
"https" ], "deprecated": false, "autowired": false, "secret": false,
"defaultValue": "http", "description": "Proxy server connection protocol
scheme. Defaults to http regardless of the target endpoint scheme, because most
corporate HTTP proxies expect a plain HTTP con [...]
"proxyAuthUsername": { "index": 39, "kind": "property", "displayName":
"Proxy Auth Username", "group": "proxy", "label": "producer,proxy", "required":
false, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": true, "security": "secret", "description": "Proxy
server username" },
"proxyHost": { "index": 40, "kind": "property", "displayName": "Proxy
Host", "group": "proxy", "label": "producer,proxy", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false, "autowired":
false, "secret": false, "description": "Proxy server host" },
"proxyPort": { "index": 41, "kind": "property", "displayName": "Proxy
Port", "group": "proxy", "label": "producer,proxy", "required": false, "type":
"integer", "javaType": "java.lang.Integer", "deprecated": false, "autowired":
false, "secret": false, "description": "Proxy server port" },
@@ -141,7 +141,7 @@
"proxyAuthNtHost": { "index": 42, "kind": "parameter", "displayName":
"Proxy Auth Nt Host", "group": "proxy", "label": "producer,proxy", "required":
false, "type": "string", "javaType": "java.lang.String", "deprecated": true,
"autowired": false, "secret": false, "description": "Proxy authentication
domain (workstation name) to use with NTLM" },
"proxyAuthPassword": { "index": 43, "kind": "parameter", "displayName":
"Proxy Auth Password", "group": "proxy", "label": "producer,proxy", "required":
false, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": true, "security": "secret", "description": "Proxy
server password" },
"proxyAuthPort": { "index": 44, "kind": "parameter", "displayName": "Proxy
Auth Port", "group": "proxy", "label": "producer,proxy", "required": false,
"type": "integer", "javaType": "int", "deprecated": true, "autowired": false,
"secret": false, "description": "Proxy server port" },
- "proxyAuthScheme": { "index": 45, "kind": "parameter", "displayName":
"Proxy Auth Scheme", "group": "proxy", "label": "producer,proxy", "required":
false, "type": "enum", "javaType": "java.lang.String", "enum": [ "http",
"https" ], "deprecated": false, "autowired": false, "secret": false,
"description": "Proxy server authentication protocol scheme to use" },
+ "proxyAuthScheme": { "index": 45, "kind": "parameter", "displayName":
"Proxy Auth Scheme", "group": "proxy", "label": "producer,proxy", "required":
false, "type": "enum", "javaType": "java.lang.String", "enum": [ "http",
"https" ], "deprecated": false, "autowired": false, "secret": false,
"defaultValue": "http", "description": "Proxy server connection protocol
scheme. Defaults to http regardless of the target endpoint scheme, because most
corporate HTTP proxies expect a plain HTTP co [...]
"proxyAuthUsername": { "index": 46, "kind": "parameter", "displayName":
"Proxy Auth Username", "group": "proxy", "label": "producer,proxy", "required":
false, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": true, "security": "secret", "description": "Proxy
server username" },
"proxyHost": { "index": 47, "kind": "parameter", "displayName": "Proxy
Host", "group": "proxy", "label": "producer,proxy", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false, "autowired":
false, "secret": false, "description": "Proxy server host" },
"proxyPort": { "index": 48, "kind": "parameter", "displayName": "Proxy
Port", "group": "proxy", "label": "producer,proxy", "required": false, "type":
"integer", "javaType": "int", "deprecated": false, "autowired": false,
"secret": false, "description": "Proxy server port" },
diff --git
a/components/camel-http/src/generated/resources/META-INF/org/apache/camel/component/http/https.json
b/components/camel-http/src/generated/resources/META-INF/org/apache/camel/component/http/https.json
index b390e2baaa82..684054be5524 100644
---
a/components/camel-http/src/generated/resources/META-INF/org/apache/camel/component/http/https.json
+++
b/components/camel-http/src/generated/resources/META-INF/org/apache/camel/component/http/https.json
@@ -65,7 +65,7 @@
"proxyAuthNtHost": { "index": 35, "kind": "property", "displayName":
"Proxy Auth Nt Host", "group": "proxy", "label": "producer,proxy", "required":
false, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": false, "description": "Proxy authentication
domain (workstation name) to use with NTLM (NTLM is deprecated)" },
"proxyAuthPassword": { "index": 36, "kind": "property", "displayName":
"Proxy Auth Password", "group": "proxy", "label": "producer,proxy", "required":
false, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": true, "security": "secret", "description": "Proxy
server password" },
"proxyAuthPort": { "index": 37, "kind": "property", "displayName": "Proxy
Auth Port", "group": "proxy", "label": "producer,proxy", "required": false,
"type": "integer", "javaType": "java.lang.Integer", "deprecated": true,
"autowired": false, "secret": false, "description": "Proxy server port" },
- "proxyAuthScheme": { "index": 38, "kind": "property", "displayName":
"Proxy Auth Scheme", "group": "proxy", "label": "producer,proxy", "required":
false, "type": "enum", "javaType": "java.lang.String", "enum": [ "http",
"https" ], "deprecated": false, "autowired": false, "secret": false,
"description": "Proxy server authentication protocol scheme to use" },
+ "proxyAuthScheme": { "index": 38, "kind": "property", "displayName":
"Proxy Auth Scheme", "group": "proxy", "label": "producer,proxy", "required":
false, "type": "enum", "javaType": "java.lang.String", "enum": [ "http",
"https" ], "deprecated": false, "autowired": false, "secret": false,
"defaultValue": "http", "description": "Proxy server connection protocol
scheme. Defaults to http regardless of the target endpoint scheme, because most
corporate HTTP proxies expect a plain HTTP con [...]
"proxyAuthUsername": { "index": 39, "kind": "property", "displayName":
"Proxy Auth Username", "group": "proxy", "label": "producer,proxy", "required":
false, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": true, "security": "secret", "description": "Proxy
server username" },
"proxyHost": { "index": 40, "kind": "property", "displayName": "Proxy
Host", "group": "proxy", "label": "producer,proxy", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false, "autowired":
false, "secret": false, "description": "Proxy server host" },
"proxyPort": { "index": 41, "kind": "property", "displayName": "Proxy
Port", "group": "proxy", "label": "producer,proxy", "required": false, "type":
"integer", "javaType": "java.lang.Integer", "deprecated": false, "autowired":
false, "secret": false, "description": "Proxy server port" },
@@ -141,7 +141,7 @@
"proxyAuthNtHost": { "index": 42, "kind": "parameter", "displayName":
"Proxy Auth Nt Host", "group": "proxy", "label": "producer,proxy", "required":
false, "type": "string", "javaType": "java.lang.String", "deprecated": true,
"autowired": false, "secret": false, "description": "Proxy authentication
domain (workstation name) to use with NTLM" },
"proxyAuthPassword": { "index": 43, "kind": "parameter", "displayName":
"Proxy Auth Password", "group": "proxy", "label": "producer,proxy", "required":
false, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": true, "security": "secret", "description": "Proxy
server password" },
"proxyAuthPort": { "index": 44, "kind": "parameter", "displayName": "Proxy
Auth Port", "group": "proxy", "label": "producer,proxy", "required": false,
"type": "integer", "javaType": "int", "deprecated": true, "autowired": false,
"secret": false, "description": "Proxy server port" },
- "proxyAuthScheme": { "index": 45, "kind": "parameter", "displayName":
"Proxy Auth Scheme", "group": "proxy", "label": "producer,proxy", "required":
false, "type": "enum", "javaType": "java.lang.String", "enum": [ "http",
"https" ], "deprecated": false, "autowired": false, "secret": false,
"description": "Proxy server authentication protocol scheme to use" },
+ "proxyAuthScheme": { "index": 45, "kind": "parameter", "displayName":
"Proxy Auth Scheme", "group": "proxy", "label": "producer,proxy", "required":
false, "type": "enum", "javaType": "java.lang.String", "enum": [ "http",
"https" ], "deprecated": false, "autowired": false, "secret": false,
"defaultValue": "http", "description": "Proxy server connection protocol
scheme. Defaults to http regardless of the target endpoint scheme, because most
corporate HTTP proxies expect a plain HTTP co [...]
"proxyAuthUsername": { "index": 46, "kind": "parameter", "displayName":
"Proxy Auth Username", "group": "proxy", "label": "producer,proxy", "required":
false, "type": "string", "javaType": "java.lang.String", "deprecated": false,
"autowired": false, "secret": true, "security": "secret", "description": "Proxy
server username" },
"proxyHost": { "index": 47, "kind": "parameter", "displayName": "Proxy
Host", "group": "proxy", "label": "producer,proxy", "required": false, "type":
"string", "javaType": "java.lang.String", "deprecated": false, "autowired":
false, "secret": false, "description": "Proxy server host" },
"proxyPort": { "index": 48, "kind": "parameter", "displayName": "Proxy
Port", "group": "proxy", "label": "producer,proxy", "required": false, "type":
"integer", "javaType": "int", "deprecated": false, "autowired": false,
"secret": false, "description": "Proxy server port" },
diff --git
a/components/camel-http/src/main/java/org/apache/camel/component/http/HttpComponent.java
b/components/camel-http/src/main/java/org/apache/camel/component/http/HttpComponent.java
index 72f74b56e534..352173cbae48 100644
---
a/components/camel-http/src/main/java/org/apache/camel/component/http/HttpComponent.java
+++
b/components/camel-http/src/main/java/org/apache/camel/component/http/HttpComponent.java
@@ -148,8 +148,9 @@ public class HttpComponent extends HttpCommonComponent
implements RestProducerFa
@Metadata(label = "producer,proxy", description = "Comma-separated list of
hosts that should bypass the proxy. "
+ "Supports wildcards,
e.g., localhost,*.example.com,192.168.*.")
protected String nonProxyHosts;
- @Metadata(label = "producer,proxy", enums = "http,https",
- description = "Proxy server authentication protocol scheme to
use")
+ @Metadata(label = "producer,proxy", enums = "http,https", defaultValue =
"http",
+ description = "Proxy server connection protocol scheme. Defaults
to http regardless of the target endpoint scheme,"
+ + " because most corporate HTTP proxies expect a
plain HTTP connection on their listener port.")
protected String proxyAuthScheme;
@Metadata(label = "producer,proxy", enums = "Basic,Digest,NTLM",
description = "Proxy authentication method to use (NTLM is
deprecated)")
@@ -263,7 +264,7 @@ public class HttpComponent extends HttpCommonComponent
implements RestProducerFa
}
HttpCredentialsHelper credentialsProvider = new
HttpCredentialsHelper();
configurer = configureBasicAuthentication(parameters, configurer,
credentialsProvider, targetUri);
- configurer = configureHttpProxy(parameters, configurer, secure,
credentialsProvider);
+ configurer = configureHttpProxy(parameters, configurer,
credentialsProvider);
configurer = configureOAuth2Authentication(parameters, configurer,
targetUri);
return configurer;
@@ -378,14 +379,14 @@ public class HttpComponent extends HttpCommonComponent
implements RestProducerFa
}
private HttpClientConfigurer configureHttpProxy(
- Map<String, Object> parameters, HttpClientConfigurer configurer,
boolean secure,
+ Map<String, Object> parameters, HttpClientConfigurer configurer,
HttpCredentialsHelper credentialsProvider) {
String nonProxyhosts = getParameter(parameters, "nonProxyHosts",
String.class, getNonProxyHosts());
String proxyAuthScheme = getParameter(parameters, "proxyAuthScheme",
String.class, getProxyAuthScheme());
if (proxyAuthScheme == null) {
- // fallback and use either http or https depending on secure
- proxyAuthScheme = secure ? "https" : "http";
+ // proxy connection itself uses http by default regardless of the
target endpoint scheme
+ proxyAuthScheme = "http";
}
// these are old names and are deprecated
String proxyAuthHost = getParameter(parameters, "proxyAuthHost",
String.class, getProxyAuthHost());
diff --git
a/components/camel-http/src/main/java/org/apache/camel/component/http/HttpEndpoint.java
b/components/camel-http/src/main/java/org/apache/camel/component/http/HttpEndpoint.java
index bc852f021181..5a453b2e5fc4 100644
---
a/components/camel-http/src/main/java/org/apache/camel/component/http/HttpEndpoint.java
+++
b/components/camel-http/src/main/java/org/apache/camel/component/http/HttpEndpoint.java
@@ -33,7 +33,6 @@ import org.apache.camel.Processor;
import org.apache.camel.Producer;
import org.apache.camel.api.management.ManagedAttribute;
import org.apache.camel.api.management.ManagedResource;
-import org.apache.camel.http.base.HttpHelper;
import org.apache.camel.http.base.cookie.CookieHandler;
import org.apache.camel.http.common.HttpCommonEndpoint;
import org.apache.camel.spi.Metadata;
@@ -291,9 +290,9 @@ public class HttpEndpoint extends HttpCommonEndpoint
implements LineNumberAware
String host =
getCamelContext().getGlobalOption("http.proxyHost");
int port =
Integer.parseInt(getCamelContext().getGlobalOption("http.proxyPort"));
String scheme =
getCamelContext().getGlobalOption("http.proxyScheme");
- // fallback and use either http or https depending on secure
+ // proxy connection uses http by default regardless of the
target endpoint scheme
if (scheme == null) {
- scheme = HttpHelper.isSecureConnection(getEndpointUri()) ?
"https" : "http";
+ scheme = "http";
}
LOG.warn(
"CamelContext global options
[http.proxyHost,http.proxyPort,http.proxyScheme] detected."
diff --git
a/components/camel-http/src/test/java/org/apache/camel/component/http/HttpProxyServerTest.java
b/components/camel-http/src/test/java/org/apache/camel/component/http/HttpProxyServerTest.java
index 66fc164d9bb3..a34122f39ffb 100644
---
a/components/camel-http/src/test/java/org/apache/camel/component/http/HttpProxyServerTest.java
+++
b/components/camel-http/src/test/java/org/apache/camel/component/http/HttpProxyServerTest.java
@@ -16,6 +16,7 @@
*/
package org.apache.camel.component.http;
+import java.lang.reflect.Field;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
@@ -26,6 +27,8 @@ import
org.apache.camel.component.http.handler.HeaderValidationHandler;
import org.apache.camel.component.http.interceptor.RequestProxyBasicAuth;
import
org.apache.camel.component.http.interceptor.ResponseProxyBasicUnauthorized;
import org.apache.camel.util.URISupport;
+import org.apache.hc.client5.http.impl.classic.HttpClientBuilder;
+import org.apache.hc.core5.http.HttpHost;
import org.apache.hc.core5.http.HttpRequestInterceptor;
import org.apache.hc.core5.http.HttpResponseInterceptor;
import org.apache.hc.core5.http.impl.bootstrap.HttpServer;
@@ -37,6 +40,7 @@ import org.apache.hc.core5.http.protocol.ResponseContent;
import org.junit.jupiter.api.Test;
import static org.apache.camel.component.http.HttpMethods.GET;
+import static org.assertj.core.api.Assertions.assertThat;
import static org.junit.jupiter.api.Assertions.assertEquals;
public class HttpProxyServerTest extends BaseHttpTest {
@@ -143,6 +147,30 @@ public class HttpProxyServerTest extends BaseHttpTest {
assertExchange(exchange);
}
+ @Test
+ public void httpsTargetWithProxyDefaultsToHttpProxyScheme() throws
Exception {
+ // CAMEL-24632: proxy scheme must default to "http" regardless of the
target endpoint scheme
+ HttpEndpoint endpoint = context.getEndpoint(
+ "https://www.example.com?proxyHost=myproxy&proxyPort=8080",
HttpEndpoint.class);
+
+ HttpClientConfigurer configurer = endpoint.getHttpClientConfigurer();
+ assertThat(configurer).isNotNull();
+
+ HttpClientBuilder builder = HttpClientBuilder.create();
+ configurer.configureHttpClient(builder);
+
+ Field proxyField = HttpClientBuilder.class.getDeclaredField("proxy");
+ proxyField.setAccessible(true);
+ HttpHost proxy = (HttpHost) proxyField.get(builder);
+
+ assertThat(proxy).isNotNull();
+ assertThat(proxy.getHostName()).isEqualTo("myproxy");
+ assertThat(proxy.getPort()).isEqualTo(8080);
+ assertThat(proxy.getSchemeName())
+ .as("Proxy scheme must be http even when the target endpoint
is https")
+ .isEqualTo("http");
+ }
+
private String getHost() {
return "127.0.0.1";
}
diff --git
a/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/HttpComponentBuilderFactory.java
b/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/HttpComponentBuilderFactory.java
index 4a698fa72dc8..d04b153f4b50 100644
---
a/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/HttpComponentBuilderFactory.java
+++
b/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/HttpComponentBuilderFactory.java
@@ -725,11 +725,15 @@ public interface HttpComponentBuilderFactory {
return this;
}
+
/**
- * Proxy server authentication protocol scheme to use.
+ * Proxy server connection protocol scheme. Defaults to http regardless
+ * of the target endpoint scheme, because most corporate HTTP proxies
+ * expect a plain HTTP connection on their listener port.
*
* The option is a: <code>java.lang.String</code> type.
*
+ * Default: http
* Group: proxy
*
* @param proxyAuthScheme the value to set
diff --git
a/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/HttpsComponentBuilderFactory.java
b/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/HttpsComponentBuilderFactory.java
index ab81bf36ef47..332a3b19469c 100644
---
a/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/HttpsComponentBuilderFactory.java
+++
b/dsl/camel-componentdsl/src/generated/java/org/apache/camel/builder/component/dsl/HttpsComponentBuilderFactory.java
@@ -725,11 +725,15 @@ public interface HttpsComponentBuilderFactory {
return this;
}
+
/**
- * Proxy server authentication protocol scheme to use.
+ * Proxy server connection protocol scheme. Defaults to http regardless
+ * of the target endpoint scheme, because most corporate HTTP proxies
+ * expect a plain HTTP connection on their listener port.
*
* The option is a: <code>java.lang.String</code> type.
*
+ * Default: http
* Group: proxy
*
* @param proxyAuthScheme the value to set
diff --git
a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/HttpEndpointBuilderFactory.java
b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/HttpEndpointBuilderFactory.java
index 5fe684ad2fc1..a6bb3487b085 100644
---
a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/HttpEndpointBuilderFactory.java
+++
b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/HttpEndpointBuilderFactory.java
@@ -546,10 +546,13 @@ public interface HttpEndpointBuilderFactory {
return this;
}
/**
- * Proxy server authentication protocol scheme to use.
+ * Proxy server connection protocol scheme. Defaults to http regardless
+ * of the target endpoint scheme, because most corporate HTTP proxies
+ * expect a plain HTTP connection on their listener port.
*
* The option is a: <code>java.lang.String</code> type.
*
+ * Default: http
* Group: proxy
*
* @param proxyAuthScheme the value to set