diff --git a/amqp/pom.xml b/amqp/pom.xml
index c4884c9c..06b65e39 100644
--- a/amqp/pom.xml
+++ b/amqp/pom.xml
@@ -22,19 +22,19 @@
camel-quarkus-examples-amqp
org.apache.camel.quarkus.examples
- 3.35.0
+ 3.36.0-SNAPSHOT
Camel Quarkus :: Examples :: AMQP
Camel Quarkus Example :: AMQP
3.35.1
- ${quarkus.platform.version}
+ 3.36.0-SNAPSHOT
- io.quarkus.platform
+ io.quarkus
quarkus-bom
- ${quarkus.platform.group-id}
- quarkus-camel-bom
+ org.apache.camel.quarkus
+ camel-quarkus-bom
UTF-8
UTF-8
diff --git a/artemis-elasticsearch/pom.xml b/artemis-elasticsearch/pom.xml
index ba02977a..de38a2f5 100644
--- a/artemis-elasticsearch/pom.xml
+++ b/artemis-elasticsearch/pom.xml
@@ -22,19 +22,19 @@
camel-quarkus-examples-artemis-elasticsearch
org.apache.camel.quarkus.examples
- 3.35.0
+ 3.36.0-SNAPSHOT
Camel Quarkus :: Examples :: Artemis ElasticSearch
Camel Quarkus Example :: Artemis ElasticSearch
3.35.1
- ${quarkus.platform.version}
+ 3.36.0-SNAPSHOT
- io.quarkus.platform
+ io.quarkus
quarkus-bom
- ${quarkus.platform.group-id}
- quarkus-camel-bom
+ org.apache.camel.quarkus
+ camel-quarkus-bom
UTF-8
UTF-8
diff --git a/aws-lambda/pom.xml b/aws-lambda/pom.xml
index df165d43..2b418cb0 100644
--- a/aws-lambda/pom.xml
+++ b/aws-lambda/pom.xml
@@ -21,19 +21,19 @@
4.0.0
org.apache.camel.quarkus.examples
camel-quarkus-examples-aws-lambda
- 3.35.0
+ 3.36.0-SNAPSHOT
Camel Quarkus :: Examples :: AWS Lambda
Camel Quarkus Example :: Deploying a Camel Route in AWS Lambda
3.35.1
- ${quarkus.platform.version}
+ 3.36.0-SNAPSHOT
- io.quarkus.platform
+ io.quarkus
quarkus-bom
- ${quarkus.platform.group-id}
- quarkus-camel-bom
+ org.apache.camel.quarkus
+ camel-quarkus-bom
UTF-8
UTF-8
diff --git a/aws2-s3/pom.xml b/aws2-s3/pom.xml
index 9e1d2d58..32485939 100644
--- a/aws2-s3/pom.xml
+++ b/aws2-s3/pom.xml
@@ -22,19 +22,19 @@
camel-quarkus-examples-aws2-s3
org.apache.camel.quarkus.examples
- 3.35.0
+ 3.36.0-SNAPSHOT
Camel Quarkus :: Examples :: aws2-s3
Camel Quarkus Example :: Upload a file to an AWS S3 bucket
3.35.1
- ${quarkus.platform.version}
+ 3.36.0-SNAPSHOT
- io.quarkus.platform
+ io.quarkus
quarkus-bom
- ${quarkus.platform.group-id}
- quarkus-camel-bom
+ org.apache.camel.quarkus
+ camel-quarkus-bom
UTF-8
UTF-8
diff --git a/cluster-leader-election/pom.xml b/cluster-leader-election/pom.xml
index d4103495..bf8d6276 100644
--- a/cluster-leader-election/pom.xml
+++ b/cluster-leader-election/pom.xml
@@ -23,19 +23,19 @@
camel-quarkus-examples-cluster-leader-election
org.apache.camel.quarkus.examples
- 3.35.0
+ 3.36.0-SNAPSHOT
Camel Quarkus :: Examples :: Cluster leader election
Camel Quarkus Example :: Cluster leader election
3.35.1
- ${quarkus.platform.version}
+ 3.36.0-SNAPSHOT
- io.quarkus.platform
+ io.quarkus
quarkus-bom
- ${quarkus.platform.group-id}
- quarkus-camel-bom
+ org.apache.camel.quarkus
+ camel-quarkus-bom
UTF-8
UTF-8
diff --git a/cxf-soap/pom.xml b/cxf-soap/pom.xml
index e4b6e894..7245e604 100644
--- a/cxf-soap/pom.xml
+++ b/cxf-soap/pom.xml
@@ -23,19 +23,19 @@
camel-quarkus-examples-cxf-soap
org.apache.camel.quarkus.examples
- 3.35.0
+ 3.36.0-SNAPSHOT
Camel Quarkus :: Examples :: CXF SOAP
Camel Quarkus Example :: CXF SOAP
3.35.1
- ${quarkus.platform.version}
+ 3.36.0-SNAPSHOT
- io.quarkus.platform
+ io.quarkus
quarkus-bom
- ${quarkus.platform.group-id}
- quarkus-camel-bom
+ org.apache.camel.quarkus
+ camel-quarkus-bom
UTF-8
UTF-8
diff --git a/data-extract-langchain4j/pom.xml b/data-extract-langchain4j/pom.xml
index 76c026f7..b91315db 100644
--- a/data-extract-langchain4j/pom.xml
+++ b/data-extract-langchain4j/pom.xml
@@ -24,7 +24,7 @@
camel-quarkus-examples-data-extract-langchain4j
org.apache.camel.quarkus.examples
- 3.35.0
+ 3.36.0-SNAPSHOT
Camel Quarkus :: Examples :: Data Extract LangChain4j Repository
Camel Quarkus Example :: Data Extract LangChain4j Repository
@@ -32,12 +32,12 @@
3.35.1
- ${quarkus.platform.version}
+ 3.36.0-SNAPSHOT
- io.quarkus.platform
+ io.quarkus
quarkus-bom
- ${quarkus.platform.group-id}
- quarkus-camel-bom
+ org.apache.camel.quarkus
+ camel-quarkus-bom
UTF-8
UTF-8
diff --git a/docs/modules/ROOT/attachments/examples.json b/docs/modules/ROOT/attachments/examples.json
index c69639f1..8d688d02 100644
--- a/docs/modules/ROOT/attachments/examples.json
+++ b/docs/modules/ROOT/attachments/examples.json
@@ -49,6 +49,11 @@
"description": "Shows how to implement quantum-resistant authentication using hybrid certificates that combine RSA with post-quantum ML-DSA-65 signatures on Java 17 using application-level validation",
"link": "https://github.com/apache/camel-quarkus-examples/tree/main/http-pqc-j17"
},
+ {
+ "title": "HTTP with Post-Quantum Cryptography (PQC) (Java 21)",
+ "description": "Shows how to implement quantum-resistant TLS using Java 21 with BouncyCastle JSSE provider for native PQC support with hybrid cipher suites",
+ "link": "https://github.com/apache/camel-quarkus-examples/tree/main/http-pqc-j21"
+ },
{
"title": "HTTP with vanilla JAX-RS or with Camel `platform-http` component",
"description": "Shows how to create HTTP endpoints using either the RESTEasy",
diff --git a/fhir/pom.xml b/fhir/pom.xml
index 62430a38..51ad0e7c 100644
--- a/fhir/pom.xml
+++ b/fhir/pom.xml
@@ -22,19 +22,19 @@
camel-quarkus-examples-fhir
org.apache.camel.quarkus.examples
- 3.35.0
+ 3.36.0-SNAPSHOT
Camel Quarkus :: Examples :: FHIR
Camel Quarkus Example :: FHIR
3.35.1
- ${quarkus.platform.version}
+ 3.36.0-SNAPSHOT
- io.quarkus.platform
+ io.quarkus
quarkus-bom
- ${quarkus.platform.group-id}
- quarkus-camel-bom
+ org.apache.camel.quarkus
+ camel-quarkus-bom
UTF-8
UTF-8
diff --git a/fhir/src/main/kubernetes/kubernetes.yml b/fhir/src/main/kubernetes/kubernetes.yml
index 8502178a..9f3478c4 100644
--- a/fhir/src/main/kubernetes/kubernetes.yml
+++ b/fhir/src/main/kubernetes/kubernetes.yml
@@ -21,18 +21,18 @@ metadata:
name: fhir-server-deployment
labels:
app.kubernetes.io/name: camel-quarkus-examples-fhir
- app.kubernetes.io/version: 3.35.0
+ app.kubernetes.io/version: 3.36.0-SNAPSHOT
spec:
replicas: 1
selector:
matchLabels:
app.kubernetes.io/name: camel-quarkus-examples-fhir
- app.kubernetes.io/version: 3.35.0
+ app.kubernetes.io/version: 3.36.0-SNAPSHOT
template:
metadata:
labels:
app.kubernetes.io/name: camel-quarkus-examples-fhir
- app.kubernetes.io/version: 3.35.0
+ app.kubernetes.io/version: 3.36.0-SNAPSHOT
spec:
# Work around container permissions issues for /app/target
# https://github.com/hapifhir/hapi-fhir-jpaserver-starter/issues/519
@@ -99,7 +99,7 @@ kind: Service
metadata:
labels:
app.kubernetes.io/name: camel-quarkus-examples-fhir
- app.kubernetes.io/version: 3.35.0
+ app.kubernetes.io/version: 3.36.0-SNAPSHOT
name: fhir-server
spec:
ports:
@@ -108,5 +108,5 @@ spec:
targetPort: 8080
selector:
app.kubernetes.io/name: camel-quarkus-examples-fhir
- app.kubernetes.io/version: 3.35.0
+ app.kubernetes.io/version: 3.36.0-SNAPSHOT
type: ClusterIP
diff --git a/fhir/src/main/kubernetes/openshift.yml b/fhir/src/main/kubernetes/openshift.yml
index 055dcc45..b8a27de9 100644
--- a/fhir/src/main/kubernetes/openshift.yml
+++ b/fhir/src/main/kubernetes/openshift.yml
@@ -21,18 +21,18 @@ metadata:
name: fhir-server
labels:
app.kubernetes.io/name: camel-quarkus-examples-fhir
- app.kubernetes.io/version: 3.35.0
+ app.kubernetes.io/version: 3.36.0-SNAPSHOT
spec:
replicas: 1
selector:
matchLabels:
app.kubernetes.io/name: camel-quarkus-examples-fhir
- app.kubernetes.io/version: 3.35.0
+ app.kubernetes.io/version: 3.36.0-SNAPSHOT
template:
metadata:
labels:
app.kubernetes.io/name: camel-quarkus-examples-fhir
- app.kubernetes.io/version: 3.35.0
+ app.kubernetes.io/version: 3.36.0-SNAPSHOT
spec:
# Work around container permissions issues for /app/target
# https://github.com/hapifhir/hapi-fhir-jpaserver-starter/issues/519
@@ -99,7 +99,7 @@ kind: Service
metadata:
labels:
app.kubernetes.io/name: camel-quarkus-examples-fhir
- app.kubernetes.io/version: 3.35.0
+ app.kubernetes.io/version: 3.36.0-SNAPSHOT
name: fhir-server
spec:
ports:
@@ -108,5 +108,5 @@ spec:
targetPort: 8080
selector:
app.kubernetes.io/name: camel-quarkus-examples-fhir
- app.kubernetes.io/version: 3.35.0
+ app.kubernetes.io/version: 3.36.0-SNAPSHOT
type: ClusterIP
diff --git a/file-bindy-ftp/pom.xml b/file-bindy-ftp/pom.xml
index e29701da..6b35c646 100644
--- a/file-bindy-ftp/pom.xml
+++ b/file-bindy-ftp/pom.xml
@@ -22,19 +22,19 @@
camel-quarkus-examples-file-bindy-ftp
org.apache.camel.quarkus.examples
- 3.35.0
+ 3.36.0-SNAPSHOT
Camel Quarkus :: Examples :: File Bindy FTP
Camel Quarkus Example :: File Bindy FTP
3.35.1
- ${quarkus.platform.version}
+ 3.36.0-SNAPSHOT
- io.quarkus.platform
+ io.quarkus
quarkus-bom
- ${quarkus.platform.group-id}
- quarkus-camel-bom
+ org.apache.camel.quarkus
+ camel-quarkus-bom
UTF-8
UTF-8
diff --git a/file-bindy-ftp/src/main/kubernetes/kubernetes.yml b/file-bindy-ftp/src/main/kubernetes/kubernetes.yml
index a018e803..ca646267 100644
--- a/file-bindy-ftp/src/main/kubernetes/kubernetes.yml
+++ b/file-bindy-ftp/src/main/kubernetes/kubernetes.yml
@@ -21,18 +21,18 @@ metadata:
name: ssh-server-deployment
labels:
app.kubernetes.io/name: camel-quarkus-examples-file-bindy-ftp
- app.kubernetes.io/version: 3.35.0
+ app.kubernetes.io/version: 3.36.0-SNAPSHOT
spec:
replicas: 1
selector:
matchLabels:
app.kubernetes.io/name: camel-quarkus-examples-file-bindy-ftp
- app.kubernetes.io/version: 3.35.0
+ app.kubernetes.io/version: 3.36.0-SNAPSHOT
template:
metadata:
labels:
app.kubernetes.io/name: camel-quarkus-examples-file-bindy-ftp
- app.kubernetes.io/version: 3.35.0
+ app.kubernetes.io/version: 3.36.0-SNAPSHOT
spec:
containers:
- name: openssh-server
@@ -57,7 +57,7 @@ kind: Service
metadata:
labels:
app.kubernetes.io/name: camel-quarkus-examples-file-bindy-ftp
- app.kubernetes.io/version: 3.35.0
+ app.kubernetes.io/version: 3.36.0-SNAPSHOT
name: ftp-server
spec:
ports:
@@ -66,7 +66,7 @@ spec:
targetPort: 2222
selector:
app.kubernetes.io/name: camel-quarkus-examples-file-bindy-ftp
- app.kubernetes.io/version: 3.35.0
+ app.kubernetes.io/version: 3.36.0-SNAPSHOT
type: ClusterIP
---
apiVersion: v1
@@ -77,7 +77,7 @@ kind: Secret
metadata:
labels:
app.kubernetes.io/name: camel-quarkus-examples-file-bindy-ftp
- app.kubernetes.io/version: 3.35.0
+ app.kubernetes.io/version: 3.36.0-SNAPSHOT
name: ftp-credentials
type: Opaque
---
diff --git a/file-bindy-ftp/src/main/kubernetes/openshift.yml b/file-bindy-ftp/src/main/kubernetes/openshift.yml
index a018e803..ca646267 100644
--- a/file-bindy-ftp/src/main/kubernetes/openshift.yml
+++ b/file-bindy-ftp/src/main/kubernetes/openshift.yml
@@ -21,18 +21,18 @@ metadata:
name: ssh-server-deployment
labels:
app.kubernetes.io/name: camel-quarkus-examples-file-bindy-ftp
- app.kubernetes.io/version: 3.35.0
+ app.kubernetes.io/version: 3.36.0-SNAPSHOT
spec:
replicas: 1
selector:
matchLabels:
app.kubernetes.io/name: camel-quarkus-examples-file-bindy-ftp
- app.kubernetes.io/version: 3.35.0
+ app.kubernetes.io/version: 3.36.0-SNAPSHOT
template:
metadata:
labels:
app.kubernetes.io/name: camel-quarkus-examples-file-bindy-ftp
- app.kubernetes.io/version: 3.35.0
+ app.kubernetes.io/version: 3.36.0-SNAPSHOT
spec:
containers:
- name: openssh-server
@@ -57,7 +57,7 @@ kind: Service
metadata:
labels:
app.kubernetes.io/name: camel-quarkus-examples-file-bindy-ftp
- app.kubernetes.io/version: 3.35.0
+ app.kubernetes.io/version: 3.36.0-SNAPSHOT
name: ftp-server
spec:
ports:
@@ -66,7 +66,7 @@ spec:
targetPort: 2222
selector:
app.kubernetes.io/name: camel-quarkus-examples-file-bindy-ftp
- app.kubernetes.io/version: 3.35.0
+ app.kubernetes.io/version: 3.36.0-SNAPSHOT
type: ClusterIP
---
apiVersion: v1
@@ -77,7 +77,7 @@ kind: Secret
metadata:
labels:
app.kubernetes.io/name: camel-quarkus-examples-file-bindy-ftp
- app.kubernetes.io/version: 3.35.0
+ app.kubernetes.io/version: 3.36.0-SNAPSHOT
name: ftp-credentials
type: Opaque
---
diff --git a/file-split-log-xml/pom.xml b/file-split-log-xml/pom.xml
index 00825566..087396ae 100644
--- a/file-split-log-xml/pom.xml
+++ b/file-split-log-xml/pom.xml
@@ -22,19 +22,19 @@
camel-quarkus-examples-file-log-xml
org.apache.camel.quarkus.examples
- 3.35.0
+ 3.36.0-SNAPSHOT
Camel Quarkus :: Examples :: File To Log XML DSL
Camel Quarkus Example :: File To Log XML DSL
3.35.1
- ${quarkus.platform.version}
+ 3.36.0-SNAPSHOT
- io.quarkus.platform
+ io.quarkus
quarkus-bom
- ${quarkus.platform.group-id}
- quarkus-camel-bom
+ org.apache.camel.quarkus
+ camel-quarkus-bom
UTF-8
UTF-8
diff --git a/health/pom.xml b/health/pom.xml
index ba2c80a9..f9a4c2ba 100644
--- a/health/pom.xml
+++ b/health/pom.xml
@@ -22,19 +22,19 @@
camel-quarkus-examples-health
org.apache.camel.quarkus.examples
- 3.35.0
+ 3.36.0-SNAPSHOT
Camel Quarkus :: Examples :: Health
Camel Quarkus Example :: Health Check
3.35.1
- ${quarkus.platform.version}
+ 3.36.0-SNAPSHOT
- io.quarkus.platform
+ io.quarkus
quarkus-bom
- ${quarkus.platform.group-id}
- quarkus-camel-bom
+ org.apache.camel.quarkus
+ camel-quarkus-bom
UTF-8
UTF-8
diff --git a/http-log/pom.xml b/http-log/pom.xml
index 2b008240..12768a16 100644
--- a/http-log/pom.xml
+++ b/http-log/pom.xml
@@ -22,19 +22,19 @@
camel-quarkus-examples-http-log
org.apache.camel.quarkus.examples
- 3.35.0
+ 3.36.0-SNAPSHOT
Camel Quarkus :: Examples :: HTTP Log
Camel Quarkus Example :: HTTP to Log
3.35.1
- ${quarkus.platform.version}
+ 3.36.0-SNAPSHOT
- io.quarkus.platform
+ io.quarkus
quarkus-bom
- ${quarkus.platform.group-id}
- quarkus-camel-bom
+ org.apache.camel.quarkus
+ camel-quarkus-bom
UTF-8
UTF-8
diff --git a/http-pqc-j17/pom.xml b/http-pqc-j17/pom.xml
index c39e746f..93fc4ab7 100644
--- a/http-pqc-j17/pom.xml
+++ b/http-pqc-j17/pom.xml
@@ -22,19 +22,19 @@
camel-quarkus-examples-http-pqc-j17
org.apache.camel.quarkus.examples
- 3.35.0
+ 3.36.0-SNAPSHOT
Camel Quarkus :: Examples :: HTTP PQC
Camel Quarkus Example :: HTTP with Post-Quantum Cryptography
3.35.1
- ${quarkus.platform.version}
+ 3.36.0-SNAPSHOT
- io.quarkus.platform
+ io.quarkus
quarkus-bom
- ${quarkus.platform.group-id}
- quarkus-camel-bom
+ org.apache.camel.quarkus
+ camel-quarkus-bom
UTF-8
UTF-8
diff --git a/http-pqc-j21/README.adoc b/http-pqc-j21/README.adoc
new file mode 100644
index 00000000..f448948b
--- /dev/null
+++ b/http-pqc-j21/README.adoc
@@ -0,0 +1,300 @@
+= HTTP with Post-Quantum Cryptography (PQC): A Camel Quarkus example (Java 21)
+:cq-example-description: An example that shows how to implement quantum-resistant TLS using Java 21 with BouncyCastle JSSE provider for native PQC support
+
+{cq-description}
+
+This example demonstrates **native Post-Quantum Cryptography (PQC) support in TLS on Java 21** using BouncyCastle JSSE provider. Unlike the Java 17 example which requires application-level validation, this example uses TLS 1.3 with hybrid cipher suites that combine classical and post-quantum algorithms at the protocol level.
+
+TIP: Check the https://camel.apache.org/camel-quarkus/latest/first-steps.html[Camel Quarkus User guide] for prerequisites and other general information.
+
+== What is Post-Quantum Cryptography?
+
+Post-Quantum Cryptography (PQC) protects against "harvest now, decrypt later" attacks where adversaries capture encrypted data today to decrypt when quantum computers become available.
+
+=== Java 21 Native Approach
+
+**Java 21 with BouncyCastle JSSE** provides native PQC support through:
+
+* **TLS 1.3**: Modern protocol with built-in support for hybrid key exchange
+* **X25519MLKEM768**: Hybrid cipher suite combining classical X25519 with quantum-resistant ML-KEM-768
+* **BouncyCastle JSSE Provider**: Drop-in replacement for Java's default JSSE that adds PQC algorithms
+* **Standard TLS handshake**: No custom trust managers or application-level validation needed
+
+This is the **recommended approach** for production PQC deployments on Java 21+.
+
+=== Comparison with Java 17 Approach
+
+[cols="1,1,1"]
+|===
+|Feature |Java 17 (Application-Level) |Java 21 (Native TLS)
+
+|PQC Location
+|Application-level validation via custom X509TrustManager
+|Native TLS 1.3 protocol support
+
+|Certificate Type
+|Hybrid Chimera certificates (RSA + ML-DSA-65 signatures)
+|Standard X.509 certificates
+
+|Cipher Suite
+|Standard TLS, PQC validated separately
+|TLS_X25519MLKEM768 hybrid key exchange
+
+|Complexity
+|High - custom certificate generation, manual signature validation
+|Low - standard Quarkus SSL configuration
+
+|Protocol
+|TLS with manual PQC validation outside protocol
+|TLS 1.3 with PQC integrated into protocol
+
+|Production Ready
+|Workaround for Java 17 limitations
+|Recommended approach for Java 21+
+|===
+
+**Key Difference**: Java 21 handles PQC at the TLS protocol level, while Java 17 requires custom code to validate PQC signatures outside the TLS handshake.
+
+== How It Works
+
+=== Security Provider Registration
+
+The `SecurityConfiguration` class registers BouncyCastle JSSE as the primary security provider:
+
+[source,java]
+----
+Security.insertProviderAt(new BouncyCastleJsseProvider(), 1);
+----
+
+This enables TLS 1.3 with hybrid cipher suites (X25519MLKEM768) without any additional configuration.
+
+=== Hybrid Key Exchange (X25519MLKEM768)
+
+The TLS handshake uses a hybrid approach:
+
+1. **Classical Security**: X25519 elliptic-curve Diffie-Hellman key exchange
+2. **Quantum Resistance**: ML-KEM-768 (NIST FIPS 203) lattice-based key encapsulation
+
+Both algorithms must complete successfully for the connection to establish. If either fails, the handshake is rejected.
+
+=== Certificate Generation
+
+Self-signed certificates are auto-generated on startup in `target/certs/`:
+
+* `server-keystore.p12` - Server certificate and private key
+* `server-truststore.p12` - Truststore for validating clients
+* `client-keystore.p12` - Client certificate and private key
+* `client-truststore.p12` - Truststore for validating server
+
+NOTE: These are standard X.509 certificates. The PQC protection comes from the TLS 1.3 hybrid cipher suite (X25519MLKEM768), not from the certificates themselves.
+
+== Prerequisites
+
+* **Java 21** or later (this example requires Java 21+ for BouncyCastle JSSE PQC support)
+* Maven 3.9.9 or later
+* GraalVM (for native mode only)
+
+== Start in Development Mode
+
+[source,shell]
+----
+$ mvn clean compile quarkus:dev
+----
+
+The above command compiles the project, starts the application and lets the Quarkus tooling watch for changes in your workspace. Any modifications in your project will automatically take effect in the running application.
+
+TIP: Please refer to the Development mode section of https://camel.apache.org/camel-quarkus/latest/first-steps.html#_development_mode[Camel Quarkus User guide] for more details.
+
+The application starts on HTTPS port 8443 with mutual TLS (mTLS) enabled.
+
+Main endpoints:
+
+* `/pqc/secure` - Secure endpoint requiring client certificate
+* `/pqc/info` - Information about PQC configuration
+
+=== Manual Testing
+
+Test the secure endpoint with curl (requires client certificate):
+
+[source,shell]
+----
+$ curl --cert target/certs/client-keystore.p12:changeit \
+ --cert-type P12 \
+ -k \
+ https://localhost:8443/pqc/secure
+
+✓ PQC TLS connection established!
+
+Your connection is quantum-safe using Java 21 with BouncyCastle JSSE provider.
+This example demonstrates native PQC TLS support with hybrid cipher suites.
+
+TLS 1.3 with X25519MLKEM768 hybrid key exchange provides both:
+- Classical security via X25519 elliptic-curve cryptography
+- Quantum resistance via ML-KEM-768 (NIST FIPS 203)
+----
+
+Test the info endpoint:
+
+[source,shell]
+----
+$ curl --cert target/certs/client-keystore.p12:changeit \
+ --cert-type P12 \
+ -k \
+ https://localhost:8443/pqc/info
+
+Post-Quantum Cryptography Configuration
+======================================
+
+Java Version: 21.x.x
+Provider: BouncyCastle JSSE
+TLS Version: 1.3
+Hybrid Cipher Suite: X25519MLKEM768
+Classical Algorithm: X25519
+PQC Algorithm: ML-KEM-768 (NIST FIPS 203)
+
+This configuration provides protection against both classical and quantum attacks.
+----
+
+== Package and Run the Application
+
+Once you are done with developing you may want to package and run the application.
+
+TIP: Find more details about the JVM mode and Native mode in the Package and run section of https://camel.apache.org/camel-quarkus/latest/first-steps.html#_package_and_run_the_application[Camel Quarkus User guide]
+
+=== JVM Mode
+
+[source,shell]
+----
+$ mvn clean package
+$ java -jar target/quarkus-app/quarkus-run.jar
+...
+[io.quarkus] (main) camel-quarkus-examples-http-pqc-j21 started in 1.2s. Listening on: https://0.0.0.0:8443
+----
+
+=== Native Mode
+
+IMPORTANT: Native mode requires having GraalVM and other tools installed. Please check the Prerequisites section of https://camel.apache.org/camel-quarkus/latest/first-steps.html#_prerequisites[Camel Quarkus User guide].
+
+To prepare a native executable using GraalVM, run the following command:
+
+[source,shell]
+----
+$ mvn clean package -Dnative
+$ ./target/*-runner
+...
+[io.quarkus] (main) camel-quarkus-examples-http-pqc-j21 started in 0.012s. Listening on: https://0.0.0.0:8443
+...
+----
+
+== Testing
+
+Run the tests to verify PQC TLS functionality:
+
+[source,shell]
+----
+$ mvn clean test
+----
+
+The test suite validates:
+
+* Certificates are generated automatically on startup
+* `/pqc/secure` endpoint accepts requests with valid client certificates
+* `/pqc/secure` endpoint rejects requests without client certificates
+* `/pqc/info` endpoint provides PQC configuration information
+
+For native mode testing:
+
+[source,shell]
+----
+$ mvn clean verify -Dnative
+----
+
+== Architecture
+
+=== TLS 1.3 Hybrid Key Exchange
+
+[source]
+----
+Client Server
+ | |
+ | ClientHello (supported: X25519MLKEM768) |
+ |---------------------------------------------------------->|
+ | |
+ | ServerHello (chosen: X25519MLKEM768) |
+ |<----------------------------------------------------------|
+ | |
+ | Key Exchange: |
+ | - X25519: Classical ECDH key agreement |
+ | - ML-KEM-768: Post-quantum key encapsulation |
+ |<==========================================================>|
+ | |
+ | Both algorithms must succeed for connection to establish |
+ | |
+ | Encrypted Application Data (AES-256-GCM) |
+ |<==========================================================>|
+----
+
+The hybrid approach ensures:
+
+* **Backward compatibility**: If PQC is broken, X25519 still provides security
+* **Future security**: If X25519 is broken by quantum computers, ML-KEM-768 provides protection
+* **Defense in depth**: Attack must break BOTH algorithms simultaneously
+
+=== Comparison: Java 17 vs Java 21 Validation
+
+**Java 17 (Application-Level)**:
+[source]
+----
+TLS Handshake (Standard RSA)
+ ↓
+Custom X509TrustManager
+ ↓
+Application validates ML-DSA-65 signature manually
+ ↓
+Connection accepted/rejected
+----
+
+**Java 21 (Native TLS)**:
+[source]
+----
+TLS 1.3 Handshake with X25519MLKEM768
+ ↓
+Both X25519 and ML-KEM-768 validated by TLS protocol
+ ↓
+Connection accepted/rejected
+----
+
+== Important Notes
+
+* **Java 21 Required**: This example requires Java 21+ for BouncyCastle JSSE PQC support. For Java 17, see the `http-pqc-j17` example.
+
+* **BouncyCastle JSSE**: Uses BouncyCastle as JSSE provider for PQC algorithms. This is a drop-in replacement for Java's default JSSE.
+
+* **Development Only**: Certificates are regenerated on every startup. For production, use persistent certificates from a trusted CA.
+
+* **NIST Standards**: ML-KEM-768 is standardized in NIST FIPS 203 (August 2024). This is production-ready cryptography.
+
+* **Hybrid Approach**: X25519MLKEM768 combines classical and PQC algorithms for defense-in-depth security.
+
+== Migration Path
+
+If you're currently using the Java 17 example (`http-pqc-j17`):
+
+1. **Upgrade to Java 21**
+2. **Switch to this example** - much simpler implementation
+3. **Remove custom trust managers** - no longer needed
+4. **Use standard TLS 1.3 configuration** - PQC is built into the protocol
+5. **Enjoy native PQC support** - less code, better security
+
+The Java 21 approach is significantly simpler and provides better integration with the TLS protocol.
+
+== Additional Resources
+
+* https://csrc.nist.gov/pubs/fips/203/final[NIST FIPS 203 - ML-KEM Standard]
+* https://www.bouncycastle.org/java.html[BouncyCastle JSSE Provider Documentation]
+* https://datatracker.ietf.org/doc/draft-connolly-tls-mlkem-key-agreement/[IETF Draft - ML-KEM in TLS 1.3]
+* https://github.com/oscerd/camel-pqc-tls[Reference Implementation - Camel PQC TLS Examples]
+
+== Feedback and Contributions
+
+For issues or contributions, please submit to the https://github.com/apache/camel-quarkus-examples[Camel Quarkus Examples] repository.
diff --git a/http-pqc-j21/eclipse-formatter-config.xml b/http-pqc-j21/eclipse-formatter-config.xml
new file mode 100644
index 00000000..2248b2b8
--- /dev/null
+++ b/http-pqc-j21/eclipse-formatter-config.xml
@@ -0,0 +1,276 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/http-pqc-j21/pom.xml b/http-pqc-j21/pom.xml
new file mode 100644
index 00000000..86f8e6db
--- /dev/null
+++ b/http-pqc-j21/pom.xml
@@ -0,0 +1,308 @@
+
+
+
+ 4.0.0
+
+ camel-quarkus-examples-http-pqc-j21
+ org.apache.camel.quarkus.examples
+ 3.36.0-SNAPSHOT
+
+ Camel Quarkus :: Examples :: HTTP PQC Java 21
+ Camel Quarkus Example :: HTTP with Post-Quantum Cryptography on Java 21
+
+
+ 3.35.1
+ 3.36.0-SNAPSHOT
+
+ io.quarkus
+ quarkus-bom
+ org.apache.camel.quarkus
+ camel-quarkus-bom
+
+ UTF-8
+ UTF-8
+ 21
+
+ 2.29.0
+ 1.13.0
+ 5.0.0
+ 3.15.0
+ 3.5.0
+ 3.3.1
+ 3.5.5
+
+
+
+
+
+
+ ${quarkus.platform.group-id}
+ ${quarkus.platform.artifact-id}
+ ${quarkus.platform.version}
+ pom
+ import
+
+
+ ${camel-quarkus.platform.group-id}
+ ${camel-quarkus.platform.artifact-id}
+ ${camel-quarkus.platform.version}
+ pom
+ import
+
+
+
+
+
+
+ org.apache.camel.quarkus
+ camel-quarkus-log
+
+
+ org.apache.camel.quarkus
+ camel-quarkus-platform-http
+
+
+ org.apache.camel.quarkus
+ camel-quarkus-support-bouncycastle
+
+
+ org.bouncycastle
+ bctls-jdk18on
+ 1.84
+
+
+ org.apache.camel.quarkus
+ camel-quarkus-microprofile-health
+
+
+
+
+ io.quarkus
+ quarkus-junit5
+ test
+
+
+ io.rest-assured
+ rest-assured
+ test
+
+
+ org.awaitility
+ awaitility
+ test
+
+
+
+
+
+
+
+
+ net.revelc.code.formatter
+ formatter-maven-plugin
+ ${formatter-maven-plugin.version}
+
+ ${maven.multiModuleProjectDirectory}/eclipse-formatter-config.xml
+ LF
+
+
+
+
+ net.revelc.code
+ impsort-maven-plugin
+ ${impsort-maven-plugin.version}
+
+ java.,javax.,org.w3c.,org.xml.,junit.
+ true
+ true
+ java.,javax.,org.w3c.,org.xml.,junit.
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ ${maven-compiler-plugin.version}
+
+ true
+ true
+
+ -Xlint:unchecked
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-surefire-plugin
+ ${maven-surefire-plugin.version}
+
+ false
+
+ org.jboss.logmanager.LogManager
+
+
+
+
+
+ ${quarkus.platform.group-id}
+ quarkus-maven-plugin
+ ${quarkus.platform.version}
+ true
+
+
+
+ org.apache.maven.plugins
+ maven-failsafe-plugin
+ ${maven-surefire-plugin.version}
+
+
+
+ org.apache.maven.plugins
+ maven-jar-plugin
+ ${maven-jar-plugin.version}
+
+
+
+ com.mycila
+ license-maven-plugin
+ ${license-maven-plugin.version}
+
+ true
+ ${maven.multiModuleProjectDirectory}/header.txt
+
+ **/*.adoc
+ **/*.txt
+ **/LICENSE.txt
+ **/LICENSE
+ **/NOTICE.txt
+ **/NOTICE
+ **/README
+ **/pom.xml.versionsBackup
+ **/quarkus.log*
+ **/*.p12
+
+
+ SLASHSTAR_STYLE
+ CAMEL_PROPERTIES_STYLE
+ SLASHSTAR_STYLE
+
+
+ ${maven.multiModuleProjectDirectory}/license-properties-headerdefinition.xml
+
+
+
+
+
+
+
+
+ ${quarkus.platform.group-id}
+ quarkus-maven-plugin
+
+
+ build
+
+ build
+
+
+
+
+
+
+ net.revelc.code.formatter
+ formatter-maven-plugin
+
+
+ format
+
+ format
+
+ process-sources
+
+
+
+
+
+ net.revelc.code
+ impsort-maven-plugin
+
+
+ sort-imports
+
+ sort
+
+ process-sources
+
+
+
+
+
+ com.mycila
+ license-maven-plugin
+
+
+ license-format
+
+ format
+
+ process-sources
+
+
+
+
+
+
+
+
+ native
+
+
+ native
+
+
+
+ true
+
+
+
+
+ org.apache.maven.plugins
+ maven-failsafe-plugin
+
+
+
+ integration-test
+ verify
+
+
+
+ ${quarkus.native.enabled}
+
+
+
+
+
+
+
+
+
+
+
diff --git a/http-pqc-j21/src/main/java/org/acme/http/pqc/CertificateGenerator.java b/http-pqc-j21/src/main/java/org/acme/http/pqc/CertificateGenerator.java
new file mode 100644
index 00000000..3986d2d6
--- /dev/null
+++ b/http-pqc-j21/src/main/java/org/acme/http/pqc/CertificateGenerator.java
@@ -0,0 +1,134 @@
+/*
+ * 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.acme.http.pqc;
+
+import java.io.FileOutputStream;
+import java.math.BigInteger;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.nio.file.Paths;
+import java.security.KeyPair;
+import java.security.KeyPairGenerator;
+import java.security.KeyStore;
+import java.security.SecureRandom;
+import java.security.cert.Certificate;
+import java.security.cert.X509Certificate;
+import java.util.Date;
+
+import io.quarkus.runtime.Startup;
+import jakarta.enterprise.context.ApplicationScoped;
+import org.bouncycastle.asn1.x500.X500Name;
+import org.bouncycastle.asn1.x509.BasicConstraints;
+import org.bouncycastle.asn1.x509.Extension;
+import org.bouncycastle.cert.X509v3CertificateBuilder;
+import org.bouncycastle.cert.jcajce.JcaX509CertificateConverter;
+import org.bouncycastle.cert.jcajce.JcaX509v3CertificateBuilder;
+import org.bouncycastle.operator.ContentSigner;
+import org.bouncycastle.operator.jcajce.JcaContentSignerBuilder;
+import org.jboss.logging.Logger;
+
+@ApplicationScoped
+@Startup
+public class CertificateGenerator {
+
+ private static final Logger LOG = Logger.getLogger(CertificateGenerator.class);
+ private static final String KEYSTORE_PASSWORD = "changeit";
+ private static final String CERT_DIR = "target/certs";
+
+ public CertificateGenerator() {
+ try {
+ generateCertificates();
+ } catch (Exception e) {
+ throw new RuntimeException("Failed to generate PQC certificates", e);
+ }
+ }
+
+ private void generateCertificates() throws Exception {
+ Path certDir = Paths.get(CERT_DIR);
+ Files.createDirectories(certDir);
+
+ LOG.info("Generating PQC-ready certificates for Java 21...");
+
+ KeyPair serverKeyPair = generateKeyPair();
+ X509Certificate serverCert = generateCertificate(serverKeyPair, "CN=localhost,O=Camel Quarkus,C=US", true);
+
+ KeyPair clientKeyPair = generateKeyPair();
+ X509Certificate clientCert = generateCertificate(clientKeyPair, "CN=client,O=Camel Quarkus,C=US", false);
+
+ saveKeyStore(certDir.resolve("server-keystore.p12"), serverKeyPair, serverCert);
+ saveKeyStore(certDir.resolve("client-keystore.p12"), clientKeyPair, clientCert);
+
+ saveTrustStore(certDir.resolve("server-truststore.p12"), clientCert);
+ saveTrustStore(certDir.resolve("client-truststore.p12"), serverCert);
+
+ LOG.info("PQC certificates generated successfully in " + CERT_DIR);
+ }
+
+ private KeyPair generateKeyPair() throws Exception {
+ KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA", "BC");
+ keyPairGenerator.initialize(2048, new SecureRandom());
+ return keyPairGenerator.generateKeyPair();
+ }
+
+ private X509Certificate generateCertificate(KeyPair keyPair, String dn, boolean isCA) throws Exception {
+ long now = System.currentTimeMillis();
+ Date notBefore = new Date(now);
+ Date notAfter = new Date(now + 365L * 24 * 60 * 60 * 1000);
+
+ X500Name dnName = new X500Name(dn);
+ BigInteger serial = BigInteger.valueOf(now);
+
+ X509v3CertificateBuilder certBuilder = new JcaX509v3CertificateBuilder(
+ dnName,
+ serial,
+ notBefore,
+ notAfter,
+ dnName,
+ keyPair.getPublic());
+
+ certBuilder.addExtension(Extension.basicConstraints, true, new BasicConstraints(isCA));
+
+ ContentSigner signer = new JcaContentSignerBuilder("SHA256WithRSA")
+ .setProvider("BC")
+ .build(keyPair.getPrivate());
+
+ return new JcaX509CertificateConverter()
+ .setProvider("BC")
+ .getCertificate(certBuilder.build(signer));
+ }
+
+ private void saveKeyStore(Path path, KeyPair keyPair, X509Certificate cert) throws Exception {
+ KeyStore keyStore = KeyStore.getInstance("PKCS12", "BC");
+ keyStore.load(null, null);
+ keyStore.setKeyEntry("key", keyPair.getPrivate(), KEYSTORE_PASSWORD.toCharArray(),
+ new Certificate[] { cert });
+
+ try (FileOutputStream fos = new FileOutputStream(path.toFile())) {
+ keyStore.store(fos, KEYSTORE_PASSWORD.toCharArray());
+ }
+ }
+
+ private void saveTrustStore(Path path, X509Certificate cert) throws Exception {
+ KeyStore trustStore = KeyStore.getInstance("PKCS12", "BC");
+ trustStore.load(null, null);
+ trustStore.setCertificateEntry("cert", cert);
+
+ try (FileOutputStream fos = new FileOutputStream(path.toFile())) {
+ trustStore.store(fos, KEYSTORE_PASSWORD.toCharArray());
+ }
+ }
+}
diff --git a/http-pqc-j21/src/main/java/org/acme/http/pqc/PqcCamelRoute.java b/http-pqc-j21/src/main/java/org/acme/http/pqc/PqcCamelRoute.java
new file mode 100644
index 00000000..e5fb7674
--- /dev/null
+++ b/http-pqc-j21/src/main/java/org/acme/http/pqc/PqcCamelRoute.java
@@ -0,0 +1,58 @@
+/*
+ * 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.acme.http.pqc;
+
+import jakarta.enterprise.context.ApplicationScoped;
+import org.apache.camel.builder.endpoint.EndpointRouteBuilder;
+
+@ApplicationScoped
+public class PqcCamelRoute extends EndpointRouteBuilder {
+
+ @Override
+ public void configure() throws Exception {
+ from(platformHttp("/pqc/secure"))
+ .routeId("pqc-secure-route")
+ .log("Processing request with PQC-enabled TLS connection")
+ .setBody(constant(
+ "✓ PQC TLS connection established!\n\n" +
+ "Your connection is quantum-safe using Java 21 with BouncyCastle JSSE provider.\n" +
+ "This example demonstrates native PQC TLS support with hybrid cipher suites.\n\n" +
+ "TLS 1.3 with X25519MLKEM768 hybrid key exchange provides both:\n" +
+ "- Classical security via X25519 elliptic-curve cryptography\n" +
+ "- Quantum resistance via ML-KEM-768 (NIST FIPS 203)\n"))
+ .to(log("pqc-secure").showExchangePattern(false).showBodyType(false));
+
+ from(platformHttp("/pqc/info"))
+ .routeId("pqc-info-route")
+ .log("Providing PQC configuration information")
+ .process(exchange -> {
+ String info = String.format(
+ "Post-Quantum Cryptography Configuration\n" +
+ "======================================\n\n" +
+ "Java Version: %s\n" +
+ "Provider: BouncyCastle JSSE\n" +
+ "TLS Version: 1.3\n" +
+ "Hybrid Cipher Suite: X25519MLKEM768\n" +
+ "Classical Algorithm: X25519\n" +
+ "PQC Algorithm: ML-KEM-768 (NIST FIPS 203)\n\n" +
+ "This configuration provides protection against both classical and quantum attacks.",
+ System.getProperty("java.version"));
+ exchange.getMessage().setBody(info);
+ })
+ .to(log("pqc-info").showExchangePattern(false).showBodyType(false));
+ }
+}
diff --git a/http-pqc-j21/src/main/java/org/acme/http/pqc/SecurityConfiguration.java b/http-pqc-j21/src/main/java/org/acme/http/pqc/SecurityConfiguration.java
new file mode 100644
index 00000000..4fb4a71d
--- /dev/null
+++ b/http-pqc-j21/src/main/java/org/acme/http/pqc/SecurityConfiguration.java
@@ -0,0 +1,32 @@
+/*
+ * 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.acme.http.pqc;
+
+import java.security.Security;
+
+import io.quarkus.runtime.Startup;
+import jakarta.enterprise.context.ApplicationScoped;
+import org.bouncycastle.jsse.provider.BouncyCastleJsseProvider;
+
+@ApplicationScoped
+@Startup
+public class SecurityConfiguration {
+
+ public SecurityConfiguration() {
+ Security.insertProviderAt(new BouncyCastleJsseProvider(), 1);
+ }
+}
diff --git a/http-pqc-j21/src/main/resources/application.properties b/http-pqc-j21/src/main/resources/application.properties
new file mode 100644
index 00000000..330e2567
--- /dev/null
+++ b/http-pqc-j21/src/main/resources/application.properties
@@ -0,0 +1,53 @@
+## ---------------------------------------------------------------------------
+## 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.
+## ---------------------------------------------------------------------------
+#
+# Quarkus
+#
+quarkus.banner.enabled = false
+quarkus.log.file.enabled = true
+
+# HTTPS Configuration with PQC Support (Java 21 + BouncyCastle JSSE)
+quarkus.http.ssl-port = 8443
+quarkus.http.insecure-requests = disabled
+
+# Server keystore
+quarkus.http.ssl.certificate.key-store-file = target/certs/server-keystore.p12
+quarkus.http.ssl.certificate.key-store-password = changeit
+quarkus.http.ssl.certificate.key-store-file-type = PKCS12
+
+# Require client certificates
+quarkus.http.ssl.client-auth = required
+
+# Truststore for client certificate validation
+quarkus.http.ssl.certificate.trust-store-file = target/certs/server-truststore.p12
+quarkus.http.ssl.certificate.trust-store-password = changeit
+quarkus.http.ssl.certificate.trust-store-file-type = PKCS12
+
+# TLS 1.3 with PQC hybrid cipher suites
+# X25519MLKEM768 combines classical X25519 with quantum-resistant ML-KEM-768
+quarkus.http.ssl.protocols = TLSv1.3
+quarkus.http.ssl.cipher-suites = TLS_AES_256_GCM_SHA384,TLS_AES_128_GCM_SHA256
+
+#
+# Quarkus - Camel
+#
+quarkus.camel.health.enabled = true
+
+#
+# Camel
+#
+camel.context.name = quarkus-camel-example-http-pqc-j21
diff --git a/http-pqc-j21/src/test/java/org/acme/http/pqc/HttpPqcIT.java b/http-pqc-j21/src/test/java/org/acme/http/pqc/HttpPqcIT.java
new file mode 100644
index 00000000..2eb54b9e
--- /dev/null
+++ b/http-pqc-j21/src/test/java/org/acme/http/pqc/HttpPqcIT.java
@@ -0,0 +1,23 @@
+/*
+ * 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.acme.http.pqc;
+
+import io.quarkus.test.junit.QuarkusIntegrationTest;
+
+@QuarkusIntegrationTest
+class HttpPqcIT extends HttpPqcTest {
+}
diff --git a/http-pqc-j21/src/test/java/org/acme/http/pqc/HttpPqcTest.java b/http-pqc-j21/src/test/java/org/acme/http/pqc/HttpPqcTest.java
new file mode 100644
index 00000000..21dc52b5
--- /dev/null
+++ b/http-pqc-j21/src/test/java/org/acme/http/pqc/HttpPqcTest.java
@@ -0,0 +1,75 @@
+/*
+ * 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.acme.http.pqc;
+
+import java.io.File;
+
+import io.quarkus.test.junit.QuarkusTest;
+import io.restassured.RestAssured;
+import org.junit.jupiter.api.Test;
+
+import static io.restassured.RestAssured.given;
+import static org.hamcrest.CoreMatchers.containsString;
+import static org.junit.jupiter.api.Assertions.assertTrue;
+
+@QuarkusTest
+class HttpPqcTest {
+
+ @Test
+ void testCertificatesGenerated() {
+ File serverKeystore = new File("target/certs/server-keystore.p12");
+ File clientKeystore = new File("target/certs/client-keystore.p12");
+ File serverTruststore = new File("target/certs/server-truststore.p12");
+ File clientTruststore = new File("target/certs/client-truststore.p12");
+
+ assertTrue(serverKeystore.exists(), "Server keystore should be generated");
+ assertTrue(clientKeystore.exists(), "Client keystore should be generated");
+ assertTrue(serverTruststore.exists(), "Server truststore should be generated");
+ assertTrue(clientTruststore.exists(), "Client truststore should be generated");
+ }
+
+ @Test
+ void testPqcSecureEndpoint() {
+ RestAssured.keyStore("target/certs/client-keystore.p12", "changeit");
+ RestAssured.trustStore("target/certs/client-truststore.p12", "changeit");
+
+ given()
+ .when()
+ .get("/pqc/secure")
+ .then()
+ .statusCode(200)
+ .body(containsString("PQC TLS connection established"))
+ .body(containsString("quantum-safe"))
+ .body(containsString("ML-KEM-768"));
+ }
+
+ @Test
+ void testPqcInfoEndpoint() {
+ RestAssured.keyStore("target/certs/client-keystore.p12", "changeit");
+ RestAssured.trustStore("target/certs/client-truststore.p12", "changeit");
+
+ given()
+ .when()
+ .get("/pqc/info")
+ .then()
+ .statusCode(200)
+ .body(containsString("Post-Quantum Cryptography Configuration"))
+ .body(containsString("BouncyCastle JSSE"))
+ .body(containsString("ML-KEM-768"))
+ .body(containsString("X25519MLKEM768"));
+ }
+}
diff --git a/jdbc-datasource/pom.xml b/jdbc-datasource/pom.xml
index c877b413..0adb9597 100644
--- a/jdbc-datasource/pom.xml
+++ b/jdbc-datasource/pom.xml
@@ -21,17 +21,17 @@
4.0.0
org.apache.camel.quarkus.examples
camel-quarkus-examples-jdbc-datasource
- 3.35.0
+ 3.36.0-SNAPSHOT
Camel Quarkus :: Examples :: Jdbc - DatataSource - Log
Camel Quarkus Example :: Connect to Database using Datasource
3.35.1
- ${quarkus.platform.version}
+ 3.36.0-SNAPSHOT
- io.quarkus.platform
+ io.quarkus
quarkus-bom
- ${quarkus.platform.group-id}
- quarkus-camel-bom
+ org.apache.camel.quarkus
+ camel-quarkus-bom
2.29.0
1.13.0
diff --git a/jms-jpa/pom.xml b/jms-jpa/pom.xml
index 6342d19e..8273f6fe 100644
--- a/jms-jpa/pom.xml
+++ b/jms-jpa/pom.xml
@@ -21,18 +21,18 @@
4.0.0
org.apache.camel.quarkus.examples
camel-quarkus-examples-jms-jpa
- 3.35.0
+ 3.36.0-SNAPSHOT
Camel Quarkus :: Examples :: JMS JPA
Camel Quarkus Example :: JMS JPA
3.35.1
- ${quarkus.platform.version}
+ 3.36.0-SNAPSHOT
3.14.1
- io.quarkus.platform
+ io.quarkus
quarkus-bom
- ${quarkus.platform.group-id}
- quarkus-camel-bom
+ org.apache.camel.quarkus
+ camel-quarkus-bom
2.29.0
1.13.0
diff --git a/jpa-idempotent-repository/pom.xml b/jpa-idempotent-repository/pom.xml
index c76a81c2..4e4ad0ab 100644
--- a/jpa-idempotent-repository/pom.xml
+++ b/jpa-idempotent-repository/pom.xml
@@ -24,19 +24,19 @@
camel-quarkus-examples-jpa-idempotent-repository
org.apache.camel.quarkus.examples
- 3.35.0
+ 3.36.0-SNAPSHOT
Camel Quarkus :: Examples :: JPA Idempotent Repository
Camel Quarkus Example :: JPA Idempotent Repository
3.35.1
- ${quarkus.platform.version}
+ 3.36.0-SNAPSHOT
- io.quarkus.platform
+ io.quarkus
quarkus-bom
- ${quarkus.platform.group-id}
- quarkus-camel-bom
+ org.apache.camel.quarkus
+ camel-quarkus-bom
UTF-8
UTF-8
diff --git a/jpa-idempotent-repository/src/main/kubernetes/kubernetes.yml b/jpa-idempotent-repository/src/main/kubernetes/kubernetes.yml
index 21a50868..abc20bfd 100644
--- a/jpa-idempotent-repository/src/main/kubernetes/kubernetes.yml
+++ b/jpa-idempotent-repository/src/main/kubernetes/kubernetes.yml
@@ -21,18 +21,18 @@ metadata:
name: camel-quarkus-examples-mariadb-database-deployment
labels:
app.kubernetes.io/name: camel-quarkus-examples-mariadb-database
- app.kubernetes.io/version: 3.35.0
+ app.kubernetes.io/version: 3.36.0-SNAPSHOT
spec:
replicas: 1
selector:
matchLabels:
app.kubernetes.io/name: camel-quarkus-examples-mariadb-database
- app.kubernetes.io/version: 3.35.0
+ app.kubernetes.io/version: 3.36.0-SNAPSHOT
template:
metadata:
labels:
app.kubernetes.io/name: camel-quarkus-examples-mariadb-database
- app.kubernetes.io/version: 3.35.0
+ app.kubernetes.io/version: 3.36.0-SNAPSHOT
spec:
containers:
- name: mariadb-database
@@ -68,7 +68,7 @@ kind: Service
metadata:
labels:
app.kubernetes.io/name: camel-quarkus-examples-mariadb-database
- app.kubernetes.io/version: 3.35.0
+ app.kubernetes.io/version: 3.36.0-SNAPSHOT
name: mariadb-database
spec:
ports:
@@ -77,7 +77,7 @@ spec:
targetPort: 3306
selector:
app.kubernetes.io/name: camel-quarkus-examples-mariadb-database
- app.kubernetes.io/version: 3.35.0
+ app.kubernetes.io/version: 3.36.0-SNAPSHOT
type: ClusterIP
---
apiVersion: v1
@@ -85,7 +85,7 @@ kind: Secret
metadata:
labels:
app.kubernetes.io/name: camel-quarkus-examples-mariadb-database
- app.kubernetes.io/version: 3.35.0
+ app.kubernetes.io/version: 3.36.0-SNAPSHOT
name: mariadb-secret
type: Opaque
data:
diff --git a/jpa-idempotent-repository/src/main/kubernetes/openshift.yml b/jpa-idempotent-repository/src/main/kubernetes/openshift.yml
index faf49240..9e382356 100644
--- a/jpa-idempotent-repository/src/main/kubernetes/openshift.yml
+++ b/jpa-idempotent-repository/src/main/kubernetes/openshift.yml
@@ -21,18 +21,18 @@ metadata:
name: camel-quarkus-examples-mariadb-database-deployment
labels:
app.kubernetes.io/name: camel-quarkus-examples-mariadb-database
- app.kubernetes.io/version: 3.35.0
+ app.kubernetes.io/version: 3.36.0-SNAPSHOT
spec:
replicas: 1
selector:
matchLabels:
app.kubernetes.io/name: camel-quarkus-examples-mariadb-database
- app.kubernetes.io/version: 3.35.0
+ app.kubernetes.io/version: 3.36.0-SNAPSHOT
template:
metadata:
labels:
app.kubernetes.io/name: camel-quarkus-examples-mariadb-database
- app.kubernetes.io/version: 3.35.0
+ app.kubernetes.io/version: 3.36.0-SNAPSHOT
spec:
containers:
- name: mariadb-database
@@ -68,7 +68,7 @@ kind: Service
metadata:
labels:
app.kubernetes.io/name: camel-quarkus-examples-mariadb-database
- app.kubernetes.io/version: 3.35.0
+ app.kubernetes.io/version: 3.36.0-SNAPSHOT
name: mariadb-database
spec:
ports:
@@ -77,7 +77,7 @@ spec:
targetPort: 3306
selector:
app.kubernetes.io/name: camel-quarkus-examples-mariadb-database
- app.kubernetes.io/version: 3.35.0
+ app.kubernetes.io/version: 3.36.0-SNAPSHOT
type: ClusterIP
---
apiVersion: v1
@@ -85,7 +85,7 @@ kind: Secret
metadata:
labels:
app.kubernetes.io/name: camel-quarkus-examples-mariadb-database
- app.kubernetes.io/version: 3.35.0
+ app.kubernetes.io/version: 3.36.0-SNAPSHOT
name: mariadb-secret
type: Opaque
data:
@@ -104,7 +104,7 @@ spec:
metadata:
labels:
app.kubernetes.io/name: camel-quarkus-examples-jpa-idempotent-repository-flyway-init
- app.kubernetes.io/version: 3.35.0
+ app.kubernetes.io/version: 3.36.0-SNAPSHOT
spec:
containers:
- env:
diff --git a/jta-jpa/pom.xml b/jta-jpa/pom.xml
index f3ab00a2..b0f4af85 100644
--- a/jta-jpa/pom.xml
+++ b/jta-jpa/pom.xml
@@ -21,17 +21,17 @@
4.0.0
org.apache.camel.quarkus.examples
camel-quarkus-examples-jta-jpa
- 3.35.0
+ 3.36.0-SNAPSHOT
Camel Quarkus :: Examples :: JTA JPA
Camel Quarkus Example :: JTA JPA
3.35.1
- ${quarkus.platform.version}
+ 3.36.0-SNAPSHOT
- io.quarkus.platform
+ io.quarkus
quarkus-bom
- ${quarkus.platform.group-id}
- quarkus-camel-bom
+ org.apache.camel.quarkus
+ camel-quarkus-bom
2.29.0
1.13.0
diff --git a/kafka/pom.xml b/kafka/pom.xml
index bed56333..77e2832d 100644
--- a/kafka/pom.xml
+++ b/kafka/pom.xml
@@ -22,19 +22,19 @@
camel-quarkus-examples-kafka
org.apache.camel.quarkus.examples
- 3.35.0
+ 3.36.0-SNAPSHOT
Camel Quarkus :: Examples :: Kafka
Camel Quarkus Example :: Kafka
3.35.1
- ${quarkus.platform.version}
+ 3.36.0-SNAPSHOT
- io.quarkus.platform
+ io.quarkus
quarkus-bom
- ${quarkus.platform.group-id}
- quarkus-camel-bom
+ org.apache.camel.quarkus
+ camel-quarkus-bom
UTF-8
UTF-8
diff --git a/kamelet-chucknorris/pom.xml b/kamelet-chucknorris/pom.xml
index 31da1b05..b3fba9d3 100644
--- a/kamelet-chucknorris/pom.xml
+++ b/kamelet-chucknorris/pom.xml
@@ -22,19 +22,19 @@
camel-quarkus-examples-kamelet-chucknorris
org.apache.camel.quarkus.examples
- 3.35.0
+ 3.36.0-SNAPSHOT
Camel Quarkus :: Examples :: Kamelet Chuck Norris
Camel Quarkus Example :: Kamelet Chuck Norris
3.35.1
- ${quarkus.platform.version}
+ 3.36.0-SNAPSHOT
- io.quarkus.platform
+ io.quarkus
quarkus-bom
- ${quarkus.platform.group-id}
- quarkus-camel-bom
+ org.apache.camel.quarkus
+ camel-quarkus-bom
UTF-8
UTF-8
diff --git a/message-bridge/pom.xml b/message-bridge/pom.xml
index 616ce35f..aded99e1 100644
--- a/message-bridge/pom.xml
+++ b/message-bridge/pom.xml
@@ -22,19 +22,19 @@
camel-quarkus-examples-message-bridge
org.apache.camel.quarkus.examples
- 3.35.0
+ 3.36.0-SNAPSHOT
Camel Quarkus :: Examples :: Message Bridge
Camel Quarkus Example :: Configure XA Transactions and connection pooling
3.35.1
- ${quarkus.platform.version}
+ 3.36.0-SNAPSHOT
- io.quarkus.platform
+ io.quarkus
quarkus-bom
- ${quarkus.platform.group-id}
- quarkus-camel-bom
+ org.apache.camel.quarkus
+ camel-quarkus-bom
UTF-8
UTF-8
diff --git a/netty-custom-correlation/pom.xml b/netty-custom-correlation/pom.xml
index 09592d11..0de92cd2 100644
--- a/netty-custom-correlation/pom.xml
+++ b/netty-custom-correlation/pom.xml
@@ -22,19 +22,19 @@
camel-quarkus-examples-netty-custom-correlation
org.apache.camel.quarkus.examples
- 3.35.0
+ 3.36.0-SNAPSHOT
Camel Quarkus :: Examples :: Communication with Netty over TCP
Camel Quarkus Example :: Communication with Netty over TCP
3.35.1
- ${quarkus.platform.version}
+ 3.36.0-SNAPSHOT
- io.quarkus.platform
+ io.quarkus
quarkus-bom
- ${quarkus.platform.group-id}
- quarkus-camel-bom
+ org.apache.camel.quarkus
+ camel-quarkus-bom
UTF-8
UTF-8
diff --git a/observability/pom.xml b/observability/pom.xml
index 026f7146..004c116d 100644
--- a/observability/pom.xml
+++ b/observability/pom.xml
@@ -22,7 +22,7 @@
camel-quarkus-examples-observability
org.apache.camel.quarkus.examples
- 3.35.0
+ 3.36.0-SNAPSHOT
Camel Quarkus :: Examples :: Observability
Camel Quarkus Example :: Observability
@@ -30,12 +30,12 @@
3.35.1
- ${quarkus.platform.version}
+ 3.36.0-SNAPSHOT
- io.quarkus.platform
+ io.quarkus
quarkus-bom
- ${quarkus.platform.group-id}
- quarkus-camel-bom
+ org.apache.camel.quarkus
+ camel-quarkus-bom
UTF-8
UTF-8
diff --git a/openapi-contract-first/pom.xml b/openapi-contract-first/pom.xml
index 4b450a23..d0a6489b 100644
--- a/openapi-contract-first/pom.xml
+++ b/openapi-contract-first/pom.xml
@@ -22,19 +22,19 @@
camel-quarkus-examples-examples-openapi-contract-first
org.apache.camel.quarkus.examples
- 3.35.0
+ 3.36.0-SNAPSHOT
Camel Quarkus :: Examples :: openapi-contract-first
Camel Quarkus Example :: openapi-contract-first
3.35.1
- ${quarkus.platform.version}
+ 3.36.0-SNAPSHOT
- io.quarkus.platform
+ io.quarkus
quarkus-bom
- ${quarkus.platform.group-id}
- quarkus-camel-bom
+ org.apache.camel.quarkus
+ camel-quarkus-bom
UTF-8
UTF-8
diff --git a/platform-http-security-keycloak/pom.xml b/platform-http-security-keycloak/pom.xml
index 47fdf7ad..f1b39c77 100644
--- a/platform-http-security-keycloak/pom.xml
+++ b/platform-http-security-keycloak/pom.xml
@@ -22,19 +22,19 @@
camel-quarkus-examples-platform-http-security-keycloak
org.apache.camel.quarkus.examples
- 3.35.0
+ 3.36.0-SNAPSHOT
Camel Quarkus :: Examples :: Platform HTTP Security Keycloak
Camel Quarkus Example :: Platform HTTP Security Keycloak
3.35.1
- ${quarkus.platform.version}
+ 3.36.0-SNAPSHOT
- io.quarkus.platform
+ io.quarkus
quarkus-bom
- ${quarkus.platform.group-id}
- quarkus-camel-bom
+ org.apache.camel.quarkus
+ camel-quarkus-bom
UTF-8
UTF-8
diff --git a/quarkus-rest-json/pom.xml b/quarkus-rest-json/pom.xml
index af51ae77..18466600 100644
--- a/quarkus-rest-json/pom.xml
+++ b/quarkus-rest-json/pom.xml
@@ -22,19 +22,19 @@
camel-quarkus-examples-rest-json
org.apache.camel.quarkus.examples
- 3.35.0
+ 3.36.0-SNAPSHOT
Camel Quarkus :: Examples :: Quarkus Rest Json
Camel Quarkus Example :: Quarkus Rest Json
3.35.1
- ${quarkus.platform.version}
+ 3.36.0-SNAPSHOT
- io.quarkus.platform
+ io.quarkus
quarkus-bom
- ${quarkus.platform.group-id}
- quarkus-camel-bom
+ org.apache.camel.quarkus
+ camel-quarkus-bom
UTF-8
UTF-8
diff --git a/rest-json/pom.xml b/rest-json/pom.xml
index 3a973797..afeb8a94 100644
--- a/rest-json/pom.xml
+++ b/rest-json/pom.xml
@@ -22,19 +22,19 @@
camel-quarkus-examples-rest-json
org.apache.camel.quarkus.examples
- 3.35.0
+ 3.36.0-SNAPSHOT
Camel Quarkus :: Examples :: Rest Json
Camel Quarkus Example :: Rest Json
3.35.1
- ${quarkus.platform.version}
+ 3.36.0-SNAPSHOT
- io.quarkus.platform
+ io.quarkus
quarkus-bom
- ${quarkus.platform.group-id}
- quarkus-camel-bom
+ org.apache.camel.quarkus
+ camel-quarkus-bom
UTF-8
UTF-8
diff --git a/saga/pom.xml b/saga/pom.xml
index 4dd8619e..04c88370 100644
--- a/saga/pom.xml
+++ b/saga/pom.xml
@@ -22,7 +22,7 @@
camel-quarkus-examples-saga
org.apache.camel.quarkus.examples
- 3.35.0
+ 3.36.0-SNAPSHOT
Camel Quarkus :: Examples :: Saga
Camel Quarkus Example :: Saga
@@ -30,13 +30,13 @@
3.35.1
- ${quarkus.platform.version}
+ 3.36.0-SNAPSHOT
3.14.1
- io.quarkus.platform
+ io.quarkus
quarkus-bom
- ${quarkus.platform.group-id}
- quarkus-camel-bom
+ org.apache.camel.quarkus
+ camel-quarkus-bom
UTF-8
UTF-8
diff --git a/saga/saga-app/pom.xml b/saga/saga-app/pom.xml
index 678f04b7..83e1e392 100644
--- a/saga/saga-app/pom.xml
+++ b/saga/saga-app/pom.xml
@@ -24,7 +24,7 @@
camel-quarkus-examples-saga
org.apache.camel.quarkus.examples
- 3.35.0
+ 3.36.0-SNAPSHOT
camel-quarkus-example-saga-app
diff --git a/saga/saga-flight-service/pom.xml b/saga/saga-flight-service/pom.xml
index 163e8c74..e94a9b9b 100644
--- a/saga/saga-flight-service/pom.xml
+++ b/saga/saga-flight-service/pom.xml
@@ -24,7 +24,7 @@
camel-quarkus-examples-saga
org.apache.camel.quarkus.examples
- 3.35.0
+ 3.36.0-SNAPSHOT
camel-quarkus-example-saga-flight
diff --git a/saga/saga-integration-tests/pom.xml b/saga/saga-integration-tests/pom.xml
index 2e3d3f0e..979a840c 100644
--- a/saga/saga-integration-tests/pom.xml
+++ b/saga/saga-integration-tests/pom.xml
@@ -24,7 +24,7 @@
camel-quarkus-examples-saga
org.apache.camel.quarkus.examples
- 3.35.0
+ 3.36.0-SNAPSHOT
camel-quarkus-example-saga-integration-tests
diff --git a/saga/saga-payment-service/pom.xml b/saga/saga-payment-service/pom.xml
index 501aaebe..b5b594e4 100644
--- a/saga/saga-payment-service/pom.xml
+++ b/saga/saga-payment-service/pom.xml
@@ -24,7 +24,7 @@
camel-quarkus-examples-saga
org.apache.camel.quarkus.examples
- 3.35.0
+ 3.36.0-SNAPSHOT
camel-quarkus-example-saga-payment
diff --git a/saga/saga-train-service/pom.xml b/saga/saga-train-service/pom.xml
index 9334e5cd..f7b6c742 100644
--- a/saga/saga-train-service/pom.xml
+++ b/saga/saga-train-service/pom.xml
@@ -24,7 +24,7 @@
camel-quarkus-examples-saga
org.apache.camel.quarkus.examples
- 3.35.0
+ 3.36.0-SNAPSHOT
camel-quarkus-example-saga-train
diff --git a/spring-redis/pom.xml b/spring-redis/pom.xml
index a97b92c1..63e55c67 100644
--- a/spring-redis/pom.xml
+++ b/spring-redis/pom.xml
@@ -22,19 +22,19 @@
camel-quarkus-examples-spring-redis
org.apache.camel.quarkus.examples
- 3.35.0
+ 3.36.0-SNAPSHOT
Camel Quarkus :: Examples :: spring-redis
Camel Quarkus Example :: Send and receive messages from Redis
3.35.1
- ${quarkus.platform.version}
+ 3.36.0-SNAPSHOT
- io.quarkus.platform
+ io.quarkus
quarkus-bom
- ${quarkus.platform.group-id}
- quarkus-camel-bom
+ org.apache.camel.quarkus
+ camel-quarkus-bom
UTF-8
UTF-8
diff --git a/timer-log-main/pom.xml b/timer-log-main/pom.xml
index 3e4bf044..a5bdbcd6 100644
--- a/timer-log-main/pom.xml
+++ b/timer-log-main/pom.xml
@@ -22,19 +22,19 @@
camel-quarkus-examples-timer-log-main
org.apache.camel.quarkus.examples
- 3.35.0
+ 3.36.0-SNAPSHOT
Camel Quarkus :: Examples :: Timer Log Main
Camel Quarkus Example :: Timer to Log Main
3.35.1
- ${quarkus.platform.version}
+ 3.36.0-SNAPSHOT
- io.quarkus.platform
+ io.quarkus
quarkus-bom
- ${quarkus.platform.group-id}
- quarkus-camel-bom
+ org.apache.camel.quarkus
+ camel-quarkus-bom
UTF-8
UTF-8
diff --git a/timer-log/pom.xml b/timer-log/pom.xml
index 7acf3063..c2ad1fb7 100644
--- a/timer-log/pom.xml
+++ b/timer-log/pom.xml
@@ -22,19 +22,19 @@
camel-quarkus-examples-timer-log
org.apache.camel.quarkus.examples
- 3.35.0
+ 3.36.0-SNAPSHOT
Camel Quarkus :: Examples :: Timer Log
Camel Quarkus Example :: Timer to Log
3.35.1
- ${quarkus.platform.version}
+ 3.36.0-SNAPSHOT
- io.quarkus.platform
+ io.quarkus
quarkus-bom
- ${quarkus.platform.group-id}
- quarkus-camel-bom
+ org.apache.camel.quarkus
+ camel-quarkus-bom
UTF-8
UTF-8
diff --git a/variables/pom.xml b/variables/pom.xml
index 7f412413..b081907c 100644
--- a/variables/pom.xml
+++ b/variables/pom.xml
@@ -22,19 +22,19 @@
camel-quarkus-examples-variables
org.apache.camel.quarkus.examples
- 3.35.0
+ 3.36.0-SNAPSHOT
Camel Quarkus :: Examples :: Variables
Camel Quarkus Example :: Variables
3.35.1
- ${quarkus.platform.version}
+ 3.36.0-SNAPSHOT
- io.quarkus.platform
+ io.quarkus
quarkus-bom
- ${quarkus.platform.group-id}
- quarkus-camel-bom
+ org.apache.camel.quarkus
+ camel-quarkus-bom
UTF-8
UTF-8
diff --git a/vertx-websocket-chat/pom.xml b/vertx-websocket-chat/pom.xml
index f25c5e01..86fd710a 100644
--- a/vertx-websocket-chat/pom.xml
+++ b/vertx-websocket-chat/pom.xml
@@ -22,19 +22,19 @@
camel-quarkus-examples-vertx-websocket-chat
org.apache.camel.quarkus.examples
- 3.35.0
+ 3.36.0-SNAPSHOT
Camel Quarkus :: Examples :: Vertx-Websocket chat
Camel Quarkus Example :: Implementing Websocket
3.35.1
- ${quarkus.platform.version}
+ 3.36.0-SNAPSHOT
- io.quarkus.platform
+ io.quarkus
quarkus-bom
- ${quarkus.platform.group-id}
- quarkus-camel-bom
+ org.apache.camel.quarkus
+ camel-quarkus-bom
UTF-8
UTF-8