diff --git a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/as2.json b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/as2.json index c1bdb573241c4..9d279ce2cdcc0 100644 --- a/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/as2.json +++ b/catalog/camel-catalog/src/generated/resources/org/apache/camel/catalog/components/as2.json @@ -41,7 +41,7 @@ "compressionAlgorithm": { "index": 8, "kind": "parameter", "displayName": "Compression Algorithm", "group": "common", "label": "", "required": false, "type": "object", "javaType": "org.apache.camel.component.as2.api.AS2CompressionAlgorithm", "enum": [ "ZLIB" ], "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.as2.AS2Configuration", "configurationField": "configuration", "description": "The algorithm used to compress EDI message." }, "dispositionNotificationTo": { "index": 9, "kind": "parameter", "displayName": "Disposition Notification To", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.as2.AS2Configuration", "configurationField": "configuration", "description": "The value of the Disposition-Notification-To header. Assigning a value to this parameter requests a message disposition notification (MDN) for the AS2 message." }, "ediMessageTransferEncoding": { "index": 10, "kind": "parameter", "displayName": "Edi Message Transfer Encoding", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.as2.AS2Configuration", "configurationField": "configuration", "description": "The transfer encoding of EDI message." }, - "ediMessageType": { "index": 11, "kind": "parameter", "displayName": "Edi Message Type", "group": "common", "label": "", "required": false, "type": "object", "javaType": "org.apache.http.entity.ContentType", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.as2.AS2Configuration", "configurationField": "configuration", "description": "The content type of EDI message. One of application\/edifact, application\/edi-x12, application\/edi-consent, application\/xml" }, + "ediMessageType": { "index": 11, "kind": "parameter", "displayName": "Edi Message Type", "group": "common", "label": "", "required": false, "type": "object", "javaType": "org.apache.hc.core5.http.ContentType", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.as2.AS2Configuration", "configurationField": "configuration", "description": "The content type of EDI message. One of application\/edifact, application\/edi-x12, application\/edi-consent, application\/xml" }, "from": { "index": 12, "kind": "parameter", "displayName": "From", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.as2.AS2Configuration", "configurationField": "configuration", "description": "The value of the From header of AS2 message." }, "hostnameVerifier": { "index": 13, "kind": "parameter", "displayName": "Hostname Verifier", "group": "common", "label": "", "required": false, "type": "object", "javaType": "javax.net.ssl.HostnameVerifier", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.as2.AS2Configuration", "configurationField": "configuration", "description": "Set hostname verifier for SSL session." }, "httpConnectionPoolSize": { "index": 14, "kind": "parameter", "displayName": "Http Connection Pool Size", "group": "common", "label": "", "required": false, "type": "integer", "javaType": "java.lang.Integer", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "5", "configurationClass": "org.apache.camel.component.as2.AS2Configuration", "configurationField": "configuration", "description": "The maximum size of the connection pool for http connections (client only)" }, @@ -72,11 +72,11 @@ "validateSigningCertificateChain": { "index": 39, "kind": "parameter", "displayName": "Validate Signing Certificate Chain", "group": "security", "label": "security", "required": false, "type": "object", "javaType": "java.security.cert.Certificate[]", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.as2.AS2Configuration", "configurationField": "configuration", "description": "Certificates to validate the message's signature against. If not supplied, validation will not take place. Server: validates the received message. Client: not yet implemented, should validate the MDN" } }, "apis": { - "client": { "consumerOnly": false, "producerOnly": true, "description": "Sends EDI Messages over HTTP", "methods": { "send": { "description": "Send ediMessage to trading partner", "signatures": [ "org.apache.http.protocol.HttpCoreContext send(String ediMessage, String requestUri, String subject, String from, String as2From, String as2To, org.apache.camel.component.as2.api.AS2MessageStructure as2MessageStructure, org.apache.http.entity.ContentType ediMessageContentType, String ediMessageTransferEncoding, org.apache.camel.component.as2.api.AS2SignatureAlgorithm signingAlgorithm, java.security.cert.Certificate[] signingCertificateChain, java.security.PrivateKey signingPrivateKey, org.apache.camel.component.as2.api.AS2CompressionAlgorithm compressionAlgorithm, String dispositionNotificationTo, String[] signedReceiptMicAlgorithms, org.apache.camel.component.as2.api.AS2EncryptionAlgorithm encryptingAlgorithm, java.security.cert.Certificate[] encryptingCertificateChain, String attachedFileName)" ] } } }, - "server": { "consumerOnly": true, "producerOnly": false, "description": "Receives EDI Messages over HTTP", "methods": { "listen": { "description": "", "signatures": [ "void listen(String requestUriPattern, org.apache.http.protocol.HttpRequestHandler handler)" ] } } } + "client": { "consumerOnly": false, "producerOnly": true, "description": "Sends EDI Messages over HTTP", "methods": { "send": { "description": "Send ediMessage to trading partner", "signatures": [ "org.apache.hc.core5.http.protocol.HttpCoreContext send(String ediMessage, String requestUri, String subject, String from, String as2From, String as2To, org.apache.camel.component.as2.api.AS2MessageStructure as2MessageStructure, org.apache.hc.core5.http.ContentType ediMessageContentType, String ediMessageTransferEncoding, org.apache.camel.component.as2.api.AS2SignatureAlgorithm signingAlgorithm, java.security.cert.Certificate[] signingCertificateChain, java.security.PrivateKey signingPrivateKey, org.apache.camel.component.as2.api.AS2CompressionAlgorithm compressionAlgorithm, String dispositionNotificationTo, String[] signedReceiptMicAlgorithms, org.apache.camel.component.as2.api.AS2EncryptionAlgorithm encryptingAlgorithm, java.security.cert.Certificate[] encryptingCertificateChain, String attachedFileName)" ] } } }, + "server": { "consumerOnly": true, "producerOnly": false, "description": "Receives EDI Messages over HTTP", "methods": { "listen": { "description": "", "signatures": [ "void listen(String requestUriPattern, org.apache.hc.core5.http.io.HttpRequestHandler handler)" ] } } } }, "apiProperties": { - "client": { "methods": { "send": { "properties": { "as2From": { "index": 0, "kind": "parameter", "displayName": "As2 From", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "AS2 name of sender", "optional": false }, "as2MessageStructure": { "index": 1, "kind": "parameter", "displayName": "As2 Message Structure", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "org.apache.camel.component.as2.api.AS2MessageStructure", "enum": [ "PLAIN", "SIGNED", "ENCRYPTED", "SIGNED_ENCRYPTED", "PLAIN_COMPRESSED", "SIGNED_COMPRESSED", "ENCRYPTED_COMPRESSED", "ENCRYPTED_COMPRESSED_SIGNED" ], "deprecated": false, "autowired": false, "secret": false, "description": "The structure of AS2 to send; see AS2MessageStructure", "optional": false }, "as2To": { "index": 2, "kind": "parameter", "displayName": "As2 To", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "AS2 name of recipient", "optional": false }, "attachedFileName": { "index": 3, "kind": "parameter", "displayName": "Attached File Name", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The name of the attached file or null if user doesn't want to specify it", "optional": true }, "compressionAlgorithm": { "index": 4, "kind": "parameter", "displayName": "Compression Algorithm", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "org.apache.camel.component.as2.api.AS2CompressionAlgorithm", "enum": [ "ZLIB" ], "deprecated": false, "autowired": false, "secret": false, "description": "The algorithm used to compress the message or null if sending EDI message uncompressed", "optional": true }, "dispositionNotificationTo": { "index": 5, "kind": "parameter", "displayName": "Disposition Notification To", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "An RFC2822 address to request a receipt or null if no receipt requested", "optional": true }, "ediMessage": { "index": 6, "kind": "parameter", "displayName": "Edi Message", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "EDI message to transport", "optional": false }, "ediMessageContentType": { "index": 7, "kind": "parameter", "displayName": "Edi Message Content Type", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "org.apache.http.entity.ContentType", "deprecated": false, "autowired": false, "secret": false, "description": "The content type of EDI message", "optional": false }, "ediMessageTransferEncoding": { "index": 8, "kind": "parameter", "displayName": "Edi Message Transfer Encoding", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The transfer encoding used to transport EDI message", "optional": true }, "encryptingAlgorithm": { "index": 9, "kind": "parameter", "displayName": "Encrypting Algorithm", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "org.apache.camel.component.as2.api.AS2EncryptionAlgorithm", "enum": [ "AES128_CBC", "AES192_CBC", "AES256_CBC", "AES128_CCM", "AES192_CCM", "AES256_CCM", "AES128_GCM", "AES192_GCM", "AES256_GCM", "CAMELLIA128_CBC", "CAMELLIA192_CBC", "CAMELLIA256_CBC", "CAST5_CBC", "DES_CBC", "DES_EDE3_CBC", "GOST28147_GCFB", "IDEA_CBC", "RC2_CBC", "RC4", "SEED_CBC" ], "deprecated": false, "autowired": false, "secret": false, "description": "The algorithm used to encrypt the message or null if sending EDI message unencrypted", "optional": true }, "encryptingCertificateChain": { "index": 10, "kind": "parameter", "displayName": "Encrypting Certificate Chain", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "java.security.cert.Certificate[]", "deprecated": false, "autowired": false, "secret": false, "description": "The chain of certificates used to encrypt the message or null if sending EDI message unencrypted", "optional": true }, "from": { "index": 11, "kind": "parameter", "displayName": "From", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "RFC2822 address of sender", "optional": false }, "requestUri": { "index": 12, "kind": "parameter", "displayName": "Request Uri", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Resource location to deliver message", "optional": false }, "signedReceiptMicAlgorithms": { "index": 13, "kind": "parameter", "displayName": "Signed Receipt Mic Algorithms", "group": "producer", "label": "", "required": false, "type": "array", "javaType": "java.lang.String[]", "deprecated": false, "autowired": false, "secret": false, "description": "The senders list of signing algorithms for signing receipt, in preferred order, or null if requesting an unsigned receipt.", "optional": true }, "signingAlgorithm": { "index": 14, "kind": "parameter", "displayName": "Signing Algorithm", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "org.apache.camel.component.as2.api.AS2SignatureAlgorithm", "enum": [ "SHA3_224WITHRSA", "SHA3_256WITHRSA", "SHA3_384withRSA", "SHA3_512WITHRSA", "MD5WITHRSA", "SHA1WITHRSA", "MD2WITHRSA", "SHA224WITHRSA", "SHA256WITHRSA", "SHA384WITHRSA", "SHA512WITHRSA", "RIPEMD128WITHRSA", "RIPEMD160WITHRSA", "RIPEMD256WITHRSA", "SHA224WITHDSA", "SHA256WITHDSA", "SHA384WITHDSA", "SHA512WITHDSA", "SHA3_224WITHDSA", "SHA3_256WITHDSA", "SHA3_384WITHDSA", "SHA3_512WITHDSA", "SHA1WITHDSA", "SHA3_224WITHECDSA", "SHA3_256WITHECDSA", "SHA3_384WITHECDSA", "SHA3_512WITHECDSA", "SHA1WITHECDSA", "SHA224WITHECDSA", "SHA256WITHECDSA", "SHA384WITHECDSA", "SHA512WITHECDSA", "SHA1WITHPLAIN_ECDSA", "SHA224WITHPLAIN_ECDSA", "SHA256WITHPLAIN_ECDSA", "SHA384WITHPLAIN_ECDSA", "SHA512WITHPLAIN_ECDSA", "RIPEMD160WITHPLAIN_ECDSA", "SHA1WITHRSAANDMGF1", "SHA224WITHRSAANDMGF1", "SHA256WITHRSAANDMGF1", "SHA384WITHRSAANDMGF1", "SHA512WITHRSAANDMGF1", "SHA3_224WITHRSAANDMGF1", "SHA3_256WITHRSAANDMGF1", "SHA3_384WITHRSAANDMGF1", "SHA3_512WITHRSAANDMGF1" ], "deprecated": false, "autowired": false, "secret": false, "description": "The algorithm used to sign the message or null if sending EDI message unsigned", "optional": true }, "signingCertificateChain": { "index": 15, "kind": "parameter", "displayName": "Signing Certificate Chain", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "java.security.cert.Certificate[]", "deprecated": false, "autowired": false, "secret": false, "description": "The chain of certificates used to sign the message or null if sending EDI message unsigned", "optional": true }, "signingPrivateKey": { "index": 16, "kind": "parameter", "displayName": "Signing Private Key", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "java.security.PrivateKey", "deprecated": false, "autowired": false, "secret": false, "description": "The private key used to sign EDI message", "optional": true }, "subject": { "index": 17, "kind": "parameter", "displayName": "Subject", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Message subject", "optional": false } } } } }, + "client": { "methods": { "send": { "properties": { "as2From": { "index": 0, "kind": "parameter", "displayName": "As2 From", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "AS2 name of sender", "optional": false }, "as2MessageStructure": { "index": 1, "kind": "parameter", "displayName": "As2 Message Structure", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "org.apache.camel.component.as2.api.AS2MessageStructure", "enum": [ "PLAIN", "SIGNED", "ENCRYPTED", "SIGNED_ENCRYPTED", "PLAIN_COMPRESSED", "SIGNED_COMPRESSED", "ENCRYPTED_COMPRESSED", "ENCRYPTED_COMPRESSED_SIGNED" ], "deprecated": false, "autowired": false, "secret": false, "description": "The structure of AS2 to send; see AS2MessageStructure", "optional": false }, "as2To": { "index": 2, "kind": "parameter", "displayName": "As2 To", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "AS2 name of recipient", "optional": false }, "attachedFileName": { "index": 3, "kind": "parameter", "displayName": "Attached File Name", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The name of the attached file or null if user doesn't want to specify it", "optional": true }, "compressionAlgorithm": { "index": 4, "kind": "parameter", "displayName": "Compression Algorithm", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "org.apache.camel.component.as2.api.AS2CompressionAlgorithm", "enum": [ "ZLIB" ], "deprecated": false, "autowired": false, "secret": false, "description": "The algorithm used to compress the message or null if sending EDI message uncompressed", "optional": true }, "dispositionNotificationTo": { "index": 5, "kind": "parameter", "displayName": "Disposition Notification To", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "An RFC2822 address to request a receipt or null if no receipt requested", "optional": true }, "ediMessage": { "index": 6, "kind": "parameter", "displayName": "Edi Message", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "EDI message to transport", "optional": false }, "ediMessageContentType": { "index": 7, "kind": "parameter", "displayName": "Edi Message Content Type", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "org.apache.hc.core5.http.ContentType", "deprecated": false, "autowired": false, "secret": false, "description": "The content type of EDI message", "optional": false }, "ediMessageTransferEncoding": { "index": 8, "kind": "parameter", "displayName": "Edi Message Transfer Encoding", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The transfer encoding used to transport EDI message", "optional": true }, "encryptingAlgorithm": { "index": 9, "kind": "parameter", "displayName": "Encrypting Algorithm", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "org.apache.camel.component.as2.api.AS2EncryptionAlgorithm", "enum": [ "AES128_CBC", "AES192_CBC", "AES256_CBC", "AES128_CCM", "AES192_CCM", "AES256_CCM", "AES128_GCM", "AES192_GCM", "AES256_GCM", "CAMELLIA128_CBC", "CAMELLIA192_CBC", "CAMELLIA256_CBC", "CAST5_CBC", "DES_CBC", "DES_EDE3_CBC", "GOST28147_GCFB", "IDEA_CBC", "RC2_CBC", "RC4", "SEED_CBC" ], "deprecated": false, "autowired": false, "secret": false, "description": "The algorithm used to encrypt the message or null if sending EDI message unencrypted", "optional": true }, "encryptingCertificateChain": { "index": 10, "kind": "parameter", "displayName": "Encrypting Certificate Chain", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "java.security.cert.Certificate[]", "deprecated": false, "autowired": false, "secret": false, "description": "The chain of certificates used to encrypt the message or null if sending EDI message unencrypted", "optional": true }, "from": { "index": 11, "kind": "parameter", "displayName": "From", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "RFC2822 address of sender", "optional": false }, "requestUri": { "index": 12, "kind": "parameter", "displayName": "Request Uri", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Resource location to deliver message", "optional": false }, "signedReceiptMicAlgorithms": { "index": 13, "kind": "parameter", "displayName": "Signed Receipt Mic Algorithms", "group": "producer", "label": "", "required": false, "type": "array", "javaType": "java.lang.String[]", "deprecated": false, "autowired": false, "secret": false, "description": "The senders list of signing algorithms for signing receipt, in preferred order, or null if requesting an unsigned receipt.", "optional": true }, "signingAlgorithm": { "index": 14, "kind": "parameter", "displayName": "Signing Algorithm", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "org.apache.camel.component.as2.api.AS2SignatureAlgorithm", "enum": [ "SHA3_224WITHRSA", "SHA3_256WITHRSA", "SHA3_384withRSA", "SHA3_512WITHRSA", "MD5WITHRSA", "SHA1WITHRSA", "MD2WITHRSA", "SHA224WITHRSA", "SHA256WITHRSA", "SHA384WITHRSA", "SHA512WITHRSA", "RIPEMD128WITHRSA", "RIPEMD160WITHRSA", "RIPEMD256WITHRSA", "SHA224WITHDSA", "SHA256WITHDSA", "SHA384WITHDSA", "SHA512WITHDSA", "SHA3_224WITHDSA", "SHA3_256WITHDSA", "SHA3_384WITHDSA", "SHA3_512WITHDSA", "SHA1WITHDSA", "SHA3_224WITHECDSA", "SHA3_256WITHECDSA", "SHA3_384WITHECDSA", "SHA3_512WITHECDSA", "SHA1WITHECDSA", "SHA224WITHECDSA", "SHA256WITHECDSA", "SHA384WITHECDSA", "SHA512WITHECDSA", "SHA1WITHPLAIN_ECDSA", "SHA224WITHPLAIN_ECDSA", "SHA256WITHPLAIN_ECDSA", "SHA384WITHPLAIN_ECDSA", "SHA512WITHPLAIN_ECDSA", "RIPEMD160WITHPLAIN_ECDSA", "SHA1WITHRSAANDMGF1", "SHA224WITHRSAANDMGF1", "SHA256WITHRSAANDMGF1", "SHA384WITHRSAANDMGF1", "SHA512WITHRSAANDMGF1", "SHA3_224WITHRSAANDMGF1", "SHA3_256WITHRSAANDMGF1", "SHA3_384WITHRSAANDMGF1", "SHA3_512WITHRSAANDMGF1" ], "deprecated": false, "autowired": false, "secret": false, "description": "The algorithm used to sign the message or null if sending EDI message unsigned", "optional": true }, "signingCertificateChain": { "index": 15, "kind": "parameter", "displayName": "Signing Certificate Chain", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "java.security.cert.Certificate[]", "deprecated": false, "autowired": false, "secret": false, "description": "The chain of certificates used to sign the message or null if sending EDI message unsigned", "optional": true }, "signingPrivateKey": { "index": 16, "kind": "parameter", "displayName": "Signing Private Key", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "java.security.PrivateKey", "deprecated": false, "autowired": false, "secret": false, "description": "The private key used to sign EDI message", "optional": true }, "subject": { "index": 17, "kind": "parameter", "displayName": "Subject", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Message subject", "optional": false } } } } }, "server": { "methods": { "listen": { "properties": { "requestUriPattern": { "index": 0, "kind": "parameter", "displayName": "Request Uri Pattern", "group": "consumer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "", "optional": false } } } } } } } diff --git a/components/camel-as2/camel-as2-api/pom.xml b/components/camel-as2/camel-as2-api/pom.xml index 68ac95a6b1d66..7c573613d9d9a 100644 --- a/components/camel-as2/camel-as2-api/pom.xml +++ b/components/camel-as2/camel-as2-api/pom.xml @@ -69,14 +69,9 @@ - org.apache.httpcomponents - httpcore - ${httpcore4-version} - - - org.apache.httpcomponents - httpmime - ${httpclient4-version} + org.apache.httpcomponents.client5 + httpclient5 + ${httpclient-version} diff --git a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/AS2AsynchronousMDNManager.java b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/AS2AsynchronousMDNManager.java index 6b4addf8f612c..f7d8d2ff62a5f 100644 --- a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/AS2AsynchronousMDNManager.java +++ b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/AS2AsynchronousMDNManager.java @@ -19,7 +19,6 @@ import java.io.IOException; import java.net.Socket; import java.net.URI; -import java.net.URISyntaxException; import java.security.PrivateKey; import java.security.cert.Certificate; @@ -27,23 +26,26 @@ import org.apache.camel.component.as2.api.protocol.RequestAsynchronousMDN; import org.apache.camel.component.as2.api.util.EntityUtils; import org.apache.camel.util.ObjectHelper; -import org.apache.http.HttpException; -import org.apache.http.HttpHost; -import org.apache.http.HttpRequest; -import org.apache.http.HttpResponse; -import org.apache.http.client.utils.URIBuilder; -import org.apache.http.impl.DefaultBHttpClientConnection; -import org.apache.http.message.BasicHttpEntityEnclosingRequest; -import org.apache.http.protocol.HttpCoreContext; -import org.apache.http.protocol.HttpProcessor; -import org.apache.http.protocol.HttpProcessorBuilder; -import org.apache.http.protocol.HttpRequestExecutor; -import org.apache.http.protocol.RequestConnControl; -import org.apache.http.protocol.RequestContent; -import org.apache.http.protocol.RequestDate; -import org.apache.http.protocol.RequestExpectContinue; -import org.apache.http.protocol.RequestTargetHost; -import org.apache.http.protocol.RequestUserAgent; +import org.apache.hc.client5.http.impl.io.ManagedHttpClientConnectionFactory; +import org.apache.hc.client5.http.io.ManagedHttpClientConnection; +import org.apache.hc.core5.http.ClassicHttpRequest; +import org.apache.hc.core5.http.ClassicHttpResponse; +import org.apache.hc.core5.http.HttpException; +import org.apache.hc.core5.http.HttpResponse; +import org.apache.hc.core5.http.config.Http1Config; +import org.apache.hc.core5.http.impl.io.HttpRequestExecutor; +import org.apache.hc.core5.http.io.HttpClientConnection; +import org.apache.hc.core5.http.io.HttpConnectionFactory; +import org.apache.hc.core5.http.message.BasicClassicHttpRequest; +import org.apache.hc.core5.http.protocol.HttpCoreContext; +import org.apache.hc.core5.http.protocol.HttpProcessor; +import org.apache.hc.core5.http.protocol.HttpProcessorBuilder; +import org.apache.hc.core5.http.protocol.RequestConnControl; +import org.apache.hc.core5.http.protocol.RequestContent; +import org.apache.hc.core5.http.protocol.RequestDate; +import org.apache.hc.core5.http.protocol.RequestExpectContinue; +import org.apache.hc.core5.http.protocol.RequestTargetHost; +import org.apache.hc.core5.http.protocol.RequestUserAgent; public class AS2AsynchronousMDNManager { @@ -99,7 +101,7 @@ public AS2AsynchronousMDNManager(String as2Version, // Build Processor httpProcessor = HttpProcessorBuilder.create().add(new RequestAsynchronousMDN(as2Version, senderFQDN)) .add(new RequestTargetHost()).add(new RequestUserAgent(userAgent)).add(new RequestDate()) - .add(new RequestContent(true)).add(new RequestConnControl()).add(new RequestExpectContinue(true)) + .add(new RequestContent(true)).add(new RequestConnControl()).add(new RequestExpectContinue()) .build(); } @@ -110,33 +112,21 @@ public HttpCoreContext send( ObjectHelper.notNull(mdn, "mdn"); ObjectHelper.notNull(recipientDeliveryAddress, "recipientDeliveryAddress"); - URI uri = null; - try { - URIBuilder uriBuilder = new URIBuilder(recipientDeliveryAddress); - uri = uriBuilder.build(); - - } catch (URISyntaxException e) { - throw new HttpException("Invalid recipient delivery address URL", e); - } - - String requestUri = buildRequestURI(uri); + URI uri = URI.create(recipientDeliveryAddress); int buffSize = 8 * 1024; - try (DefaultBHttpClientConnection httpConnection = new DefaultBHttpClientConnection(buffSize)) { - - HttpHost targetHost = new HttpHost(uri.getHost(), uri.getPort(), uri.getScheme()); + Http1Config h1Config = Http1Config.custom().setBufferSize(buffSize).build(); + HttpConnectionFactory connFactory + = ManagedHttpClientConnectionFactory.builder().http1Config(h1Config).build(); - // Create socket and bind to connection; - Socket socket = new Socket(targetHost.getHostName(), targetHost.getPort()); - httpConnection.bind(socket); + try (HttpClientConnection httpConnection = connFactory.createConnection(new Socket(uri.getHost(), uri.getPort()))) { // Add Context attributes HttpCoreContext httpContext = HttpCoreContext.create(); - httpContext.setTargetHost(targetHost); httpContext.setAttribute(RECIPIENT_ADDRESS, recipientDeliveryAddress); - BasicHttpEntityEnclosingRequest request = new BasicHttpEntityEnclosingRequest("POST", requestUri); + ClassicHttpRequest request = new BasicClassicHttpRequest("POST", uri); request.setHeader(AS2Header.CONTENT_TYPE, mdn.getMainMessageContentType()); httpContext.setAttribute(HttpCoreContext.HTTP_REQUEST, request); mdn.setMainBody(true); @@ -157,31 +147,16 @@ public HttpCoreContext send( } } - private HttpResponse send(DefaultBHttpClientConnection httpConnection, HttpRequest request, HttpCoreContext httpContext) + private HttpResponse send(HttpClientConnection httpConnection, ClassicHttpRequest request, HttpCoreContext httpContext) throws HttpException, IOException { // Execute Request - HttpRequestExecutor httpexecutor = new HttpRequestExecutor(); - httpexecutor.preProcess(request, httpProcessor, httpContext); - HttpResponse response = httpexecutor.execute(request, httpConnection, httpContext); - httpexecutor.postProcess(response, httpProcessor, httpContext); + HttpRequestExecutor httpExecutor = new HttpRequestExecutor(); + httpExecutor.preProcess(request, httpProcessor, httpContext); + ClassicHttpResponse response = httpExecutor.execute(request, httpConnection, httpContext); + httpExecutor.postProcess(response, httpProcessor, httpContext); return response; } - private String buildRequestURI(URI uri) { - StringBuilder sb = new StringBuilder(); - if (uri.getPath() != null) { - sb.append(uri.getPath()); - } - if (uri.getQuery() != null) { - sb.append('?'); - sb.append(uri.getQuery()); - } - if (uri.getFragment() != null) { - sb.append('#'); - sb.append(uri.getFragment()); - } - return sb.toString(); - } } diff --git a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/AS2ClientConnection.java b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/AS2ClientConnection.java index e3ea423a36a56..7cbf23c6b97df 100644 --- a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/AS2ClientConnection.java +++ b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/AS2ClientConnection.java @@ -21,7 +21,7 @@ import java.time.Duration; import java.util.UUID; import java.util.concurrent.ExecutionException; -import java.util.concurrent.TimeUnit; +import java.util.concurrent.TimeoutException; import javax.net.ssl.HostnameVerifier; import javax.net.ssl.SSLContext; @@ -31,39 +31,48 @@ import org.apache.camel.component.as2.api.protocol.RequestAS2; import org.apache.camel.component.as2.api.protocol.RequestMDN; import org.apache.camel.util.ObjectHelper; -import org.apache.http.Header; -import org.apache.http.HeaderElement; -import org.apache.http.HttpClientConnection; -import org.apache.http.HttpException; -import org.apache.http.HttpHost; -import org.apache.http.HttpRequest; -import org.apache.http.HttpResponse; -import org.apache.http.config.Registry; -import org.apache.http.config.RegistryBuilder; -import org.apache.http.config.SocketConfig; -import org.apache.http.conn.ConnectionKeepAliveStrategy; -import org.apache.http.conn.HttpConnectionFactory; -import org.apache.http.conn.ManagedHttpClientConnection; -import org.apache.http.conn.routing.HttpRoute; -import org.apache.http.conn.socket.ConnectionSocketFactory; -import org.apache.http.conn.socket.PlainConnectionSocketFactory; -import org.apache.http.conn.ssl.SSLConnectionSocketFactory; -import org.apache.http.impl.conn.PoolingHttpClientConnectionManager; -import org.apache.http.protocol.HTTP; -import org.apache.http.protocol.HttpCoreContext; -import org.apache.http.protocol.HttpProcessor; -import org.apache.http.protocol.HttpProcessorBuilder; -import org.apache.http.protocol.HttpRequestExecutor; -import org.apache.http.protocol.RequestConnControl; -import org.apache.http.protocol.RequestContent; -import org.apache.http.protocol.RequestDate; -import org.apache.http.protocol.RequestExpectContinue; -import org.apache.http.protocol.RequestTargetHost; -import org.apache.http.protocol.RequestUserAgent; +import org.apache.hc.client5.http.ConnectionKeepAliveStrategy; +import org.apache.hc.client5.http.HttpRoute; +import org.apache.hc.client5.http.config.ConnectionConfig; +import org.apache.hc.client5.http.impl.io.ManagedHttpClientConnectionFactory; +import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManager; +import org.apache.hc.client5.http.impl.io.PoolingHttpClientConnectionManagerBuilder; +import org.apache.hc.client5.http.io.ConnectionEndpoint; +import org.apache.hc.client5.http.io.LeaseRequest; +import org.apache.hc.client5.http.io.ManagedHttpClientConnection; +import org.apache.hc.client5.http.socket.ConnectionSocketFactory; +import org.apache.hc.client5.http.socket.PlainConnectionSocketFactory; +import org.apache.hc.client5.http.ssl.SSLConnectionSocketFactory; +import org.apache.hc.core5.http.*; +import org.apache.hc.core5.http.ClassicHttpRequest; +import org.apache.hc.core5.http.ClassicHttpResponse; +import org.apache.hc.core5.http.Header; +import org.apache.hc.core5.http.HttpHost; +import org.apache.hc.core5.http.config.Http1Config; +import org.apache.hc.core5.http.config.Registry; +import org.apache.hc.core5.http.config.RegistryBuilder; +import org.apache.hc.core5.http.impl.io.HttpRequestExecutor; +import org.apache.hc.core5.http.io.HttpClientConnection; +import org.apache.hc.core5.http.io.HttpConnectionFactory; +import org.apache.hc.core5.http.io.SocketConfig; +import org.apache.hc.core5.http.message.MessageSupport; +import org.apache.hc.core5.http.protocol.HttpContext; +import org.apache.hc.core5.http.protocol.HttpCoreContext; +import org.apache.hc.core5.http.protocol.HttpProcessor; +import org.apache.hc.core5.http.protocol.HttpProcessorBuilder; +import org.apache.hc.core5.http.protocol.RequestConnControl; +import org.apache.hc.core5.http.protocol.RequestContent; +import org.apache.hc.core5.http.protocol.RequestDate; +import org.apache.hc.core5.http.protocol.RequestExpectContinue; +import org.apache.hc.core5.http.protocol.RequestTargetHost; +import org.apache.hc.core5.http.protocol.RequestUserAgent; +import org.apache.hc.core5.net.URIAuthority; +import org.apache.hc.core5.util.TimeValue; +import org.apache.hc.core5.util.Timeout; public class AS2ClientConnection { - private static final int RETRIEVE_FROM_CONNECTION_POOL_TIMEOUT_SECONDS = 5; + private static final int RETRIEVE_CONNECTION_TIMEOUT_SECONDS = 5; private HttpHost targetHost; private HttpProcessor httpProcessor; @@ -83,9 +92,9 @@ public AS2ClientConnection(String as2Version, String userAgent, String clientFqd this.userAgent = ObjectHelper.notNull(userAgent, "userAgent"); this.clientFqdn = ObjectHelper.notNull(clientFqdn, "clientFqdn"); this.targetHost = new HttpHost( + sslContext != null ? "https" : "http", ObjectHelper.notNull(targetHostName, "targetHostName"), - ObjectHelper.notNull(targetPortNumber, "targetPortNumber"), - sslContext != null ? "https" : "http"); + ObjectHelper.notNull(targetPortNumber, "targetPortNumber")); ObjectHelper.notNull(socketTimeout, "socketTimeout"); this.connectionTimeoutMilliseconds = (int) ObjectHelper.notNull(connectionTimeout, "connectionTimeout").toMillis(); ObjectHelper.notNull(connectionPoolMaxSize, "connectionPoolMaxSize"); @@ -100,13 +109,22 @@ public AS2ClientConnection(String as2Version, String userAgent, String clientFqd .add(new RequestDate()) .add(new RequestContent(true)) .add(new RequestConnControl()) - .add(new RequestExpectContinue(true)).build(); + .add(new RequestExpectContinue()).build(); - HttpConnectionFactory connFactory - = (route, config) -> new AS2BHttpClientConnection(UUID.randomUUID().toString(), 8 * 1024); + final Http1Config h1Config = Http1Config.custom().setBufferSize(8 * 1024).build(); + + HttpConnectionFactory connFactory + = new ManagedHttpClientConnectionFactory(h1Config, null, null) { + @Override + public ManagedHttpClientConnection createConnection(final Socket socket) throws IOException { + ManagedHttpClientConnection mc = super.createConnection(socket); + return new AS2BHttpClientConnection(mc); + } + }; if (sslContext == null) { - connectionPoolManager = new PoolingHttpClientConnectionManager(connFactory); + connectionPoolManager = PoolingHttpClientConnectionManagerBuilder.create() + .setConnectionFactory(connFactory).build(); } else { SSLConnectionSocketFactory sslConnectionSocketFactory; if (hostnameVerifier == null) { @@ -121,23 +139,27 @@ public AS2ClientConnection(String as2Version, String userAgent, String clientFqd connectionPoolManager = new PoolingHttpClientConnectionManager(socketFactoryRegistry, connFactory); } connectionPoolManager.setMaxTotal(connectionPoolMaxSize); - connectionPoolManager.setSocketConfig(targetHost, + connectionPoolManager.setDefaultSocketConfig( SocketConfig.copy(SocketConfig.DEFAULT) - .setSoTimeout((int) socketTimeout.toMillis()) + .setSoTimeout(Timeout.ofSeconds(socketTimeout.getSeconds())) + .build()); + connectionPoolManager.setDefaultConnectionConfig( + ConnectionConfig.custom() + .setConnectTimeout(Timeout.ofMilliseconds(connectionTimeoutMilliseconds)) .build()); connectionKeepAliveStrategy = (response, context) -> { - int ttl = (int) connectionPoolTtl.toMillis(); - for (Header h : response.getAllHeaders()) { - if (HTTP.CONN_DIRECTIVE.equalsIgnoreCase(h.getName())) { - if (HTTP.CONN_CLOSE.equalsIgnoreCase(h.getValue())) { - ttl = -1; + TimeValue ttl = TimeValue.of(connectionPoolTtl); + for (Header h : response.getHeaders()) { + if (AS2Header.CONNECTION.equalsIgnoreCase(h.getName())) { + if (AS2Header.CLOSE.equalsIgnoreCase(h.getValue())) { + ttl = TimeValue.NEG_ONE_MILLISECOND; } } - if (HTTP.CONN_KEEP_ALIVE.equalsIgnoreCase(h.getName())) { - HeaderElement headerElement = h.getElements()[0]; + if (AS2Header.KEEP_ALIVE.equalsIgnoreCase(h.getName())) { + HeaderElement headerElement = MessageSupport.parse(h)[0]; if (headerElement.getValue() != null && "timeout".equalsIgnoreCase(headerElement.getName())) { - ttl = Integer.parseInt(headerElement.getValue()) * 1000; + ttl = TimeValue.ofSeconds(Long.parseLong(headerElement.getValue())); } } } @@ -145,14 +167,7 @@ public AS2ClientConnection(String as2Version, String userAgent, String clientFqd }; // Check if a connection can be established - try (AS2BHttpClientConnection testConnection = new AS2BHttpClientConnection("test", 8 * 1024)) { - if (sslContext == null) { - testConnection.bind(new Socket(targetHost.getHostName(), targetHost.getPort())); - } else { - SSLSocketFactory factory = sslContext.getSocketFactory(); - testConnection.bind(factory.createSocket(targetHost.getHostName(), targetHost.getPort())); - } - } + createTestConnection(sslContext, connFactory).close(); } @@ -168,29 +183,46 @@ public String getClientFqdn() { return clientFqdn; } - public HttpResponse send(HttpRequest request, HttpCoreContext httpContext) - throws HttpException, IOException, InterruptedException, ExecutionException { + public HttpResponse send(ClassicHttpRequest request, HttpCoreContext httpContext) + throws HttpException, IOException, InterruptedException, ExecutionException, TimeoutException { HttpRoute route = new HttpRoute(targetHost); - httpContext.setTargetHost(targetHost); + request.setAuthority(new URIAuthority(targetHost)); - HttpClientConnection httpConnection = connectionPoolManager.requestConnection(route, null) - .get(RETRIEVE_FROM_CONNECTION_POOL_TIMEOUT_SECONDS, TimeUnit.SECONDS); - if (!httpConnection.isOpen()) { - connectionPoolManager.connect(httpConnection, route, connectionTimeoutMilliseconds, httpContext); + LeaseRequest leaseRequest = connectionPoolManager.lease(UUID.randomUUID().toString(), route, null); + ConnectionEndpoint endpoint = leaseRequest.get(Timeout.ofSeconds(RETRIEVE_CONNECTION_TIMEOUT_SECONDS)); + if (!endpoint.isConnected()) { + connectionPoolManager.connect(endpoint, TimeValue.ofMilliseconds(connectionTimeoutMilliseconds), httpContext); } // Execute Request - HttpRequestExecutor httpexecutor = new HttpRequestExecutor(); - httpexecutor.preProcess(request, httpProcessor, httpContext); - HttpResponse response = httpexecutor.execute(request, httpConnection, httpContext); - httpexecutor.postProcess(response, httpProcessor, httpContext); - connectionPoolManager.routeComplete(httpConnection, route, httpContext); - connectionPoolManager.releaseConnection(httpConnection, null, - connectionKeepAliveStrategy.getKeepAliveDuration(response, httpContext), TimeUnit.MILLISECONDS); + HttpRequestExecutor httpExecutor = new HttpRequestExecutor() { + @Override + public ClassicHttpResponse execute(ClassicHttpRequest request, HttpClientConnection conn, HttpContext context) + throws IOException, HttpException { + super.preProcess(request, httpProcessor, context); + ClassicHttpResponse response = super.execute(request, conn, context); + super.postProcess(response, httpProcessor, context); + return response; + } + }; + + HttpResponse response = endpoint.execute(UUID.randomUUID().toString(), request, httpExecutor, httpContext); + connectionPoolManager.release(endpoint, null, + connectionKeepAliveStrategy.getKeepAliveDuration(response, httpContext)); return response; } + private HttpConnection createTestConnection( + SSLContext sslContext, HttpConnectionFactory connFactory) + throws IOException { + if (sslContext == null) { + return connFactory.createConnection(new Socket(targetHost.getHostName(), targetHost.getPort())); + } else { + SSLSocketFactory factory = sslContext.getSocketFactory(); + return connFactory.createConnection(factory.createSocket(targetHost.getHostName(), targetHost.getPort())); + } + } } diff --git a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/AS2ClientManager.java b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/AS2ClientManager.java index 9ae7c8d919588..e407c301284f9 100644 --- a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/AS2ClientManager.java +++ b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/AS2ClientManager.java @@ -21,6 +21,7 @@ import java.security.PrivateKey; import java.security.cert.Certificate; import java.util.concurrent.ExecutionException; +import java.util.concurrent.TimeoutException; import org.apache.camel.component.as2.api.entity.ApplicationEntity; import org.apache.camel.component.as2.api.entity.ApplicationPkcs7MimeCompressedDataEntity; @@ -32,11 +33,12 @@ import org.apache.camel.component.as2.api.util.EntityUtils; import org.apache.camel.component.as2.api.util.SigningUtils; import org.apache.camel.util.ObjectHelper; -import org.apache.http.HttpException; -import org.apache.http.HttpResponse; -import org.apache.http.entity.ContentType; -import org.apache.http.message.BasicHttpEntityEnclosingRequest; -import org.apache.http.protocol.HttpCoreContext; +import org.apache.hc.core5.http.ContentType; +import org.apache.hc.core5.http.HttpException; +import org.apache.hc.core5.http.HttpResponse; +import org.apache.hc.core5.http.ProtocolVersion; +import org.apache.hc.core5.http.message.BasicClassicHttpRequest; +import org.apache.hc.core5.http.protocol.HttpCoreContext; import org.bouncycastle.cms.CMSCompressedDataGenerator; import org.bouncycastle.cms.CMSEnvelopedDataGenerator; import org.bouncycastle.operator.OutputCompressor; @@ -245,7 +247,8 @@ public HttpCoreContext send( httpContext.setAttribute(AS2ClientManager.ENCRYPTING_ALGORITHM, encryptingAlgorithm); httpContext.setAttribute(AS2ClientManager.ENCRYPTING_CERTIFICATE_CHAIN, encryptingCertificateChain); - BasicHttpEntityEnclosingRequest request = new BasicHttpEntityEnclosingRequest("POST", requestUri); + BasicClassicHttpRequest request = new BasicClassicHttpRequest("POST", requestUri); + request.setVersion(new ProtocolVersion("HTTP", 1, 1)); httpContext.setAttribute(HTTP_REQUEST, request); // Create Message Body @@ -390,6 +393,8 @@ public HttpCoreContext send( httpContext.setAttribute(AS2_CONNECTION, as2ClientConnection); response = as2ClientConnection.send(request, httpContext); EntityParser.parseAS2MessageEntity(response); + } catch (TimeoutException e) { + throw new HttpException("Send operation timed out", e); } catch (IOException e) { throw new HttpException("Failed to send http request message", e); } catch (InterruptedException e) { diff --git a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/AS2Constants.java b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/AS2Constants.java index 7bcea3c0eb763..dbac3cb098e83 100644 --- a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/AS2Constants.java +++ b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/AS2Constants.java @@ -16,7 +16,7 @@ */ package org.apache.camel.component.as2.api; -import org.apache.http.protocol.HttpCoreContext; +import org.apache.hc.core5.http.protocol.HttpCoreContext; /** * Constants for AS2 component. @@ -50,7 +50,7 @@ public interface AS2Constants { /** * HTTP Context Attribute Name for HTTP Client Connection object stored in context. */ - String HTTP_CLIENT_CONNECTION = HttpCoreContext.HTTP_CONNECTION; + String HTTP_CLIENT_CONNECTION = HttpCoreContext.CONNECTION_ENDPOINT; /** * HTTP Context Attribute Name for HTTP Client Processor object stored in context. diff --git a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/AS2Header.java b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/AS2Header.java index 059b7395279c7..bbe8a3f1d7537 100644 --- a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/AS2Header.java +++ b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/AS2Header.java @@ -16,8 +16,6 @@ */ package org.apache.camel.component.as2.api; -import org.apache.http.protocol.HTTP; - public interface AS2Header { /** @@ -55,31 +53,39 @@ public interface AS2Header { /** * Message Header Name for Target Host */ - String TARGET_HOST = HTTP.TARGET_HOST; + String TARGET_HOST = "Host"; /** * Message Header Name for User Agent */ - String USER_AGENT = HTTP.USER_AGENT; + String USER_AGENT = "User-Agent"; /** * Message Header Name for Server Name */ - String SERVER = HTTP.SERVER_HEADER; + String SERVER = "Server"; /** * Message Header Name for Date */ - String DATE = HTTP.DATE_HEADER; + String DATE = "Date"; /** * Message Header Name for Content Length */ - String CONTENT_LENGTH = HTTP.CONTENT_LEN; + String CONTENT_LENGTH = "Content-Length"; /** * Message Header Name for Connection */ - String CONNECTION = HTTP.CONN_DIRECTIVE; + String CONNECTION = "Connection"; /** * Message Header Name for Expect */ - String EXPECT = HTTP.EXPECT_DIRECTIVE; + String EXPECT = "Expect"; + /** + * Message Header Name for Close; + */ + String CLOSE = "Close"; + /** + * Message Header for Keep Alive; + */ + String KEEP_ALIVE = "Keep-Alive"; /** * Message Header name for Content Transfer Encoding */ diff --git a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/AS2ServerConnection.java b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/AS2ServerConnection.java index ea743fa09b143..acb3034f9d41c 100644 --- a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/AS2ServerConnection.java +++ b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/AS2ServerConnection.java @@ -31,22 +31,24 @@ import org.apache.camel.component.as2.api.io.AS2BHttpServerConnection; import org.apache.camel.component.as2.api.protocol.ResponseMDN; import org.apache.camel.util.ObjectHelper; -import org.apache.http.ConnectionClosedException; -import org.apache.http.HttpException; -import org.apache.http.HttpInetConnection; -import org.apache.http.HttpServerConnection; -import org.apache.http.protocol.BasicHttpContext; -import org.apache.http.protocol.HttpContext; -import org.apache.http.protocol.HttpCoreContext; -import org.apache.http.protocol.HttpProcessor; -import org.apache.http.protocol.HttpProcessorBuilder; -import org.apache.http.protocol.HttpRequestHandler; -import org.apache.http.protocol.HttpService; -import org.apache.http.protocol.ResponseConnControl; -import org.apache.http.protocol.ResponseContent; -import org.apache.http.protocol.ResponseDate; -import org.apache.http.protocol.ResponseServer; -import org.apache.http.protocol.UriHttpRequestHandlerMapper; +import org.apache.hc.core5.http.ConnectionClosedException; +import org.apache.hc.core5.http.HttpException; +import org.apache.hc.core5.http.config.Http1Config; +import org.apache.hc.core5.http.impl.io.HttpService; +import org.apache.hc.core5.http.io.HttpRequestHandler; +import org.apache.hc.core5.http.io.HttpServerConnection; +import org.apache.hc.core5.http.io.HttpServerRequestHandler; +import org.apache.hc.core5.http.io.support.BasicHttpServerRequestHandler; +import org.apache.hc.core5.http.protocol.BasicHttpContext; +import org.apache.hc.core5.http.protocol.HttpContext; +import org.apache.hc.core5.http.protocol.HttpCoreContext; +import org.apache.hc.core5.http.protocol.HttpProcessor; +import org.apache.hc.core5.http.protocol.HttpProcessorBuilder; +import org.apache.hc.core5.http.protocol.RequestHandlerRegistry; +import org.apache.hc.core5.http.protocol.ResponseConnControl; +import org.apache.hc.core5.http.protocol.ResponseContent; +import org.apache.hc.core5.http.protocol.ResponseDate; +import org.apache.hc.core5.http.protocol.ResponseServer; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -61,7 +63,8 @@ class RequestListenerThread extends Thread { private final ServerSocket serversocket; private final HttpService httpService; - private final UriHttpRequestHandlerMapper reqistry; + private final RequestHandlerRegistry registry; + private final HttpServerRequestHandler handler; public RequestListenerThread(String as2Version, String originServer, @@ -89,10 +92,11 @@ public RequestListenerThread(String as2Version, signatureAlgorithm, signingCertificateChain, signingPrivateKey, decryptingPrivateKey, mdnMessageTemplate, validateSigningCertificateChain); - reqistry = new UriHttpRequestHandlerMapper(); + registry = new RequestHandlerRegistry<>(); + handler = new BasicHttpServerRequestHandler(registry); // Set up the HTTP service - httpService = new HttpService(inhttpproc, reqistry); + httpService = new HttpService(inhttpproc, handler); } @Override @@ -119,13 +123,8 @@ public void run() { } void registerHandler(String requestUriPattern, HttpRequestHandler httpRequestHandler) { - reqistry.register(requestUriPattern, httpRequestHandler); + registry.register(null, requestUriPattern, httpRequestHandler); } - - void unregisterHandler(String requestUri) { - reqistry.unregister(requestUri); - } - } class RequestHandlerThread extends Thread { @@ -134,24 +133,17 @@ class RequestHandlerThread extends Thread { public RequestHandlerThread(HttpService httpService, Socket inSocket) throws IOException { final int bufSize = 8 * 1024; - final AS2BHttpServerConnection inConn = new AS2BHttpServerConnection(bufSize); + Http1Config cfg = Http1Config.custom().setBufferSize(bufSize).build(); + final AS2BHttpServerConnection inConn = new AS2BHttpServerConnection(cfg); LOG.info("Incoming connection from {}", inSocket.getInetAddress()); inConn.bind(inSocket); - setThreadName(inConn); + setName(REQUEST_HANDLER_THREAD_NAME_PREFIX + getId()); this.httpService = httpService; this.serverConnection = inConn; } - private void setThreadName(HttpServerConnection serverConnection) { - if (serverConnection instanceof HttpInetConnection inetConnection) { - setName(REQUEST_HANDLER_THREAD_NAME_PREFIX + inetConnection.getLocalPort()); - } else { - setName(REQUEST_HANDLER_THREAD_NAME_PREFIX + getId()); - } - } - @Override public void run() { LOG.info("Processing new AS2 request"); @@ -186,7 +178,6 @@ public void run() { } finally { try { this.serverConnection.close(); - this.serverConnection.shutdown(); } catch (final IOException ignore) { } } @@ -267,12 +258,6 @@ public void listen(String requestUri, HttpRequestHandler handler) { } } - public void stopListening(String requestUri) { - if (listenerThread != null) { - listenerThread.unregisterHandler(requestUri); - } - } - protected HttpProcessor initProtocolProcessor( String as2Version, String originServer, diff --git a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/AS2ServerManager.java b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/AS2ServerManager.java index 4b9cebd63844f..9836e9b63dd90 100644 --- a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/AS2ServerManager.java +++ b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/AS2ServerManager.java @@ -16,8 +16,8 @@ */ package org.apache.camel.component.as2.api; -import org.apache.http.protocol.HttpContext; -import org.apache.http.protocol.HttpRequestHandler; +import org.apache.hc.core5.http.io.HttpRequestHandler; +import org.apache.hc.core5.http.protocol.HttpContext; /** * Receives EDI Messages over HTTP @@ -53,10 +53,6 @@ public void listen(String requestUriPattern, HttpRequestHandler handler) { as2ServerConnection.listen(requestUriPattern, handler); } - public void stopListening(String requestUri) { - as2ServerConnection.stopListening(requestUri); - } - public void handleMDNResponse( HttpContext httpContext, String subject, String from) { // Add Context attributes for Response diff --git a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/AS2SignedDataGenerator.java b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/AS2SignedDataGenerator.java index 138b46a852ecb..bfdd706f6aa16 100644 --- a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/AS2SignedDataGenerator.java +++ b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/AS2SignedDataGenerator.java @@ -24,7 +24,7 @@ import java.util.Map; import java.util.Set; -import org.apache.http.entity.ContentType; +import org.apache.hc.core5.http.ContentType; import org.bouncycastle.asn1.ASN1ObjectIdentifier; import org.bouncycastle.cms.CMSAlgorithm; import org.bouncycastle.cms.CMSSignedDataGenerator; diff --git a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/AS2MessageDispositionNotificationEntity.java b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/AS2MessageDispositionNotificationEntity.java index 24591a849f69e..4f2c64679192a 100644 --- a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/AS2MessageDispositionNotificationEntity.java +++ b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/AS2MessageDispositionNotificationEntity.java @@ -32,13 +32,12 @@ import org.apache.camel.component.as2.api.util.MicUtils; import org.apache.camel.component.as2.api.util.MicUtils.ReceivedContentMic; import org.apache.camel.util.ObjectHelper; -import org.apache.http.Header; -import org.apache.http.HeaderIterator; -import org.apache.http.HttpEntityEnclosingRequest; -import org.apache.http.HttpException; -import org.apache.http.HttpResponse; -import org.apache.http.entity.ContentType; -import org.apache.http.message.BasicHeader; +import org.apache.hc.core5.http.ClassicHttpRequest; +import org.apache.hc.core5.http.ContentType; +import org.apache.hc.core5.http.Header; +import org.apache.hc.core5.http.HttpException; +import org.apache.hc.core5.http.HttpResponse; +import org.apache.hc.core5.http.message.BasicHeader; public class AS2MessageDispositionNotificationEntity extends MimeEntity { @@ -68,7 +67,7 @@ public class AS2MessageDispositionNotificationEntity extends MimeEntity { private Map extensionFields = new HashMap<>(); private ReceivedContentMic receivedContentMic; - public AS2MessageDispositionNotificationEntity(HttpEntityEnclosingRequest request, + public AS2MessageDispositionNotificationEntity(ClassicHttpRequest request, HttpResponse response, DispositionMode dispositionMode, AS2DispositionType dispositionType, @@ -81,8 +80,8 @@ public AS2MessageDispositionNotificationEntity(HttpEntityEnclosingRequest reques boolean isMainBody, PrivateKey decryptingPrivateKey, Certificate[] validateSigningCertificateChain) throws HttpException { + super(ContentType.create(AS2MimeType.MESSAGE_DISPOSITION_NOTIFICATION, charset), null); setMainBody(isMainBody); - setContentType(ContentType.create(AS2MimeType.MESSAGE_DISPOSITION_NOTIFICATION, charset)); this.finalRecipient = HttpMessageUtils.getHeaderValue(request, AS2Header.AS2_TO); if (this.finalRecipient == null) { @@ -121,6 +120,7 @@ public AS2MessageDispositionNotificationEntity(String reportingUA, String[] warningFields, Map extensionFields, ReceivedContentMic receivedContentMic) { + super(ContentType.create(AS2MimeType.MESSAGE_DISPOSITION_NOTIFICATION), null); this.reportingUA = reportingUA; this.mtnName = mtnName; this.finalRecipient = finalRecipient; @@ -191,9 +191,7 @@ public void writeTo(OutputStream outstream) throws IOException { // Write out mime part headers if this is not the main body of // message. if (!isMainBody()) { - HeaderIterator it = headerIterator(); - while (it.hasNext()) { - Header header = it.nextHeader(); + for (Header header : getAllHeaders()) { canonicalOutstream.writeln(header.toString()); } canonicalOutstream.writeln(); // ensure empty line between @@ -263,4 +261,8 @@ public void writeTo(OutputStream outstream) throws IOException { } } + @Override + public void close() throws IOException { + // do nothing + } } diff --git a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/ApplicationEDIConsentEntity.java b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/ApplicationEDIConsentEntity.java index 58d6422de1be4..bc6d92acd07c7 100644 --- a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/ApplicationEDIConsentEntity.java +++ b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/ApplicationEDIConsentEntity.java @@ -16,8 +16,10 @@ */ package org.apache.camel.component.as2.api.entity; +import java.io.IOException; + import org.apache.camel.component.as2.api.AS2MediaType; -import org.apache.http.entity.ContentType; +import org.apache.hc.core5.http.ContentType; public class ApplicationEDIConsentEntity extends ApplicationEntity { @@ -26,4 +28,9 @@ public ApplicationEDIConsentEntity(String content, String charset, String conten super(content, ContentType.create(AS2MediaType.APPLICATION_EDI_CONSENT, charset), contentTransferEncoding, isMainBody, fileName); } + + @Override + public void close() throws IOException { + // do nothing + } } diff --git a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/ApplicationEDIFACTEntity.java b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/ApplicationEDIFACTEntity.java index e3011cee2bbd7..776991f33a055 100644 --- a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/ApplicationEDIFACTEntity.java +++ b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/ApplicationEDIFACTEntity.java @@ -16,8 +16,10 @@ */ package org.apache.camel.component.as2.api.entity; +import java.io.IOException; + import org.apache.camel.component.as2.api.AS2MediaType; -import org.apache.http.entity.ContentType; +import org.apache.hc.core5.http.ContentType; public class ApplicationEDIFACTEntity extends ApplicationEntity { @@ -27,4 +29,8 @@ public ApplicationEDIFACTEntity(String content, String charset, String contentTr filename); } + @Override + public void close() throws IOException { + // do nothing + } } diff --git a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/ApplicationEDIX12Entity.java b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/ApplicationEDIX12Entity.java index cebd717737cd8..e549e1c4f4784 100644 --- a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/ApplicationEDIX12Entity.java +++ b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/ApplicationEDIX12Entity.java @@ -16,8 +16,10 @@ */ package org.apache.camel.component.as2.api.entity; +import java.io.IOException; + import org.apache.camel.component.as2.api.AS2MediaType; -import org.apache.http.entity.ContentType; +import org.apache.hc.core5.http.ContentType; public class ApplicationEDIX12Entity extends ApplicationEntity { @@ -27,4 +29,8 @@ public ApplicationEDIX12Entity(String content, String charset, String contentTra filename); } + @Override + public void close() throws IOException { + // do nothing + } } diff --git a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/ApplicationEntity.java b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/ApplicationEntity.java index 67d09c2fe2ac8..e8c081a3901c2 100644 --- a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/ApplicationEntity.java +++ b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/ApplicationEntity.java @@ -25,9 +25,8 @@ import org.apache.camel.component.as2.api.util.EntityUtils; import org.apache.camel.util.ObjectHelper; import org.apache.commons.lang3.StringUtils; -import org.apache.http.Header; -import org.apache.http.HeaderIterator; -import org.apache.http.entity.ContentType; +import org.apache.hc.core5.http.ContentType; +import org.apache.hc.core5.http.Header; import org.slf4j.helpers.MessageFormatter; public abstract class ApplicationEntity extends MimeEntity { @@ -38,9 +37,8 @@ public abstract class ApplicationEntity extends MimeEntity { protected ApplicationEntity(String ediMessage, ContentType contentType, String contentTransferEncoding, boolean isMainBody, String filename) { + super(contentType, contentTransferEncoding); this.ediMessage = ObjectHelper.notNull(ediMessage, "EDI Message"); - setContentType(ObjectHelper.notNull(contentType, "Content Type").toString()); - setContentTransferEncoding(contentTransferEncoding); setMainBody(isMainBody); if (StringUtils.isNotBlank(filename)) { addHeader(AS2Header.CONTENT_DISPOSITION, @@ -60,9 +58,7 @@ public void writeTo(OutputStream outstream) throws IOException { // Write out mime part headers if this is not the main body of message. if (!isMainBody()) { - HeaderIterator it = headerIterator(); - while (it.hasNext()) { - Header header = it.nextHeader(); + for (Header header : getAllHeaders()) { canonicalOutstream.writeln(header.toString()); } canonicalOutstream.writeln(); // ensure empty line between headers and body; RFC2046 - 5.1.1 diff --git a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/ApplicationPkcs7MimeCompressedDataEntity.java b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/ApplicationPkcs7MimeCompressedDataEntity.java index 75f7af008ba63..195103d4351c6 100644 --- a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/ApplicationPkcs7MimeCompressedDataEntity.java +++ b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/ApplicationPkcs7MimeCompressedDataEntity.java @@ -25,11 +25,10 @@ import org.apache.camel.component.as2.api.CanonicalOutputStream; import org.apache.camel.component.as2.api.util.EntityUtils; import org.apache.camel.util.ObjectHelper; -import org.apache.http.Header; -import org.apache.http.HeaderIterator; -import org.apache.http.HttpException; -import org.apache.http.entity.ContentType; -import org.apache.http.message.BasicNameValuePair; +import org.apache.hc.core5.http.ContentType; +import org.apache.hc.core5.http.Header; +import org.apache.hc.core5.http.HttpException; +import org.apache.hc.core5.http.message.BasicNameValuePair; import org.bouncycastle.cms.CMSCompressedData; import org.bouncycastle.cms.CMSCompressedDataGenerator; import org.bouncycastle.cms.CMSException; @@ -50,9 +49,9 @@ public ApplicationPkcs7MimeCompressedDataEntity(MimeEntity entity2Encrypt, String compressedContentTransferEncoding, boolean isMainBody) throws HttpException { - setContentType(ContentType.create("application/pkcs7-mime", new BasicNameValuePair("smime-type", "compressed-data"), - new BasicNameValuePair("name", "smime.p7z"))); - setContentTransferEncoding(compressedContentTransferEncoding); + super(ContentType.create("application/pkcs7-mime", new BasicNameValuePair("smime-type", "compressed-data"), + new BasicNameValuePair("name", "smime.p7z")), + compressedContentTransferEncoding); addHeader(AS2Header.CONTENT_DISPOSITION, CONTENT_DISPOSITION); setMainBody(isMainBody); try { @@ -64,11 +63,11 @@ public ApplicationPkcs7MimeCompressedDataEntity(MimeEntity entity2Encrypt, public ApplicationPkcs7MimeCompressedDataEntity(byte[] compressedData, String compressedContentTransferEncoding, boolean isMainBody) { + super(ContentType.create("application/pkcs7-mime", new BasicNameValuePair("smime-type", "compressed-data"), + new BasicNameValuePair("name", "smime.p7z")), + compressedContentTransferEncoding); this.compressedData = ObjectHelper.notNull(compressedData, "encryptedData"); - setContentType(ContentType.create("application/pkcs7-mime", new BasicNameValuePair("smime-type", "compressed-data"), - new BasicNameValuePair("name", "smime.p7z"))); - setContentTransferEncoding(compressedContentTransferEncoding); addHeader(AS2Header.CONTENT_DISPOSITION, CONTENT_DISPOSITION); setMainBody(isMainBody); } @@ -81,9 +80,7 @@ public void writeTo(OutputStream outstream) throws IOException { if (!isMainBody()) { try (CanonicalOutputStream canonicalOutstream = new CanonicalOutputStream(ncos, StandardCharsets.US_ASCII.name())) { - HeaderIterator it = headerIterator(); - while (it.hasNext()) { - Header header = it.nextHeader(); + for (Header header : getAllHeaders()) { canonicalOutstream.writeln(header.toString()); } canonicalOutstream.writeln(); // ensure empty line between @@ -119,4 +116,8 @@ private byte[] createCompressedData( } } + @Override + public void close() throws IOException { + // do nothing + } } diff --git a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/ApplicationPkcs7MimeEnvelopedDataEntity.java b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/ApplicationPkcs7MimeEnvelopedDataEntity.java index e2ef7b4352b8b..405a622670452 100644 --- a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/ApplicationPkcs7MimeEnvelopedDataEntity.java +++ b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/ApplicationPkcs7MimeEnvelopedDataEntity.java @@ -26,11 +26,10 @@ import org.apache.camel.component.as2.api.CanonicalOutputStream; import org.apache.camel.component.as2.api.util.EntityUtils; import org.apache.camel.util.ObjectHelper; -import org.apache.http.Header; -import org.apache.http.HeaderIterator; -import org.apache.http.HttpException; -import org.apache.http.entity.ContentType; -import org.apache.http.message.BasicNameValuePair; +import org.apache.hc.core5.http.ContentType; +import org.apache.hc.core5.http.Header; +import org.apache.hc.core5.http.HttpException; +import org.apache.hc.core5.http.message.BasicNameValuePair; import org.bouncycastle.cms.CMSEnvelopedData; import org.bouncycastle.cms.CMSEnvelopedDataGenerator; import org.bouncycastle.cms.CMSException; @@ -50,9 +49,9 @@ public ApplicationPkcs7MimeEnvelopedDataEntity(MimeEntity entity2Encrypt, String encryptedContentTransferEncoding, boolean isMainBody) throws HttpException { - setContentType(ContentType.create("application/pkcs7-mime", new BasicNameValuePair("smime-type", "enveloped-data"), - new BasicNameValuePair("name", "smime.p7m"))); - setContentTransferEncoding(encryptedContentTransferEncoding); + super(ContentType.create("application/pkcs7-mime", new BasicNameValuePair("smime-type", "enveloped-data"), + new BasicNameValuePair("name", "smime.p7m")), + encryptedContentTransferEncoding); addHeader(AS2Header.CONTENT_DISPOSITION, CONTENT_DISPOSITION); setMainBody(isMainBody); try { @@ -64,11 +63,11 @@ public ApplicationPkcs7MimeEnvelopedDataEntity(MimeEntity entity2Encrypt, public ApplicationPkcs7MimeEnvelopedDataEntity(byte[] encryptedData, String encryptedContentTransferEncoding, boolean isMainBody) { + super(ContentType.create("application/pkcs7-mime", new BasicNameValuePair("smime-type", "enveloped-data"), + new BasicNameValuePair("name", "smime.p7m")), + encryptedContentTransferEncoding); this.encryptedData = ObjectHelper.notNull(encryptedData, "encryptedData"); - setContentType(ContentType.create("application/pkcs7-mime", new BasicNameValuePair("smime-type", "enveloped-data"), - new BasicNameValuePair("name", "smime.p7m"))); - setContentTransferEncoding(encryptedContentTransferEncoding); addHeader(AS2Header.CONTENT_DISPOSITION, CONTENT_DISPOSITION); setMainBody(isMainBody); } @@ -81,9 +80,7 @@ public void writeTo(OutputStream outstream) throws IOException { if (!isMainBody()) { try (CanonicalOutputStream canonicalOutstream = new CanonicalOutputStream(ncos, StandardCharsets.US_ASCII.name())) { - HeaderIterator it = headerIterator(); - while (it.hasNext()) { - Header header = it.nextHeader(); + for (Header header : getAllHeaders()) { canonicalOutstream.writeln(header.toString()); } canonicalOutstream.writeln(); // ensure empty line between @@ -119,4 +116,8 @@ private byte[] createEncryptedData( } } + @Override + public void close() throws IOException { + // do nothing + } } diff --git a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/ApplicationPkcs7SignatureEntity.java b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/ApplicationPkcs7SignatureEntity.java index 686bdaa8b2d1d..47da812eae40d 100644 --- a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/ApplicationPkcs7SignatureEntity.java +++ b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/ApplicationPkcs7SignatureEntity.java @@ -26,10 +26,9 @@ import org.apache.camel.component.as2.api.CanonicalOutputStream; import org.apache.camel.component.as2.api.util.EntityUtils; import org.apache.camel.util.ObjectHelper; -import org.apache.http.Header; -import org.apache.http.HeaderIterator; -import org.apache.http.HttpException; -import org.apache.http.entity.ContentType; +import org.apache.hc.core5.http.ContentType; +import org.apache.hc.core5.http.Header; +import org.apache.hc.core5.http.HttpException; import org.bouncycastle.cms.CMSException; import org.bouncycastle.cms.CMSProcessableByteArray; import org.bouncycastle.cms.CMSSignedData; @@ -46,13 +45,13 @@ public class ApplicationPkcs7SignatureEntity extends MimeEntity { public ApplicationPkcs7SignatureEntity(MimeEntity data, CMSSignedDataGenerator signer, String charset, String contentTransferEncoding, boolean isMainBody) throws HttpException { + super(ContentType + .parse(EntityUtils.appendParameter(AS2MediaType.APPLICATION_PKCS7_SIGNATURE, "charset", charset)), + contentTransferEncoding); + ObjectHelper.notNull(data, "Data"); ObjectHelper.notNull(signer, "Signer"); - ContentType contentType - = ContentType.parse(EntityUtils.appendParameter(AS2MediaType.APPLICATION_PKCS7_SIGNATURE, "charset", charset)); - setContentType(contentType.toString()); - setContentTransferEncoding(contentTransferEncoding); addHeader(AS2Header.CONTENT_DISPOSITION, CONTENT_DISPOSITION); addHeader(AS2Header.CONTENT_DESCRIPTION, CONTENT_DESCRIPTION); setMainBody(isMainBody); @@ -67,12 +66,12 @@ public ApplicationPkcs7SignatureEntity(byte[] signature, String charset, String contentTransferEncoding, boolean isMainBody) { + super(ContentType + .parse(EntityUtils.appendParameter(AS2MediaType.APPLICATION_PKCS7_SIGNATURE, "charset", charset)), + contentTransferEncoding); + this.signature = ObjectHelper.notNull(signature, "signature"); - ContentType contentType = ContentType - .parse(EntityUtils.appendParameter(AS2MediaType.APPLICATION_PKCS7_SIGNATURE, "charset", charset)); - setContentType(contentType.toString()); - setContentTransferEncoding(contentTransferEncoding); addHeader(AS2Header.CONTENT_DISPOSITION, CONTENT_DISPOSITION); addHeader(AS2Header.CONTENT_DESCRIPTION, CONTENT_DESCRIPTION); setMainBody(isMainBody); @@ -90,9 +89,7 @@ public void writeTo(OutputStream outstream) throws IOException { if (!isMainBody()) { try (CanonicalOutputStream canonicalOutstream = new CanonicalOutputStream(ncos, StandardCharsets.US_ASCII.name())) { - HeaderIterator it = headerIterator(); - while (it.hasNext()) { - Header header = it.nextHeader(); + for (Header header : getAllHeaders()) { canonicalOutstream.writeln(header.toString()); } canonicalOutstream.writeln(); // ensure empty line between @@ -123,4 +120,8 @@ private byte[] createSignature(MimeEntity data, CMSSignedDataGenerator signer) t } + @Override + public void close() throws IOException { + // do nothing + } } diff --git a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/ApplicationXMLEntity.java b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/ApplicationXMLEntity.java index 4c5feb5ea70c6..f29731cb26ca2 100644 --- a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/ApplicationXMLEntity.java +++ b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/ApplicationXMLEntity.java @@ -16,8 +16,10 @@ */ package org.apache.camel.component.as2.api.entity; +import java.io.IOException; + import org.apache.camel.component.as2.api.AS2MediaType; -import org.apache.http.entity.ContentType; +import org.apache.hc.core5.http.ContentType; public class ApplicationXMLEntity extends ApplicationEntity { @@ -27,4 +29,8 @@ public ApplicationXMLEntity(String content, String charset, String contentTransf filename); } + @Override + public void close() throws IOException { + // do nothing + } } diff --git a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/DispositionNotificationMultipartReportEntity.java b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/DispositionNotificationMultipartReportEntity.java index 9da207edf9450..cf07c66ea3302 100644 --- a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/DispositionNotificationMultipartReportEntity.java +++ b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/DispositionNotificationMultipartReportEntity.java @@ -21,25 +21,23 @@ import java.security.cert.Certificate; import java.util.Map; -import org.apache.camel.component.as2.api.AS2Header; import org.apache.camel.component.as2.api.AS2MimeType; import org.apache.camel.component.as2.api.AS2TransferEncoding; import org.apache.camel.util.ObjectHelper; -import org.apache.http.HttpEntityEnclosingRequest; -import org.apache.http.HttpException; -import org.apache.http.HttpResponse; -import org.apache.http.entity.ContentType; +import org.apache.hc.core5.http.ClassicHttpRequest; +import org.apache.hc.core5.http.ContentType; +import org.apache.hc.core5.http.HttpException; +import org.apache.hc.core5.http.HttpResponse; public class DispositionNotificationMultipartReportEntity extends MultipartReportEntity { protected DispositionNotificationMultipartReportEntity(String boundary, boolean isMainBody) { - this.boundary = boundary; - this.isMainBody = isMainBody; - removeHeaders(AS2Header.CONTENT_TYPE); - setContentType(getContentTypeValue(boundary)); + super(ContentType.parse(AS2MimeType.MULTIPART_REPORT + ";" + + "report-type=disposition-notification; boundary=\"" + boundary + "\""), + null, isMainBody, boundary); } - public DispositionNotificationMultipartReportEntity(HttpEntityEnclosingRequest request, + public DispositionNotificationMultipartReportEntity(ClassicHttpRequest request, HttpResponse response, DispositionMode dispositionMode, AS2DispositionType dispositionType, @@ -55,9 +53,9 @@ public DispositionNotificationMultipartReportEntity(HttpEntityEnclosingRequest r String mdnMessage, Certificate[] validateSigningCertificateChain) throws HttpException { - super(charset, isMainBody, boundary); - removeHeaders(AS2Header.CONTENT_TYPE); - setContentType(getContentTypeValue(boundary)); + super(ContentType.parse(AS2MimeType.MULTIPART_REPORT + ";" + + "report-type=disposition-notification; boundary=\"" + boundary + "\""), + null, isMainBody, boundary); ObjectHelper.notNull(dispositionMode, "dispositionMode"); ObjectHelper.notNull(dispositionType, "dispositionType"); ObjectHelper.notNull(mdnMessage, "mdnMessageTemplate"); @@ -77,10 +75,4 @@ protected TextPlainEntity buildPlainTextReport(String mdnMessage) { return new TextPlainEntity(mdnMessage, StandardCharsets.US_ASCII.name(), AS2TransferEncoding.SEVENBIT, false); } - protected String getContentTypeValue(String boundary) { - ContentType contentType = ContentType.parse(AS2MimeType.MULTIPART_REPORT + ";" - + "report-type=disposition-notification; boundary=\"" + boundary + "\""); - return contentType.toString(); - } - } diff --git a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/DispositionNotificationOptionsParser.java b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/DispositionNotificationOptionsParser.java index f9c4fdd50f03f..a812bee44f919 100644 --- a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/DispositionNotificationOptionsParser.java +++ b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/DispositionNotificationOptionsParser.java @@ -22,9 +22,9 @@ import org.apache.camel.component.as2.api.util.AS2HeaderUtils; import org.apache.camel.component.as2.api.util.AS2HeaderUtils.Parameter; import org.apache.camel.util.ObjectHelper; -import org.apache.http.ParseException; -import org.apache.http.message.ParserCursor; -import org.apache.http.util.CharArrayBuffer; +import org.apache.hc.core5.http.ParseException; +import org.apache.hc.core5.http.message.ParserCursor; +import org.apache.hc.core5.util.CharArrayBuffer; public class DispositionNotificationOptionsParser { diff --git a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/EntityParser.java b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/EntityParser.java index 782637b5e2de9..e274b6c21fc73 100644 --- a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/EntityParser.java +++ b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/EntityParser.java @@ -40,22 +40,21 @@ import org.apache.camel.component.as2.api.util.HttpMessageUtils; import org.apache.camel.util.ObjectHelper; import org.apache.commons.codec.DecoderException; -import org.apache.http.Header; -import org.apache.http.HttpEntity; -import org.apache.http.HttpException; -import org.apache.http.HttpMessage; -import org.apache.http.NameValuePair; -import org.apache.http.ParseException; -import org.apache.http.entity.ContentType; -import org.apache.http.impl.io.AbstractMessageParser; -import org.apache.http.impl.io.HttpTransportMetricsImpl; -import org.apache.http.message.BasicLineParser; -import org.apache.http.message.BasicNameValuePair; -import org.apache.http.message.LineParser; -import org.apache.http.message.ParserCursor; -import org.apache.http.protocol.HTTP; -import org.apache.http.util.Args; -import org.apache.http.util.CharArrayBuffer; +import org.apache.hc.core5.http.ContentType; +import org.apache.hc.core5.http.Header; +import org.apache.hc.core5.http.HttpEntity; +import org.apache.hc.core5.http.HttpException; +import org.apache.hc.core5.http.HttpMessage; +import org.apache.hc.core5.http.NameValuePair; +import org.apache.hc.core5.http.ParseException; +import org.apache.hc.core5.http.impl.BasicHttpTransportMetrics; +import org.apache.hc.core5.http.impl.io.AbstractMessageParser; +import org.apache.hc.core5.http.message.BasicLineParser; +import org.apache.hc.core5.http.message.BasicNameValuePair; +import org.apache.hc.core5.http.message.LineParser; +import org.apache.hc.core5.http.message.ParserCursor; +import org.apache.hc.core5.util.Args; +import org.apache.hc.core5.util.CharArrayBuffer; import org.bouncycastle.cms.CMSCompressedData; import org.bouncycastle.cms.CMSEnvelopedData; import org.bouncycastle.cms.CMSException; @@ -67,6 +66,9 @@ public final class EntityParser { + private static final int CR = 13; // + private static final int LF = 10; // + private static final int DEFAULT_BUFFER_SIZE = 8 * 1024; private EntityParser() { @@ -128,14 +130,14 @@ public static boolean isBoundaryDelimiter(final CharArrayBuffer buffer, ParserCu return true; } - public static void skipPreambleAndStartBoundary(AS2SessionInputBuffer inbuffer, String boundary) + public static void skipPreambleAndStartBoundary(AS2SessionInputBuffer inbuffer, InputStream is, String boundary) throws HttpException { boolean foundStartBoundary; try { foundStartBoundary = false; CharArrayBuffer lineBuffer = new CharArrayBuffer(1024); - while (inbuffer.readLine(lineBuffer) != -1) { + while (inbuffer.readLine(lineBuffer, is) != -1) { final ParserCursor cursor = new ParserCursor(0, lineBuffer.length()); if (isBoundaryDelimiter(lineBuffer, cursor, boundary)) { foundStartBoundary = true; @@ -153,14 +155,14 @@ public static void skipPreambleAndStartBoundary(AS2SessionInputBuffer inbuffer, } - public static void skipToBoundary(AS2SessionInputBuffer inbuffer, String boundary) + public static void skipToBoundary(AS2SessionInputBuffer inbuffer, InputStream is, String boundary) throws HttpException { boolean foundEndBoundary; try { foundEndBoundary = false; CharArrayBuffer lineBuffer = new CharArrayBuffer(1024); - while (inbuffer.readLine(lineBuffer) != -1) { + while (inbuffer.readLine(lineBuffer, is) != -1) { final ParserCursor cursor = new ParserCursor(0, lineBuffer.length()); if (isBoundaryDelimiter(lineBuffer, cursor, boundary)) { foundEndBoundary = true; @@ -197,11 +199,10 @@ public static MimeEntity parseEntity(byte[] content) throws HttpException { try { InputStream is = new ByteArrayInputStream(content); - AS2SessionInputBuffer inbuffer = new AS2SessionInputBuffer(new HttpTransportMetricsImpl(), DEFAULT_BUFFER_SIZE); - inbuffer.bind(is); + AS2SessionInputBuffer inbuffer = new AS2SessionInputBuffer(new BasicHttpTransportMetrics(), DEFAULT_BUFFER_SIZE); // Read Text Report Body Part Headers - Header[] headers = AbstractMessageParser.parseHeaders(inbuffer, -1, -1, BasicLineParser.INSTANCE, + Header[] headers = AbstractMessageParser.parseHeaders(inbuffer, is, -1, -1, BasicLineParser.INSTANCE, new ArrayList<>()); // Get Content-Type and Content-Transfer-Encoding @@ -218,7 +219,8 @@ public static MimeEntity parseEntity(byte[] content) throws HttpException { throw new HttpException("Failed to find Content-Type header in enveloped entity"); } - MimeEntity entity = parseEntityBody(inbuffer, null, entityContentType, entityContentTransferEncoding, "", headers); + MimeEntity entity + = parseEntityBody(inbuffer, is, null, entityContentType, entityContentTransferEncoding, "", headers); Objects.requireNonNull(entity, "Trying to parse entity body resulted in a null MimeEntity"); entity.removeAllHeaders(); entity.setHeaders(headers); @@ -266,7 +268,8 @@ public static byte[] decryptData(byte[] encryptedData, PrivateKey privateKey) th } private static void parseApplicationPkcs7MimeCompressedEntity( - HttpMessage message, AS2SessionInputBuffer inBuffer, ContentType contentType, String contentTransferEncoding) + HttpMessage message, InputStream is, AS2SessionInputBuffer inBuffer, ContentType contentType, + String contentTransferEncoding) throws HttpException { ApplicationPkcs7MimeCompressedDataEntity applicationPkcs7MimeCompressedDataEntity = null; @@ -285,7 +288,8 @@ private static void parseApplicationPkcs7MimeCompressedEntity( try { applicationPkcs7MimeCompressedDataEntity - = parseApplicationPkcs7MimeCompressedDataEntityBody(inBuffer, null, contentType, contentTransferEncoding); + = parseApplicationPkcs7MimeCompressedDataEntityBody(inBuffer, is, null, contentType, + contentTransferEncoding); applicationPkcs7MimeCompressedDataEntity.setMainBody(true); EntityUtils.setMessageEntity(message, applicationPkcs7MimeCompressedDataEntity); @@ -296,7 +300,8 @@ private static void parseApplicationPkcs7MimeCompressedEntity( } private static void parseApplicationPkcs7MimeEnvelopedEntity( - HttpMessage message, AS2SessionInputBuffer inBuffer, ContentType contentType, String contentTransferEncoding) + HttpMessage message, InputStream is, AS2SessionInputBuffer inBuffer, ContentType contentType, + String contentTransferEncoding) throws HttpException { ApplicationPkcs7MimeEnvelopedDataEntity applicationPkcs7MimeEnvelopedDataEntity = null; @@ -315,7 +320,8 @@ private static void parseApplicationPkcs7MimeEnvelopedEntity( try { applicationPkcs7MimeEnvelopedDataEntity - = parseApplicationPkcs7MimeEnvelopedDataEntityBody(inBuffer, null, contentType, contentTransferEncoding); + = parseApplicationPkcs7MimeEnvelopedDataEntityBody(inBuffer, is, null, contentType, + contentTransferEncoding); applicationPkcs7MimeEnvelopedDataEntity.setMainBody(true); EntityUtils.setMessageEntity(message, applicationPkcs7MimeEnvelopedDataEntity); @@ -326,7 +332,7 @@ private static void parseApplicationPkcs7MimeEnvelopedEntity( } private static void parseMultipartSignedEntity( - HttpMessage message, AS2SessionInputBuffer inBuffer, String boundary, String charsetName, + HttpMessage message, InputStream is, AS2SessionInputBuffer inBuffer, String boundary, String charsetName, String contentTransferEncoding) throws HttpException { MultipartSignedEntity multipartSignedEntity = null; @@ -354,7 +360,7 @@ private static void parseMultipartSignedEntity( } multipartSignedEntity - = parseMultipartSignedEntityBody(inBuffer, boundary, micalg, charsetName, contentTransferEncoding); + = parseMultipartSignedEntityBody(inBuffer, is, boundary, micalg, charsetName, contentTransferEncoding); multipartSignedEntity.setMainBody(true); EntityUtils.setMessageEntity(message, multipartSignedEntity); @@ -367,7 +373,8 @@ private static void parseMultipartSignedEntity( } private static void parseApplicationEDIEntity( - HttpMessage message, AS2SessionInputBuffer inBuffer, ContentType contentType, String contentTransferEncoding) + HttpMessage message, InputStream is, AS2SessionInputBuffer inBuffer, ContentType contentType, + String contentTransferEncoding) throws HttpException { ApplicationEntity applicationEntity = null; @@ -385,7 +392,7 @@ private static void parseApplicationEDIEntity( try { - applicationEntity = parseEDIEntityBody(inBuffer, null, contentType, contentTransferEncoding, ""); + applicationEntity = parseEDIEntityBody(inBuffer, is, null, contentType, contentTransferEncoding, ""); applicationEntity.setMainBody(true); EntityUtils.setMessageEntity(message, applicationEntity); @@ -396,7 +403,7 @@ private static void parseApplicationEDIEntity( } private static void parseMessageDispositionNotificationReportEntity( - HttpMessage message, AS2SessionInputBuffer inBuffer, String boundary, String charsetName, + HttpMessage message, InputStream is, AS2SessionInputBuffer inBuffer, String boundary, String charsetName, String contentTransferEncoding) throws HttpException { DispositionNotificationMultipartReportEntity dispositionNotificationMultipartReportEntity = null; @@ -417,7 +424,7 @@ private static void parseMessageDispositionNotificationReportEntity( try { dispositionNotificationMultipartReportEntity - = parseMultipartReportEntityBody(inBuffer, boundary, charsetName, contentTransferEncoding); + = parseMultipartReportEntityBody(inBuffer, is, boundary, charsetName, contentTransferEncoding); EntityUtils.setMessageEntity(message, dispositionNotificationMultipartReportEntity); @@ -464,33 +471,35 @@ public static void parseAS2MessageEntity(HttpMessage message) throws HttpExcepti String contentTransferEncoding = HttpMessageUtils.getHeaderValue(message, AS2Header.CONTENT_TRANSFER_ENCODING); - AS2SessionInputBuffer inBuffer = new AS2SessionInputBuffer(new HttpTransportMetricsImpl(), 8 * 1024); - inBuffer.bind(entity.getContent()); + AS2SessionInputBuffer inBuffer = new AS2SessionInputBuffer( + new BasicHttpTransportMetrics(), 8 * 1024); switch (contentType.getMimeType().toLowerCase()) { case AS2MimeType.APPLICATION_EDIFACT: case AS2MimeType.APPLICATION_EDI_X12: case AS2MimeType.APPLICATION_EDI_CONSENT: - parseApplicationEDIEntity(message, inBuffer, contentType, contentTransferEncoding); + parseApplicationEDIEntity(message, entity.getContent(), inBuffer, contentType, contentTransferEncoding); break; case AS2MimeType.MULTIPART_SIGNED: - parseMultipartSignedEntity(message, inBuffer, boundary, charsetName, contentTransferEncoding); + parseMultipartSignedEntity(message, entity.getContent(), inBuffer, boundary, charsetName, + contentTransferEncoding); break; case AS2MimeType.APPLICATION_PKCS7_MIME: switch (contentType.getParameter("smime-type")) { case "compressed-data": - parseApplicationPkcs7MimeCompressedEntity(message, inBuffer, contentType, + parseApplicationPkcs7MimeCompressedEntity(message, entity.getContent(), inBuffer, contentType, contentTransferEncoding); break; case "enveloped-data": - parseApplicationPkcs7MimeEnvelopedEntity(message, inBuffer, contentType, + parseApplicationPkcs7MimeEnvelopedEntity(message, entity.getContent(), inBuffer, contentType, contentTransferEncoding); break; default: } break; case AS2MimeType.MULTIPART_REPORT: - parseMessageDispositionNotificationReportEntity(message, inBuffer, boundary, charsetName, + parseMessageDispositionNotificationReportEntity(message, entity.getContent(), inBuffer, boundary, + charsetName, contentTransferEncoding); break; default: @@ -507,6 +516,7 @@ public static void parseAS2MessageEntity(HttpMessage message) throws HttpExcepti public static MultipartSignedEntity parseMultipartSignedEntityBody( AS2SessionInputBuffer inbuffer, + InputStream is, String boundary, String micalg, String charsetName, @@ -524,17 +534,23 @@ public static MultipartSignedEntity parseMultipartSignedEntityBody( inbuffer.setCharsetDecoder(charsetDecoder); - MultipartSignedEntity multipartSignedEntity = new MultipartSignedEntity(boundary, false); + NameValuePair[] parameters = new NameValuePair[] { + new BasicNameValuePair("protocol", AS2MimeType.APPLICATION_PKCS7_SIGNATURE), + new BasicNameValuePair("boundary", boundary), new BasicNameValuePair("micalg", micalg), + new BasicNameValuePair("charset", charsetName) }; + ContentType contentType = ContentType.create(AS2MimeType.MULTIPART_SIGNED, parameters); + MultipartSignedEntity multipartSignedEntity + = new MultipartSignedEntity(contentType, contentTransferEncoding, boundary, false); // Skip Preamble and Start Boundary line - skipPreambleAndStartBoundary(inbuffer, boundary); + skipPreambleAndStartBoundary(inbuffer, is, boundary); // // Parse Signed Entity Part // // Read Text Report Body Part Headers - Header[] headers = AbstractMessageParser.parseHeaders(inbuffer, -1, -1, BasicLineParser.INSTANCE, + Header[] headers = AbstractMessageParser.parseHeaders(inbuffer, is, -1, -1, BasicLineParser.INSTANCE, new ArrayList<>()); // Get Content-Type and Content-Transfer-Encoding @@ -551,7 +567,7 @@ public static MultipartSignedEntity parseMultipartSignedEntityBody( throw new HttpException("Failed to find Content-Type header in signed entity body part"); } - MimeEntity signedEntity = parseEntityBody(inbuffer, boundary, signedEntityContentType, + MimeEntity signedEntity = parseEntityBody(inbuffer, is, boundary, signedEntityContentType, signedEntityContentTransferEncoding, "", headers); signedEntity.removeAllHeaders(); signedEntity.setHeaders(headers); @@ -565,7 +581,7 @@ public static MultipartSignedEntity parseMultipartSignedEntityBody( // // Read Signature Body Part Headers - headers = AbstractMessageParser.parseHeaders(inbuffer, -1, -1, BasicLineParser.INSTANCE, + headers = AbstractMessageParser.parseHeaders(inbuffer, is, -1, -1, BasicLineParser.INSTANCE, new ArrayList<>()); // Get Content-Type and Content-Transfer-Encoding @@ -587,7 +603,7 @@ public static MultipartSignedEntity parseMultipartSignedEntityBody( } ApplicationPkcs7SignatureEntity applicationPkcs7SignatureEntity = parseApplicationPkcs7SignatureEntityBody(inbuffer, - boundary, signatureContentType, signatureContentTransferEncoding); + is, boundary, signatureContentType, signatureContentTransferEncoding); applicationPkcs7SignatureEntity.removeAllHeaders(); applicationPkcs7SignatureEntity.setHeaders(headers); multipartSignedEntity.addPart(applicationPkcs7SignatureEntity); @@ -595,13 +611,6 @@ public static MultipartSignedEntity parseMultipartSignedEntityBody( // // End Signature Body Part - NameValuePair[] parameters = new NameValuePair[] { - new BasicNameValuePair("protocol", AS2MimeType.APPLICATION_PKCS7_SIGNATURE), - new BasicNameValuePair("boundary", boundary), new BasicNameValuePair("micalg", micalg), - new BasicNameValuePair("charset", charsetName) }; - ContentType contentType = ContentType.create(AS2MimeType.MULTIPART_SIGNED, parameters); - multipartSignedEntity.setContentType(contentType); - multipartSignedEntity.setContentTransferEncoding(contentTransferEncoding); return multipartSignedEntity; } catch (Exception e) { @@ -615,6 +624,7 @@ public static MultipartSignedEntity parseMultipartSignedEntityBody( public static DispositionNotificationMultipartReportEntity parseMultipartReportEntityBody( AS2SessionInputBuffer inbuffer, + InputStream is, String boundary, String charsetName, String contentTransferEncoding) @@ -635,14 +645,14 @@ public static DispositionNotificationMultipartReportEntity parseMultipartReportE = new DispositionNotificationMultipartReportEntity(boundary, false); // Skip Preamble and Start Boundary line - skipPreambleAndStartBoundary(inbuffer, boundary); + skipPreambleAndStartBoundary(inbuffer, is, boundary); // // Parse Text Report Body Part // // Read Text Report Body Part Headers - Header[] headers = AbstractMessageParser.parseHeaders(inbuffer, -1, -1, BasicLineParser.INSTANCE, + Header[] headers = AbstractMessageParser.parseHeaders(inbuffer, is, -1, -1, BasicLineParser.INSTANCE, new ArrayList<>()); // Get Content-Type and Content-Transfer-Encoding @@ -667,7 +677,8 @@ public static DispositionNotificationMultipartReportEntity parseMultipartReportE String textReportCharsetName = textReportContentType.getCharset() == null ? StandardCharsets.US_ASCII.name() : textReportContentType.getCharset().name(); TextPlainEntity textReportEntity - = parseTextPlainEntityBody(inbuffer, boundary, textReportCharsetName, textReportContentTransferEncoding); + = parseTextPlainEntityBody(inbuffer, is, boundary, textReportCharsetName, + textReportContentTransferEncoding); textReportEntity.setHeaders(headers); dispositionNotificationMultipartReportEntity.addPart(textReportEntity); @@ -679,7 +690,7 @@ public static DispositionNotificationMultipartReportEntity parseMultipartReportE // // Read Disposition Notification Body Part Headers - headers = AbstractMessageParser.parseHeaders(inbuffer, -1, -1, BasicLineParser.INSTANCE, + headers = AbstractMessageParser.parseHeaders(inbuffer, is, -1, -1, BasicLineParser.INSTANCE, new ArrayList<>()); // Get Content-Type and Content-Transfer-Encoding @@ -703,14 +714,13 @@ public static DispositionNotificationMultipartReportEntity parseMultipartReportE ? StandardCharsets.US_ASCII.name() : dispositionNotificationContentType.getCharset().name(); AS2MessageDispositionNotificationEntity messageDispositionNotificationEntity = parseMessageDispositionNotificationEntityBody( - inbuffer, boundary, dispositionNotificationCharsetName); + inbuffer, is, boundary, dispositionNotificationCharsetName); messageDispositionNotificationEntity.setHeaders(headers); dispositionNotificationMultipartReportEntity.addPart(messageDispositionNotificationEntity); // // End Disposition Notification Body Part - dispositionNotificationMultipartReportEntity.setContentTransferEncoding(contentTransferEncoding); return dispositionNotificationMultipartReportEntity; } catch (Exception e) { ParseException parseException = new ParseException("failed to parse text entity"); @@ -724,6 +734,7 @@ public static DispositionNotificationMultipartReportEntity parseMultipartReportE public static TextPlainEntity parseTextPlainEntityBody( AS2SessionInputBuffer inbuffer, + InputStream is, String boundary, String charsetName, String contentTransferEncoding) @@ -740,7 +751,7 @@ public static TextPlainEntity parseTextPlainEntityBody( inbuffer.setCharsetDecoder(charsetDecoder); - String text = parseBodyPartText(inbuffer, boundary); + String text = parseBodyPartText(inbuffer, is, boundary); if (contentTransferEncoding != null) { text = EntityUtils.decode(text, charset, contentTransferEncoding); } @@ -756,6 +767,7 @@ public static TextPlainEntity parseTextPlainEntityBody( public static AS2MessageDispositionNotificationEntity parseMessageDispositionNotificationEntityBody( AS2SessionInputBuffer inbuffer, + InputStream is, String boundary, String charsetName) throws ParseException { @@ -771,13 +783,11 @@ public static AS2MessageDispositionNotificationEntity parseMessageDispositionNot inbuffer.setCharsetDecoder(charsetDecoder); - List dispositionNotificationFields = parseBodyPartFields(inbuffer, boundary, + List dispositionNotificationFields = parseBodyPartFields(inbuffer, is, boundary, BasicLineParser.INSTANCE, new ArrayList<>()); AS2MessageDispositionNotificationEntity as2MessageDispositionNotificationEntity = DispositionNotificationContentUtils.parseDispositionNotification(dispositionNotificationFields); - ContentType contentType = ContentType.create(AS2MimeType.MESSAGE_DISPOSITION_NOTIFICATION, charset); - as2MessageDispositionNotificationEntity.setContentType(contentType); return as2MessageDispositionNotificationEntity; } catch (Exception e) { ParseException parseException = new ParseException("failed to parse MDN entity"); @@ -790,6 +800,7 @@ public static AS2MessageDispositionNotificationEntity parseMessageDispositionNot public static MimeEntity parseEntityBody( AS2SessionInputBuffer inbuffer, + InputStream is, String boundary, ContentType entityContentType, String contentTransferEncoding, @@ -813,41 +824,42 @@ public static MimeEntity parseEntityBody( case AS2MimeType.APPLICATION_EDI_X12: case AS2MimeType.APPLICATION_EDI_CONSENT: case AS2MimeType.APPLICATION_XML: - entity = parseEDIEntityBody(inbuffer, boundary, entityContentType, contentTransferEncoding, filename); + entity = parseEDIEntityBody(inbuffer, is, boundary, entityContentType, contentTransferEncoding, filename); break; case AS2MimeType.MULTIPART_SIGNED: String multipartSignedBoundary = AS2HeaderUtils.getParameterValue(headers, AS2Header.CONTENT_TYPE, "boundary"); String micalg = AS2HeaderUtils.getParameterValue(headers, AS2Header.CONTENT_TYPE, "micalg"); - entity = parseMultipartSignedEntityBody(inbuffer, multipartSignedBoundary, micalg, charset.name(), + entity = parseMultipartSignedEntityBody(inbuffer, is, multipartSignedBoundary, micalg, charset.name(), contentTransferEncoding); - skipToBoundary(inbuffer, boundary); + skipToBoundary(inbuffer, is, boundary); break; case AS2MimeType.MESSAGE_DISPOSITION_NOTIFICATION: - entity = parseMessageDispositionNotificationEntityBody(inbuffer, boundary, charset.name()); + entity = parseMessageDispositionNotificationEntityBody(inbuffer, is, boundary, charset.name()); break; case AS2MimeType.MULTIPART_REPORT: String multipartReportBoundary = AS2HeaderUtils.getParameterValue(headers, AS2Header.CONTENT_TYPE, "boundary"); - entity = parseMultipartReportEntityBody(inbuffer, multipartReportBoundary, charset.name(), + entity = parseMultipartReportEntityBody(inbuffer, is, multipartReportBoundary, charset.name(), contentTransferEncoding); - skipToBoundary(inbuffer, boundary); + skipToBoundary(inbuffer, is, boundary); break; case AS2MimeType.TEXT_PLAIN: - entity = parseTextPlainEntityBody(inbuffer, boundary, charset.name(), contentTransferEncoding); + entity = parseTextPlainEntityBody(inbuffer, is, boundary, charset.name(), contentTransferEncoding); break; case AS2MimeType.APPLICATION_PKCS7_SIGNATURE: - entity = parseApplicationPkcs7SignatureEntityBody(inbuffer, boundary, entityContentType, + entity = parseApplicationPkcs7SignatureEntityBody(inbuffer, is, boundary, entityContentType, contentTransferEncoding); break; case AS2MimeType.APPLICATION_PKCS7_MIME: switch (entityContentType.getParameter("smime-type")) { case "compressed-data": - entity = parseApplicationPkcs7MimeCompressedDataEntityBody(inbuffer, boundary, entityContentType, + entity = parseApplicationPkcs7MimeCompressedDataEntityBody(inbuffer, is, boundary, + entityContentType, contentTransferEncoding); break; case "enveloped-data": - entity = parseApplicationPkcs7MimeEnvelopedDataEntityBody(inbuffer, boundary, entityContentType, + entity = parseApplicationPkcs7MimeEnvelopedDataEntityBody(inbuffer, is, boundary, entityContentType, contentTransferEncoding); break; default: @@ -872,6 +884,7 @@ public static MimeEntity parseEntityBody( public static ApplicationEntity parseEDIEntityBody( AS2SessionInputBuffer inbuffer, + InputStream is, String boundary, ContentType ediMessageContentType, String contentTransferEncoding, @@ -888,7 +901,7 @@ public static ApplicationEntity parseEDIEntityBody( inbuffer.setCharsetDecoder(charsetDecoder); - String ediMessageBodyPartContent = parseBodyPartText(inbuffer, boundary); + String ediMessageBodyPartContent = parseBodyPartText(inbuffer, is, boundary); if (contentTransferEncoding != null) { ediMessageBodyPartContent = EntityUtils.decode(ediMessageBodyPartContent, charset, contentTransferEncoding); } @@ -906,6 +919,7 @@ public static ApplicationEntity parseEDIEntityBody( public static ApplicationPkcs7SignatureEntity parseApplicationPkcs7SignatureEntityBody( AS2SessionInputBuffer inbuffer, + InputStream is, String boundary, ContentType contentType, String contentTransferEncoding) @@ -914,7 +928,7 @@ public static ApplicationPkcs7SignatureEntity parseApplicationPkcs7SignatureEnti CharsetDecoder previousDecoder = inbuffer.getCharsetDecoder(); try { - byte[] signature = parseBodyPartBytes(inbuffer, boundary, contentType, contentTransferEncoding); + byte[] signature = parseBodyPartBytes(inbuffer, is, boundary, contentType, contentTransferEncoding); Charset charset = contentType.getCharset(); if (charset == null) { @@ -933,6 +947,7 @@ public static ApplicationPkcs7SignatureEntity parseApplicationPkcs7SignatureEnti public static ApplicationPkcs7MimeEnvelopedDataEntity parseApplicationPkcs7MimeEnvelopedDataEntityBody( AS2SessionInputBuffer inbuffer, + InputStream is, String boundary, ContentType contentType, String contentTransferEncoding) @@ -941,7 +956,7 @@ public static ApplicationPkcs7MimeEnvelopedDataEntity parseApplicationPkcs7MimeE CharsetDecoder previousDecoder = inbuffer.getCharsetDecoder(); try { - byte[] encryptedContent = parseBodyPartBytes(inbuffer, boundary, contentType, contentTransferEncoding); + byte[] encryptedContent = parseBodyPartBytes(inbuffer, is, boundary, contentType, contentTransferEncoding); return new ApplicationPkcs7MimeEnvelopedDataEntity(encryptedContent, contentTransferEncoding, false); } catch (Exception e) { ParseException parseException = new ParseException("failed to parse PKCS7 Mime entity"); @@ -954,6 +969,7 @@ public static ApplicationPkcs7MimeEnvelopedDataEntity parseApplicationPkcs7MimeE public static ApplicationPkcs7MimeCompressedDataEntity parseApplicationPkcs7MimeCompressedDataEntityBody( AS2SessionInputBuffer inbuffer, + InputStream is, String boundary, ContentType contentType, String contentTransferEncoding) @@ -962,7 +978,7 @@ public static ApplicationPkcs7MimeCompressedDataEntity parseApplicationPkcs7Mime CharsetDecoder previousDecoder = inbuffer.getCharsetDecoder(); try { - byte[] compressedContent = parseBodyPartBytes(inbuffer, boundary, contentType, contentTransferEncoding); + byte[] compressedContent = parseBodyPartBytes(inbuffer, is, boundary, contentType, contentTransferEncoding); return new ApplicationPkcs7MimeCompressedDataEntity(compressedContent, contentTransferEncoding, false); } catch (Exception e) { ParseException parseException = new ParseException("failed to parse PKCS7 Mime entity"); @@ -975,6 +991,7 @@ public static ApplicationPkcs7MimeCompressedDataEntity parseApplicationPkcs7Mime public static byte[] parseBodyPartBytes( final AS2SessionInputBuffer inbuffer, + InputStream is, final String boundary, ContentType contentType, String contentTransferEncoding) @@ -988,7 +1005,7 @@ public static byte[] parseBodyPartBytes( inbuffer.setCharsetDecoder(null); } - String bodyContent = parseBodyPartText(inbuffer, boundary); + String bodyContent = parseBodyPartText(inbuffer, is, boundary); byte[] bodyContentBytes; if (charset != null) { @@ -1005,12 +1022,13 @@ public static byte[] parseBodyPartBytes( public static String parseBodyPartText( final AS2SessionInputBuffer inbuffer, + InputStream is, final String boundary) throws IOException { CharArrayBuffer buffer = new CharArrayBuffer(DEFAULT_BUFFER_SIZE); CharArrayBuffer line = new CharArrayBuffer(DEFAULT_BUFFER_SIZE); while (true) { - final int l = inbuffer.readLine(line); + final int l = inbuffer.readLine(line, is); if (l == -1) { break; } @@ -1024,10 +1042,10 @@ public static String parseBodyPartText( buffer.append(line); if (inbuffer.isLastLineReadEnrichedByCarriageReturn()) { - buffer.append((char) HTTP.CR); + buffer.append((char) CR); } if (inbuffer.isLastLineReadTerminatedByLineFeed()) { - buffer.append((char) HTTP.LF); + buffer.append((char) LF); } line.clear(); } @@ -1037,6 +1055,7 @@ public static String parseBodyPartText( public static List parseBodyPartFields( final AS2SessionInputBuffer inbuffer, + final InputStream is, final String boundary, final LineParser parser, final List fields) @@ -1051,7 +1070,7 @@ public static List parseBodyPartFields( current = new CharArrayBuffer(64); } - final int l = inbuffer.readLine(current); + final int l = inbuffer.readLine(current, is); if (l == -1 || current.length() < 1) { break; } diff --git a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/MimeEntity.java b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/MimeEntity.java index eecca6784bfea..5b6f4153a44a2 100644 --- a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/MimeEntity.java +++ b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/MimeEntity.java @@ -27,13 +27,11 @@ import org.apache.camel.component.as2.api.AS2Header; import org.apache.camel.util.ObjectHelper; -import org.apache.http.Header; -import org.apache.http.HeaderIterator; -import org.apache.http.entity.AbstractHttpEntity; -import org.apache.http.entity.ContentType; -import org.apache.http.message.BasicHeader; -import org.apache.http.message.HeaderGroup; -import org.apache.http.protocol.HTTP; +import org.apache.hc.core5.http.ContentType; +import org.apache.hc.core5.http.Header; +import org.apache.hc.core5.http.io.entity.AbstractHttpEntity; +import org.apache.hc.core5.http.message.BasicHeader; +import org.apache.hc.core5.http.message.HeaderGroup; public abstract class MimeEntity extends AbstractHttpEntity { @@ -61,13 +59,19 @@ public void close() { protected boolean isMainBody; - protected Header contentTransferEncoding; - protected long contentLength = RECALCULATE_CONTENT_LENGTH; private final HeaderGroup headergroup = new HeaderGroup(); - protected MimeEntity() { + protected MimeEntity(ContentType contentType, String contentTransferEncoding) { + super(contentType, contentTransferEncoding); + if (contentType != null) { + this.headergroup.addHeader(new BasicHeader(AS2Header.CONTENT_TYPE, contentType)); + } + if (contentTransferEncoding != null) { + BasicHeader encoding = new BasicHeader(AS2Header.CONTENT_TRANSFER_ENCODING, contentTransferEncoding); + this.headergroup.addHeader(encoding); + } } public boolean isMainBody() { @@ -78,46 +82,6 @@ public void setMainBody(boolean isMainBody) { this.isMainBody = isMainBody; } - public String getContentTypeValue() { - Header contentTypeHeader = getContentType(); - if (contentTypeHeader != null) { - return contentTypeHeader.getValue(); - } - return null; - } - - public void setContentType(ContentType contentType) { - super.setContentType(contentType == null ? null : contentType.toString()); - } - - @Override - public void setContentType(Header contentType) { - super.setContentType(contentType); - if (contentType != null) { - addHeader(contentType); - } else { - removeHeaders(AS2Header.CONTENT_TYPE); - } - } - - public String getContentEncodingValue() { - Header contentEncodingHeader = getContentEncoding(); - if (contentEncodingHeader != null) { - return contentEncodingHeader.getValue(); - } - return null; - } - - @Override - public void setContentEncoding(Header contentEncoding) { - super.setContentEncoding(contentEncoding); - if (contentEncoding != null) { - addHeader(contentEncoding); - } else { - removeHeaders(HTTP.CONTENT_ENCODING); - } - } - public String getContentTransferEncodingValue() { Header contentTransferEncodingHeader = getContentTransferEncoding(); if (contentTransferEncodingHeader != null) { @@ -127,42 +91,13 @@ public String getContentTransferEncodingValue() { } /** - * Obtains the Content-Transfer-Encoding header. The default implementation returns the value of the - * {@link #contentEncoding contentEncoding} attribute. + * Obtains the Content-Transfer-Encoding header. * * @return the Content-Transfer-Encoding header, or {@code null} */ public Header getContentTransferEncoding() { - return this.contentTransferEncoding; - } - - /** - * Specifies the Content-Transfer-Encoding header. The default implementation sets the value of the - * {@link #contentTransferEncoding contentTransferEncoding} attribute. - * - * @param contentTransferEncoding the new Content-Transfer-Encoding header, or {@code null} to unset - */ - public void setContentTransferEncoding(final Header contentTransferEncoding) { - this.contentTransferEncoding = contentTransferEncoding; - if (contentTransferEncoding != null) { - addHeader(contentTransferEncoding); - } else { - removeHeaders(AS2Header.CONTENT_TRANSFER_ENCODING); - } - } - - /** - * Specifies the Content-Transfer-Encoding header, as a string. The default implementation calls - * {@link #setContentTransferEncoding(Header) setContentTransferEncoding(Header)}. - * - * @param contentTranserEncoding - the new Content-Transfer-Encoding header, or {@code null} to unset - */ - public void setContentTransferEncoding(final String contentTranserEncoding) { - Header h = null; - if (contentTranserEncoding != null) { - h = new BasicHeader(AS2Header.CONTENT_TRANSFER_ENCODING, contentTranserEncoding); - } - setContentTransferEncoding(h); + return (super.getContentEncoding() == null) + ? null : new BasicHeader(AS2Header.CONTENT_TRANSFER_ENCODING, super.getContentEncoding()); } public boolean containsHeader(final String name) { @@ -182,7 +117,7 @@ public Header getLastHeader(final String name) { } public Header[] getAllHeaders() { - return this.headergroup.getAllHeaders(); + return this.headergroup.getHeaders(); } public void addHeader(final Header header) { @@ -195,12 +130,12 @@ public void addHeader(final String name, final String value) { } public void setHeader(final Header header) { - this.headergroup.updateHeader(header); + this.headergroup.setHeader(header); } public void setHeader(final String name, final String value) { ObjectHelper.notNull(name, "Header name"); - this.headergroup.updateHeader(new BasicHeader(name, value)); + this.headergroup.setHeader(new BasicHeader(name, value)); } public void setHeaders(final Header[] headers) { @@ -215,26 +150,13 @@ public void removeHeaders(final String name) { if (name == null) { return; } - for (final HeaderIterator i = this.headergroup.iterator(); i.hasNext();) { - final Header header = i.nextHeader(); - if (name.equalsIgnoreCase(header.getName())) { - i.remove(); - } - } + this.headergroup.removeHeaders(name); } public void removeAllHeaders() { this.headergroup.clear(); } - public HeaderIterator headerIterator() { - return this.headergroup.iterator(); - } - - public HeaderIterator headerIterator(final String name) { - return this.headergroup.iterator(name); - } - @Override public boolean isRepeatable() { return true; @@ -272,7 +194,7 @@ public String getCharset() { if (getContentType() == null) { return StandardCharsets.US_ASCII.name(); } - ContentType contentType = ContentType.parse(getContentType().getValue()); + ContentType contentType = ContentType.parse(getContentType()); Charset charset = contentType.getCharset(); if (charset != null) { return charset.name(); diff --git a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/MultipartMimeEntity.java b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/MultipartMimeEntity.java index aa7d0936c93d9..dfd301e0e54a0 100644 --- a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/MultipartMimeEntity.java +++ b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/MultipartMimeEntity.java @@ -21,11 +21,11 @@ import java.util.ArrayList; import java.util.List; +import org.apache.camel.component.as2.api.AS2SignedDataGenerator; import org.apache.camel.component.as2.api.CanonicalOutputStream; import org.apache.camel.component.as2.api.util.EntityUtils; -import org.apache.http.Header; -import org.apache.http.HeaderIterator; -import org.apache.http.entity.ContentType; +import org.apache.hc.core5.http.ContentType; +import org.apache.hc.core5.http.Header; public abstract class MultipartMimeEntity extends MimeEntity { @@ -33,16 +33,17 @@ public abstract class MultipartMimeEntity extends MimeEntity { private final List parts = new ArrayList<>(); - protected MultipartMimeEntity(ContentType contentType) { - this(contentType, false, null); + protected MultipartMimeEntity(ContentType contentType, String contentTransferEncoding) { + super(contentType, contentTransferEncoding); } - protected MultipartMimeEntity(ContentType contentType, boolean isMainBody) { - this(contentType, isMainBody, null); + protected MultipartMimeEntity(AS2SignedDataGenerator signer, boolean isMainBody, String boundary) { + this(signer.createMultipartSignedContentType(boundary), null, isMainBody, boundary); } - protected MultipartMimeEntity(ContentType contentType, boolean isMainBody, String boundary) { - setContentType(contentType); + protected MultipartMimeEntity(ContentType contentType, String contentTransferEncoding, boolean isMainBody, + String boundary) { + super(contentType, contentTransferEncoding); setMainBody(isMainBody); if (boundary != null) { @@ -53,9 +54,6 @@ protected MultipartMimeEntity(ContentType contentType, boolean isMainBody, Strin } - protected MultipartMimeEntity() { - } - public String getBoundary() { return boundary; } @@ -99,9 +97,7 @@ public void writeTo(OutputStream outstream) throws IOException { // Write out mime part headers if this is not the main body of message. if (!isMainBody()) { - HeaderIterator it = headerIterator(); - while (it.hasNext()) { - Header header = it.nextHeader(); + for (Header header : getAllHeaders()) { canonicalOutstream.writeln(header.toString()); } canonicalOutstream.writeln(); // ensure empty line between headers and body; RFC2046 - 5.1.1 diff --git a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/MultipartReportEntity.java b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/MultipartReportEntity.java index 5dd57285f2919..8a3dac17fca72 100644 --- a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/MultipartReportEntity.java +++ b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/MultipartReportEntity.java @@ -16,21 +16,24 @@ */ package org.apache.camel.component.as2.api.entity; -import org.apache.camel.component.as2.api.AS2MimeType; -import org.apache.http.entity.ContentType; +import java.io.IOException; + +import org.apache.hc.core5.http.ContentType; public class MultipartReportEntity extends MultipartMimeEntity { - public MultipartReportEntity(String charset, + public MultipartReportEntity(ContentType contentType, + String contentTransferEncoding, boolean isMainBody, String boundary) { - super(ContentType.create(AS2MimeType.MULTIPART_REPORT, charset), isMainBody, boundary); + super(contentType, contentTransferEncoding, isMainBody, boundary); } - protected MultipartReportEntity() { - + @Override + public void close() throws IOException { + // do nothing } } diff --git a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/MultipartSignedEntity.java b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/MultipartSignedEntity.java index 0b38996dd7ff0..21b361dc9d31f 100644 --- a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/MultipartSignedEntity.java +++ b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/MultipartSignedEntity.java @@ -16,22 +16,27 @@ */ package org.apache.camel.component.as2.api.entity; +import java.io.IOException; + import org.apache.camel.component.as2.api.AS2SignedDataGenerator; -import org.apache.http.HttpException; +import org.apache.camel.component.as2.api.util.EntityUtils; +import org.apache.hc.core5.http.ContentType; +import org.apache.hc.core5.http.HttpException; public class MultipartSignedEntity extends MultipartMimeEntity { public MultipartSignedEntity(MimeEntity data, AS2SignedDataGenerator signer, String signatureCharSet, String signatureTransferEncoding, boolean isMainBody, String boundary) throws HttpException { - super(null, isMainBody, boundary); - setContentType(signer.createMultipartSignedContentType(this.boundary)); + super(signer, isMainBody, (boundary == null) ? EntityUtils.createBoundaryValue() : boundary); addPart(data); ApplicationPkcs7SignatureEntity signature = new ApplicationPkcs7SignatureEntity(data, signer, signatureCharSet, signatureTransferEncoding, false); addPart(signature); } - protected MultipartSignedEntity(String boundary, boolean isMainBody) { + protected MultipartSignedEntity(ContentType contentType, String contentTransferEncoding, String boundary, + boolean isMainBody) { + super(contentType, contentTransferEncoding); this.boundary = boundary; this.isMainBody = isMainBody; } @@ -52,4 +57,8 @@ public ApplicationPkcs7SignatureEntity getSignatureEntity() { return null; } + @Override + public void close() throws IOException { + // do nothing + } } diff --git a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/TextPlainEntity.java b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/TextPlainEntity.java index 877e643b93aa6..00f5659fb6839 100644 --- a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/TextPlainEntity.java +++ b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/entity/TextPlainEntity.java @@ -23,18 +23,16 @@ import org.apache.camel.component.as2.api.AS2MediaType; import org.apache.camel.component.as2.api.CanonicalOutputStream; import org.apache.camel.util.ObjectHelper; -import org.apache.http.Header; -import org.apache.http.HeaderIterator; -import org.apache.http.entity.ContentType; +import org.apache.hc.core5.http.ContentType; +import org.apache.hc.core5.http.Header; public class TextPlainEntity extends MimeEntity { private String content; public TextPlainEntity(String content, String charset, String contentTransferEncoding, boolean isMainBody) { + super(ContentType.create(AS2MediaType.TEXT_PLAIN, charset), contentTransferEncoding); this.content = ObjectHelper.notNull(content, "Content"); - setContentType(ContentType.create(AS2MediaType.TEXT_PLAIN, charset)); - setContentTransferEncoding(contentTransferEncoding); setMainBody(isMainBody); } @@ -49,9 +47,7 @@ public void writeTo(OutputStream outstream) throws IOException { // Write out mime part headers if this is not the main body of message. if (!isMainBody()) { - HeaderIterator it = headerIterator(); - while (it.hasNext()) { - Header header = it.nextHeader(); + for (Header header : getAllHeaders()) { canonicalOutstream.writeln(header.toString()); } canonicalOutstream.writeln(); // ensure empty line between headers and body; RFC2046 - 5.1.1 @@ -62,4 +58,8 @@ public void writeTo(OutputStream outstream) throws IOException { } } + @Override + public void close() throws IOException { + // do nothing + } } diff --git a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/io/AS2BHttpClientConnection.java b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/io/AS2BHttpClientConnection.java index 88712ec2bfcf3..8fde77dfe681c 100644 --- a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/io/AS2BHttpClientConnection.java +++ b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/io/AS2BHttpClientConnection.java @@ -17,41 +17,142 @@ package org.apache.camel.component.as2.api.io; import java.io.IOException; -import java.nio.charset.CharsetDecoder; -import java.nio.charset.CharsetEncoder; +import java.net.Socket; +import java.net.SocketAddress; + +import javax.net.ssl.SSLSession; import org.apache.camel.component.as2.api.entity.EntityParser; -import org.apache.http.HttpException; -import org.apache.http.HttpRequest; -import org.apache.http.HttpResponse; -import org.apache.http.config.MessageConstraints; -import org.apache.http.entity.ContentLengthStrategy; -import org.apache.http.impl.conn.DefaultManagedHttpClientConnection; -import org.apache.http.io.HttpMessageParserFactory; -import org.apache.http.io.HttpMessageWriterFactory; +import org.apache.hc.client5.http.io.ManagedHttpClientConnection; +import org.apache.hc.core5.http.ClassicHttpRequest; +import org.apache.hc.core5.http.ClassicHttpResponse; +import org.apache.hc.core5.http.EndpointDetails; +import org.apache.hc.core5.http.HttpException; +import org.apache.hc.core5.http.ProtocolVersion; +import org.apache.hc.core5.io.CloseMode; +import org.apache.hc.core5.util.Timeout; + +public class AS2BHttpClientConnection implements ManagedHttpClientConnection { + + private ManagedHttpClientConnection mc; + + public AS2BHttpClientConnection(ManagedHttpClientConnection mc) { + this.mc = mc; + } + + @Override + public void bind(Socket socket) throws IOException { + mc.bind(socket); + } + + @Override + public Socket getSocket() { + return mc.getSocket(); + } + + @Override + public void close() throws IOException { + mc.close(); + } + + @Override + public EndpointDetails getEndpointDetails() { + return mc.getEndpointDetails(); + } + + @Override + public SocketAddress getLocalAddress() { + return mc.getLocalAddress(); + } + + @Override + public SocketAddress getRemoteAddress() { + return mc.getRemoteAddress(); + } + + @Override + public ProtocolVersion getProtocolVersion() { + return mc.getProtocolVersion(); + } + + @Override + public SSLSession getSSLSession() { + return mc.getSSLSession(); + } + + @Override + public boolean isOpen() { + return mc.isOpen(); + } + + @Override + public void passivate() { + mc.passivate(); + } -public class AS2BHttpClientConnection extends DefaultManagedHttpClientConnection { + @Override + public void activate() { + mc.activate(); + } - public AS2BHttpClientConnection(String id, int buffersize, - int fragmentSizeHint, - CharsetDecoder chardecoder, - CharsetEncoder charencoder, - MessageConstraints constraints, - ContentLengthStrategy incomingContentStrategy, - ContentLengthStrategy outgoingContentStrategy, - HttpMessageWriterFactory requestWriterFactory, - HttpMessageParserFactory responseParserFactory) { - super(id, buffersize, fragmentSizeHint, chardecoder, charencoder, constraints, incomingContentStrategy, - outgoingContentStrategy, requestWriterFactory, responseParserFactory); + @Override + public boolean isConsistent() { + return mc.isConsistent(); } - public AS2BHttpClientConnection(String id, int buffersize) { - super(id, buffersize); + @Override + public void sendRequestHeader(ClassicHttpRequest request) throws HttpException, IOException { + mc.sendRequestHeader(request); + } + + @Override + public void terminateRequest(ClassicHttpRequest request) throws HttpException, IOException { + mc.terminateRequest(request); } @Override - public void receiveResponseEntity(HttpResponse response) throws HttpException, IOException { - super.receiveResponseEntity(response); + public void sendRequestEntity(ClassicHttpRequest request) throws HttpException, IOException { + mc.sendRequestEntity(request); + } + + @Override + public ClassicHttpResponse receiveResponseHeader() throws HttpException, IOException { + return mc.receiveResponseHeader(); + } + + @Override + public void receiveResponseEntity(ClassicHttpResponse response) throws HttpException, IOException { + mc.receiveResponseEntity(response); EntityParser.parseAS2MessageEntity(response); } + + @Override + public boolean isDataAvailable(Timeout timeout) throws IOException { + return mc.isDataAvailable(timeout); + } + + @Override + public boolean isStale() throws IOException { + return mc.isStale(); + } + + @Override + public void flush() throws IOException { + mc.flush(); + } + + @Override + public Timeout getSocketTimeout() { + return mc.getSocketTimeout(); + } + + @Override + public void setSocketTimeout(Timeout timeout) { + mc.setSocketTimeout(timeout); + } + + @Override + public void close(CloseMode closeMode) { + mc.close(closeMode); + } } diff --git a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/io/AS2BHttpServerConnection.java b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/io/AS2BHttpServerConnection.java index 303159e09355d..8da0903c6979b 100644 --- a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/io/AS2BHttpServerConnection.java +++ b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/io/AS2BHttpServerConnection.java @@ -21,44 +21,40 @@ import java.nio.charset.CharsetEncoder; import org.apache.camel.component.as2.api.entity.EntityParser; -import org.apache.http.HttpEntityEnclosingRequest; -import org.apache.http.HttpException; -import org.apache.http.HttpRequest; -import org.apache.http.HttpResponse; -import org.apache.http.config.MessageConstraints; -import org.apache.http.entity.ContentLengthStrategy; -import org.apache.http.impl.DefaultBHttpServerConnection; -import org.apache.http.io.HttpMessageParserFactory; -import org.apache.http.io.HttpMessageWriterFactory; +import org.apache.hc.core5.http.ClassicHttpRequest; +import org.apache.hc.core5.http.ClassicHttpResponse; +import org.apache.hc.core5.http.ContentLengthStrategy; +import org.apache.hc.core5.http.HttpException; +import org.apache.hc.core5.http.config.Http1Config; +import org.apache.hc.core5.http.impl.io.DefaultBHttpServerConnection; +import org.apache.hc.core5.http.io.HttpMessageParserFactory; +import org.apache.hc.core5.http.io.HttpMessageWriterFactory; public class AS2BHttpServerConnection extends DefaultBHttpServerConnection { - public AS2BHttpServerConnection(int buffersize) { - super(buffersize); + public AS2BHttpServerConnection(Http1Config http1Config) { + this(http1Config, null, null); } - public AS2BHttpServerConnection(int buffersize, + public AS2BHttpServerConnection(Http1Config http1Config, CharsetDecoder chardecoder, - CharsetEncoder charencoder, - MessageConstraints constraints) { - super(buffersize, chardecoder, charencoder, constraints); + CharsetEncoder charencoder) { + this(http1Config, chardecoder, charencoder, null, null, null, null); } - public AS2BHttpServerConnection(int buffersize, - int fragmentSizeHint, + public AS2BHttpServerConnection(Http1Config http1Config, CharsetDecoder chardecoder, CharsetEncoder charencoder, - MessageConstraints constraints, ContentLengthStrategy incomingContentStrategy, ContentLengthStrategy outgoingContentStrategy, - HttpMessageParserFactory requestParserFactory, - HttpMessageWriterFactory responseWriterFactory) { - super(buffersize, fragmentSizeHint, chardecoder, charencoder, constraints, incomingContentStrategy, + HttpMessageParserFactory requestParserFactory, + HttpMessageWriterFactory responseWriterFactory) { + super(null, http1Config, chardecoder, charencoder, incomingContentStrategy, outgoingContentStrategy, requestParserFactory, responseWriterFactory); } @Override - public void receiveRequestEntity(HttpEntityEnclosingRequest request) throws HttpException, IOException { + public void receiveRequestEntity(ClassicHttpRequest request) throws HttpException, IOException { super.receiveRequestEntity(request); EntityParser.parseAS2MessageEntity(request); } diff --git a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/io/AS2SessionInputBuffer.java b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/io/AS2SessionInputBuffer.java index a523c720a086f..5463898201d2b 100644 --- a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/io/AS2SessionInputBuffer.java +++ b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/io/AS2SessionInputBuffer.java @@ -24,31 +24,27 @@ import java.nio.charset.CoderResult; import org.apache.camel.util.ObjectHelper; -import org.apache.http.MessageConstraintException; -import org.apache.http.config.MessageConstraints; -import org.apache.http.impl.io.HttpTransportMetricsImpl; -import org.apache.http.io.BufferInfo; -import org.apache.http.io.HttpTransportMetrics; -import org.apache.http.io.SessionInputBuffer; -import org.apache.http.protocol.HTTP; -import org.apache.http.util.Args; -import org.apache.http.util.Asserts; -import org.apache.http.util.ByteArrayBuffer; -import org.apache.http.util.CharArrayBuffer; +import org.apache.hc.core5.http.impl.BasicHttpTransportMetrics; +import org.apache.hc.core5.http.io.HttpTransportMetrics; +import org.apache.hc.core5.http.io.SessionInputBuffer; +import org.apache.hc.core5.util.Args; +import org.apache.hc.core5.util.ByteArrayBuffer; +import org.apache.hc.core5.util.CharArrayBuffer; import static org.apache.camel.util.BufferCaster.cast; -public class AS2SessionInputBuffer implements SessionInputBuffer, BufferInfo { +public class AS2SessionInputBuffer implements SessionInputBuffer { - private final HttpTransportMetricsImpl metrics; + private static final int CR = 13; // + private static final int LF = 10; // + + private final BasicHttpTransportMetrics metrics; private final byte[] buffer; private final ByteArrayBuffer linebuffer; private final int minChunkLimit; - private final MessageConstraints constraints; private CharsetDecoder decoder; - private InputStream instream; private int bufferpos; private int bufferlen; private CharBuffer cbuf; @@ -56,22 +52,20 @@ public class AS2SessionInputBuffer implements SessionInputBuffer, BufferInfo { private boolean lastLineReadEnrichedByCarriageReturn; private boolean lastLineReadTerminatedByLineFeed; - public AS2SessionInputBuffer(final HttpTransportMetricsImpl metrics, + public AS2SessionInputBuffer(final BasicHttpTransportMetrics metrics, final int buffersize, - final int minChunkLimit, - MessageConstraints constraints) { + final int minChunkLimit) { this.metrics = ObjectHelper.notNull(metrics, "metrics"); Args.positive(buffersize, "buffersize"); this.buffer = new byte[buffersize]; this.bufferpos = 0; this.bufferlen = 0; this.minChunkLimit = minChunkLimit >= 0 ? minChunkLimit : 512; - this.constraints = constraints != null ? constraints : MessageConstraints.DEFAULT; this.linebuffer = new ByteArrayBuffer(buffersize); } - public AS2SessionInputBuffer(final HttpTransportMetricsImpl metrics, final int buffersize) { - this(metrics, buffersize, buffersize, null); + public AS2SessionInputBuffer(BasicHttpTransportMetrics metrics, int buffersize) { + this(metrics, buffersize, buffersize); } public CharsetDecoder getCharsetDecoder() { @@ -82,14 +76,6 @@ public void setCharsetDecoder(CharsetDecoder chardecoder) { this.decoder = chardecoder; } - public void bind(final InputStream instream) { - this.instream = instream; - } - - public boolean isBound() { - return this.instream != null; - } - @Override public int length() { return this.bufferlen - this.bufferpos; @@ -105,7 +91,7 @@ public int available() { return capacity() - length(); } - public int fillBuffer() throws IOException { + public int fillBuffer(InputStream inputStream) throws IOException { // compact the buffer if necessary if (this.bufferpos > 0) { final int len = this.bufferlen - this.bufferpos; @@ -118,7 +104,7 @@ public int fillBuffer() throws IOException { final int l; final int off = this.bufferlen; final int len = this.buffer.length - off; - l = streamRead(this.buffer, off, len); + l = inputStream.read(this.buffer, off, len); if (l == -1) { return -1; } else { @@ -133,7 +119,7 @@ public boolean hasBufferedData() { } @Override - public int read(byte[] b, int off, int len) throws IOException { + public int read(byte[] b, int off, int len, InputStream inputStream) throws IOException { if (b == null) { return 0; } @@ -146,7 +132,7 @@ public int read(byte[] b, int off, int len) throws IOException { // If the remaining capacity is big enough, read directly from the // underlying input stream bypassing the buffer. if (len > this.minChunkLimit) { - final int read = streamRead(b, off, len); + final int read = inputStream.read(b, off, len); if (read > 0) { this.metrics.incrementBytesTransferred(read); } @@ -154,7 +140,7 @@ public int read(byte[] b, int off, int len) throws IOException { } else { // otherwise read to the buffer first while (!hasBufferedData()) { - final int noRead = fillBuffer(); + final int noRead = fillBuffer(inputStream); if (noRead == -1) { return -1; } @@ -167,18 +153,18 @@ public int read(byte[] b, int off, int len) throws IOException { } @Override - public int read(byte[] b) throws IOException { + public int read(byte[] b, InputStream inputStream) throws IOException { if (b == null) { return 0; } - return read(b, 0, b.length); + return inputStream.read(b, 0, b.length); } @Override - public int read() throws IOException { + public int read(InputStream inputStream) throws IOException { int noRead; while (!hasBufferedData()) { - noRead = fillBuffer(); + noRead = fillBuffer(inputStream); if (noRead == -1) { return -1; } @@ -187,9 +173,8 @@ public int read() throws IOException { } @Override - public int readLine(CharArrayBuffer charbuffer) throws IOException { + public int readLine(CharArrayBuffer charbuffer, InputStream inputStream) throws IOException { ObjectHelper.notNull(charbuffer, "Char array buffer"); - final int maxLineLen = this.constraints.getMaxLineLength(); int noRead = 0; boolean retry = true; this.lastLineReadEnrichedByCarriageReturn = false; @@ -198,23 +183,16 @@ public int readLine(CharArrayBuffer charbuffer) throws IOException { // attempt to find end of line (LF) int pos = -1; for (int i = this.bufferpos; i < this.bufferlen; i++) { - if (this.buffer[i] == HTTP.LF) { + if (this.buffer[i] == LF) { pos = i; this.lastLineReadTerminatedByLineFeed = true; - if (i > 0 && this.buffer[i - 1] == HTTP.CR) { + if (i > 0 && this.buffer[i - 1] == CR) { this.lastLineReadEnrichedByCarriageReturn = true; } break; } } - if (maxLineLen > 0) { - final int currentLen = this.linebuffer.length() + (pos > 0 ? pos : this.bufferlen) - this.bufferpos; - if (currentLen >= maxLineLen) { - throw new MessageConstraintException("Maximum line length limit exceeded"); - } - } - if (pos != -1) { // end of line found. if (this.linebuffer.isEmpty()) { @@ -228,7 +206,7 @@ public int readLine(CharArrayBuffer charbuffer) throws IOException { if (hasBufferedData()) { addBytesToLinebuffer(pos); } - noRead = fillBuffer(); + noRead = fillBuffer(inputStream); if (noRead == -1) { // end of stream reached. retry = false; @@ -243,17 +221,6 @@ public int readLine(CharArrayBuffer charbuffer) throws IOException { return lineFromLineBuffer(charbuffer); } - @Override - public String readLine() throws IOException { - final CharArrayBuffer charbuffer = new CharArrayBuffer(64); - final int l = readLine(charbuffer); - if (l != -1) { - return charbuffer.toString(); - } else { - return null; - } - } - public boolean isLastLineReadTerminatedByLineFeed() { return lastLineReadTerminatedByLineFeed; } @@ -262,31 +229,21 @@ public boolean isLastLineReadEnrichedByCarriageReturn() { return lastLineReadEnrichedByCarriageReturn; } - @Override - public boolean isDataAvailable(int timeout) throws IOException { - return hasBufferedData(); - } - @Override public HttpTransportMetrics getMetrics() { return this.metrics; } - private int streamRead(final byte[] b, final int off, final int len) throws IOException { - Asserts.notNull(this.instream, "Input stream"); - return this.instream.read(b, off, len); - } - private int lineFromLineBuffer(final CharArrayBuffer charbuffer) throws IOException { // discard LF if found int len = this.linebuffer.length(); if (len > 0) { - if (this.linebuffer.byteAt(len - 1) == HTTP.LF) { + if (this.linebuffer.byteAt(len - 1) == LF) { len--; } // discard CR if found if (len > 0) { - if (this.linebuffer.byteAt(len - 1) == HTTP.CR) { + if (this.linebuffer.byteAt(len - 1) == CR) { len--; } } @@ -295,7 +252,7 @@ private int lineFromLineBuffer(final CharArrayBuffer charbuffer) throws IOExcept if (this.decoder == null) { charbuffer.append(this.linebuffer, 0, len); } else { - final ByteBuffer bbuf = ByteBuffer.wrap(this.linebuffer.buffer(), 0, len); + final ByteBuffer bbuf = ByteBuffer.wrap(linebuffer.toByteArray(), 0, len); len = appendDecoded(charbuffer, bbuf); } this.linebuffer.clear(); @@ -308,7 +265,7 @@ private int lineFromReadBuffer(final CharArrayBuffer charbuffer, final int posit final int off = this.bufferpos; int len; this.bufferpos = pos + 1; - if (pos > off && this.buffer[pos - 1] == HTTP.CR) { + if (pos > off && this.buffer[pos - 1] == CR) { // skip CR if found pos--; } diff --git a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/protocol/RequestAS2.java b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/protocol/RequestAS2.java index 39aabc18b8bf9..90500ba4775a7 100644 --- a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/protocol/RequestAS2.java +++ b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/protocol/RequestAS2.java @@ -23,11 +23,12 @@ import org.apache.camel.component.as2.api.AS2Header; import org.apache.camel.component.as2.api.InvalidAS2NameException; import org.apache.camel.component.as2.api.util.AS2Utils; -import org.apache.http.HttpException; -import org.apache.http.HttpRequest; -import org.apache.http.HttpRequestInterceptor; -import org.apache.http.protocol.HttpContext; -import org.apache.http.protocol.HttpCoreContext; +import org.apache.hc.core5.http.EntityDetails; +import org.apache.hc.core5.http.HttpException; +import org.apache.hc.core5.http.HttpRequest; +import org.apache.hc.core5.http.HttpRequestInterceptor; +import org.apache.hc.core5.http.protocol.HttpContext; +import org.apache.hc.core5.http.protocol.HttpCoreContext; public class RequestAS2 implements HttpRequestInterceptor { @@ -40,7 +41,7 @@ public RequestAS2(String as2Version, String clientFQDN) { } @Override - public void process(HttpRequest request, HttpContext context) throws HttpException, IOException { + public void process(HttpRequest request, EntityDetails entity, HttpContext context) throws HttpException, IOException { HttpCoreContext coreContext = HttpCoreContext.adapt(context); diff --git a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/protocol/RequestAsynchronousMDN.java b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/protocol/RequestAsynchronousMDN.java index 74cc1a1df0296..f4dd44ddc2c44 100644 --- a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/protocol/RequestAsynchronousMDN.java +++ b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/protocol/RequestAsynchronousMDN.java @@ -22,11 +22,12 @@ import org.apache.camel.component.as2.api.AS2Constants; import org.apache.camel.component.as2.api.AS2Header; import org.apache.camel.component.as2.api.util.AS2Utils; -import org.apache.http.HttpException; -import org.apache.http.HttpRequest; -import org.apache.http.HttpRequestInterceptor; -import org.apache.http.protocol.HttpContext; -import org.apache.http.protocol.HttpCoreContext; +import org.apache.hc.core5.http.EntityDetails; +import org.apache.hc.core5.http.HttpException; +import org.apache.hc.core5.http.HttpRequest; +import org.apache.hc.core5.http.HttpRequestInterceptor; +import org.apache.hc.core5.http.protocol.HttpContext; +import org.apache.hc.core5.http.protocol.HttpCoreContext; public class RequestAsynchronousMDN implements HttpRequestInterceptor { @@ -39,7 +40,7 @@ public RequestAsynchronousMDN(String as2Version, String senderFQDN) { } @Override - public void process(HttpRequest request, HttpContext context) throws HttpException, IOException { + public void process(HttpRequest request, EntityDetails entity, HttpContext context) throws HttpException, IOException { HttpCoreContext coreContext = HttpCoreContext.adapt(context); diff --git a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/protocol/RequestMDN.java b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/protocol/RequestMDN.java index b517e8cc556cb..a63f0c8141ac1 100644 --- a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/protocol/RequestMDN.java +++ b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/protocol/RequestMDN.java @@ -20,12 +20,13 @@ import org.apache.camel.component.as2.api.AS2ClientManager; import org.apache.camel.component.as2.api.AS2Header; -import org.apache.http.HttpException; -import org.apache.http.HttpRequest; -import org.apache.http.HttpRequestInterceptor; -import org.apache.http.protocol.HttpContext; -import org.apache.http.protocol.HttpCoreContext; -import org.apache.http.util.CharArrayBuffer; +import org.apache.hc.core5.http.EntityDetails; +import org.apache.hc.core5.http.HttpException; +import org.apache.hc.core5.http.HttpRequest; +import org.apache.hc.core5.http.HttpRequestInterceptor; +import org.apache.hc.core5.http.protocol.HttpContext; +import org.apache.hc.core5.http.protocol.HttpCoreContext; +import org.apache.hc.core5.util.CharArrayBuffer; public class RequestMDN implements HttpRequestInterceptor { @@ -33,7 +34,7 @@ public class RequestMDN implements HttpRequestInterceptor { = "signed-receipt-protocol=optional, pkcs7-signature; signed-receipt-micalg=optional"; @Override - public void process(HttpRequest request, HttpContext context) throws HttpException, IOException { + public void process(HttpRequest request, EntityDetails entity, HttpContext context) throws HttpException, IOException { HttpCoreContext coreContext = HttpCoreContext.adapt(context); diff --git a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/protocol/ResponseMDN.java b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/protocol/ResponseMDN.java index 2faa0354f2d69..9a8d03de6087d 100644 --- a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/protocol/ResponseMDN.java +++ b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/protocol/ResponseMDN.java @@ -45,14 +45,15 @@ import org.apache.camel.component.as2.api.util.HttpMessageUtils; import org.apache.camel.component.as2.api.util.SigningUtils; import org.apache.commons.lang3.StringUtils; -import org.apache.http.Header; -import org.apache.http.HttpEntityEnclosingRequest; -import org.apache.http.HttpException; -import org.apache.http.HttpRequest; -import org.apache.http.HttpResponse; -import org.apache.http.HttpResponseInterceptor; -import org.apache.http.protocol.HttpContext; -import org.apache.http.protocol.HttpCoreContext; +import org.apache.hc.core5.http.ClassicHttpRequest; +import org.apache.hc.core5.http.EntityDetails; +import org.apache.hc.core5.http.Header; +import org.apache.hc.core5.http.HttpException; +import org.apache.hc.core5.http.HttpRequest; +import org.apache.hc.core5.http.HttpResponse; +import org.apache.hc.core5.http.HttpResponseInterceptor; +import org.apache.hc.core5.http.protocol.HttpContext; +import org.apache.hc.core5.http.protocol.HttpCoreContext; import org.apache.velocity.VelocityContext; import org.apache.velocity.app.VelocityEngine; import org.apache.velocity.context.Context; @@ -107,9 +108,9 @@ public ResponseMDN(String as2Version, String serverFQDN, AS2SignatureAlgorithm s } @Override - public void process(HttpResponse response, HttpContext context) throws HttpException, IOException { + public void process(HttpResponse response, EntityDetails entity, HttpContext context) throws HttpException, IOException { - int statusCode = response.getStatusLine().getStatusCode(); + int statusCode = response.getCode(); if (statusCode < 200 || statusCode >= 300) { // RFC4130 - 7.6 - Status codes in the 200 range SHOULD also be used when an entity is returned // (a signed receipt in a multipart/signed content type or an unsigned @@ -121,7 +122,7 @@ public void process(HttpResponse response, HttpContext context) throws HttpExcep HttpCoreContext coreContext = HttpCoreContext.adapt(context); HttpRequest request = coreContext.getAttribute(HttpCoreContext.HTTP_REQUEST, HttpRequest.class); - if (request == null || !(request instanceof HttpEntityEnclosingRequest httpEntityEnclosingRequest)) { + if (request == null || !(request instanceof ClassicHttpRequest httpEntityEnclosingRequest)) { // Not an enclosing request so nothing to do. return; } @@ -232,14 +233,14 @@ public void process(HttpResponse response, HttpContext context) throws HttpExcep MultipartSignedEntity multipartSignedEntity = new MultipartSignedEntity( multipartReportEntity, gen, StandardCharsets.US_ASCII.name(), AS2TransferEncoding.BASE64, false, null); - response.setHeader(multipartSignedEntity.getContentType()); + response.setHeader(AS2Header.CONTENT_TYPE, multipartSignedEntity.getContentType()); EntityUtils.setMessageEntity(response, multipartSignedEntity); } catch (Exception e) { LOG.warn("failed to sign receipt"); } } else { // Create unsigned receipt - response.setHeader(multipartReportEntity.getContentType()); + response.setHeader(AS2Header.CONTENT_TYPE, multipartReportEntity.getContentType()); EntityUtils.setMessageEntity(response, multipartReportEntity); } } @@ -250,7 +251,7 @@ public void process(HttpResponse response, HttpContext context) throws HttpExcep } private String createMdnDescription( - HttpEntityEnclosingRequest request, + ClassicHttpRequest request, HttpResponse response, DispositionMode dispositionMode, AS2DispositionType dispositionType, @@ -266,13 +267,13 @@ private String createMdnDescription( Context context = new VelocityContext(); context.put("request", request); Map requestHeaders = new HashMap<>(); - for (Header header : request.getAllHeaders()) { + for (Header header : request.getHeaders()) { requestHeaders.put(header.getName(), header.getValue()); } context.put("requestHeaders", requestHeaders); Map responseHeaders = new HashMap<>(); - for (Header header : response.getAllHeaders()) { + for (Header header : response.getHeaders()) { responseHeaders.put(header.getName(), header.getValue()); } context.put("responseHeaders", responseHeaders); diff --git a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/util/AS2HeaderUtils.java b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/util/AS2HeaderUtils.java index 89e3b3b9909ac..93342dc3739b9 100644 --- a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/util/AS2HeaderUtils.java +++ b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/util/AS2HeaderUtils.java @@ -22,13 +22,14 @@ import org.apache.camel.component.as2.api.entity.Importance; import org.apache.camel.util.ObjectHelper; -import org.apache.http.Header; -import org.apache.http.HeaderElement; -import org.apache.http.NameValuePair; -import org.apache.http.message.BasicHeader; -import org.apache.http.message.ParserCursor; -import org.apache.http.message.TokenParser; -import org.apache.http.util.CharArrayBuffer; +import org.apache.hc.core5.http.Header; +import org.apache.hc.core5.http.HeaderElement; +import org.apache.hc.core5.http.NameValuePair; +import org.apache.hc.core5.http.message.BasicHeader; +import org.apache.hc.core5.http.message.MessageSupport; +import org.apache.hc.core5.http.message.ParserCursor; +import org.apache.hc.core5.http.message.TokenParser; +import org.apache.hc.core5.util.CharArrayBuffer; public final class AS2HeaderUtils { @@ -149,7 +150,7 @@ public static String getParameterValue(Header[] headers, String headerName, Stri ObjectHelper.notNull(headerName, "headerName"); for (Header header : headers) { if (header.getName().equalsIgnoreCase(headerName)) { - for (HeaderElement headerElement : header.getElements()) { + for (HeaderElement headerElement : MessageSupport.parse(header)) { for (NameValuePair nameValuePair : headerElement.getParameters()) { if (nameValuePair.getName().equalsIgnoreCase(parameterName)) { return nameValuePair.getValue(); diff --git a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/util/AS2Utils.java b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/util/AS2Utils.java index 249c7302cb1e4..a4fb208dc73c2 100644 --- a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/util/AS2Utils.java +++ b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/util/AS2Utils.java @@ -22,19 +22,20 @@ import java.io.PrintStream; import java.nio.charset.StandardCharsets; import java.security.SecureRandom; +import java.util.Iterator; import java.util.regex.Matcher; import java.util.regex.Pattern; import org.apache.camel.component.as2.api.InvalidAS2NameException; -import org.apache.http.Header; -import org.apache.http.HeaderIterator; -import org.apache.http.HttpEntity; -import org.apache.http.HttpEntityEnclosingRequest; -import org.apache.http.HttpMessage; -import org.apache.http.HttpRequest; -import org.apache.http.HttpResponse; -import org.apache.http.RequestLine; -import org.apache.http.StatusLine; +import org.apache.hc.core5.http.Header; +import org.apache.hc.core5.http.HttpEntity; +import org.apache.hc.core5.http.HttpMessage; +import org.apache.hc.core5.http.HttpRequest; +import org.apache.hc.core5.http.HttpResponse; +import org.apache.hc.core5.http.message.BasicClassicHttpRequest; +import org.apache.hc.core5.http.message.BasicClassicHttpResponse; +import org.apache.hc.core5.http.message.RequestLine; +import org.apache.hc.core5.http.message.StatusLine; /** * Utility Methods used in AS2 Component @@ -128,19 +129,17 @@ public static String printMessage(HttpMessage message) throws IOException { */ public static void printRequest(PrintStream out, HttpRequest request) throws IOException { // Print request line - RequestLine requestLine = request.getRequestLine(); - out.println(requestLine.getMethod() + ' ' + requestLine.getUri() + ' ' + requestLine.getProtocolVersion()); - + out.println(new RequestLine(request)); // Write headers - for (final HeaderIterator it = request.headerIterator(); it.hasNext();) { - Header header = it.nextHeader(); + for (final Iterator
it = request.headerIterator(); it.hasNext();) { + Header header = it.next(); out.println(header.getName() + ": " + (header.getValue() == null ? "" : header.getValue())); } out.println(); // write empty line separating header from body. - if (request instanceof HttpEntityEnclosingRequest) { + if (request instanceof BasicClassicHttpRequest) { // Write entity - HttpEntity entity = ((HttpEntityEnclosingRequest) request).getEntity(); + HttpEntity entity = ((BasicClassicHttpRequest) request).getEntity(); entity.writeTo(out); } } @@ -155,28 +154,26 @@ public static void printRequest(PrintStream out, HttpRequest request) throws IOE public static void printMessage(PrintStream out, HttpMessage message) throws IOException { // Print request line if (message instanceof HttpRequest) { - RequestLine requestLine = ((HttpRequest) message).getRequestLine(); - out.println(requestLine.getMethod() + ' ' + requestLine.getUri() + ' ' + requestLine.getProtocolVersion()); + out.println(new RequestLine((HttpRequest) message)); } else { // HttpResponse - StatusLine statusLine = ((HttpResponse) message).getStatusLine(); - out.println(statusLine.toString()); + out.println(new StatusLine((HttpResponse) message)); } // Write headers - for (final HeaderIterator it = message.headerIterator(); it.hasNext();) { - Header header = it.nextHeader(); + for (final Iterator
it = message.headerIterator(); it.hasNext();) { + Header header = it.next(); out.println(header.getName() + ": " + (header.getValue() == null ? "" : header.getValue())); } out.println(); // write empty line separating header from body. - if (message instanceof HttpEntityEnclosingRequest) { + if (message instanceof BasicClassicHttpRequest) { // Write entity - HttpEntity entity = ((HttpEntityEnclosingRequest) message).getEntity(); + HttpEntity entity = ((BasicClassicHttpRequest) message).getEntity(); if (entity != null) { entity.writeTo(out); } - } else if (message instanceof HttpResponse) { + } else if (message instanceof BasicClassicHttpResponse) { // Write entity - HttpEntity entity = ((HttpResponse) message).getEntity(); + HttpEntity entity = ((BasicClassicHttpResponse) message).getEntity(); if (entity != null) { entity.writeTo(out); } diff --git a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/util/ContentTypeUtils.java b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/util/ContentTypeUtils.java index f14d29f2163cd..4ad32bce91a08 100644 --- a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/util/ContentTypeUtils.java +++ b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/util/ContentTypeUtils.java @@ -18,7 +18,7 @@ import org.apache.camel.component.as2.api.AS2MediaType; import org.apache.camel.component.as2.api.AS2MimeType; -import org.apache.http.entity.ContentType; +import org.apache.hc.core5.http.ContentType; public final class ContentTypeUtils { diff --git a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/util/DispositionNotificationContentUtils.java b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/util/DispositionNotificationContentUtils.java index 7350d0af7fcf7..36cddc5c437f8 100644 --- a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/util/DispositionNotificationContentUtils.java +++ b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/util/DispositionNotificationContentUtils.java @@ -30,10 +30,10 @@ import org.apache.camel.component.as2.api.util.DispositionNotificationContentUtils.Field.Element; import org.apache.camel.component.as2.api.util.MicUtils.ReceivedContentMic; import org.apache.camel.util.ObjectHelper; -import org.apache.http.ParseException; -import org.apache.http.message.ParserCursor; -import org.apache.http.message.TokenParser; -import org.apache.http.util.CharArrayBuffer; +import org.apache.hc.core5.http.ParseException; +import org.apache.hc.core5.http.message.ParserCursor; +import org.apache.hc.core5.http.message.TokenParser; +import org.apache.hc.core5.util.CharArrayBuffer; public final class DispositionNotificationContentUtils { @@ -253,7 +253,7 @@ public static AS2MessageDispositionNotificationEntity parseDispositionNotificati receivedContentMic); } - public static Field parseDispositionField(CharArrayBuffer fieldLine) { + public static Field parseDispositionField(CharArrayBuffer fieldLine) throws ParseException { final int colon = fieldLine.indexOf(':'); if (colon == -1) { throw new ParseException("Invalid field: " + fieldLine.toString()); diff --git a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/util/EncryptingUtils.java b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/util/EncryptingUtils.java index 7d01eb3c75a59..1302076f49fa8 100644 --- a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/util/EncryptingUtils.java +++ b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/util/EncryptingUtils.java @@ -22,7 +22,7 @@ import org.apache.camel.component.as2.api.AS2EncryptionAlgorithm; import org.apache.camel.util.ObjectHelper; -import org.apache.http.HttpException; +import org.apache.hc.core5.http.HttpException; import org.bouncycastle.cms.CMSEnvelopedDataGenerator; import org.bouncycastle.cms.CMSException; import org.bouncycastle.cms.jcajce.JceCMSContentEncryptorBuilder; diff --git a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/util/EntityUtils.java b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/util/EntityUtils.java index 7f93bf581b1ec..ca817abfb905b 100644 --- a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/util/EntityUtils.java +++ b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/util/EntityUtils.java @@ -39,12 +39,12 @@ import org.apache.commons.codec.binary.Base64InputStream; import org.apache.commons.codec.binary.Base64OutputStream; import org.apache.commons.codec.net.QuotedPrintableCodec; -import org.apache.http.Header; -import org.apache.http.HttpEntity; -import org.apache.http.HttpEntityEnclosingRequest; -import org.apache.http.HttpMessage; -import org.apache.http.HttpResponse; -import org.apache.http.entity.ContentType; +import org.apache.hc.core5.http.ClassicHttpRequest; +import org.apache.hc.core5.http.ClassicHttpResponse; +import org.apache.hc.core5.http.ContentType; +import org.apache.hc.core5.http.Header; +import org.apache.hc.core5.http.HttpEntity; +import org.apache.hc.core5.http.HttpMessage; import org.bouncycastle.util.encoders.Base64; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -220,32 +220,32 @@ public static byte[] getContent(HttpEntity entity) { public static boolean hasEntity(HttpMessage message) { boolean hasEntity = false; - if (message instanceof HttpEntityEnclosingRequest httpEntityEnclosingRequest) { + if (message instanceof ClassicHttpRequest httpEntityEnclosingRequest) { hasEntity = httpEntityEnclosingRequest.getEntity() != null; - } else if (message instanceof HttpResponse httpResponse) { + } else if (message instanceof ClassicHttpResponse httpResponse) { hasEntity = httpResponse.getEntity() != null; } return hasEntity; } public static HttpEntity getMessageEntity(HttpMessage message) { - if (message instanceof HttpEntityEnclosingRequest httpEntityEnclosingRequest) { + if (message instanceof ClassicHttpRequest httpEntityEnclosingRequest) { return httpEntityEnclosingRequest.getEntity(); - } else if (message instanceof HttpResponse httpResponse) { + } else if (message instanceof ClassicHttpResponse httpResponse) { return httpResponse.getEntity(); } return null; } public static void setMessageEntity(HttpMessage message, HttpEntity entity) { - if (message instanceof HttpEntityEnclosingRequest httpEntityEnclosingRequest) { + if (message instanceof ClassicHttpRequest httpEntityEnclosingRequest) { httpEntityEnclosingRequest.setEntity(entity); - } else if (message instanceof HttpResponse httpResponse) { + } else if (message instanceof ClassicHttpResponse httpResponse) { httpResponse.setEntity(entity); } - Header contentTypeHeader = entity.getContentType(); - if (contentTypeHeader != null) { - message.setHeader(contentTypeHeader); + String contentType = entity.getContentType(); + if (contentType != null) { + message.setHeader(AS2Header.CONTENT_TYPE, contentType); } if (entity instanceof MimeEntity mimeEntity) { Header contentTransferEncodingHeader = mimeEntity.getContentTransferEncoding(); diff --git a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/util/HttpMessageUtils.java b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/util/HttpMessageUtils.java index 507056dbd049d..cda8cfe6a002b 100644 --- a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/util/HttpMessageUtils.java +++ b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/util/HttpMessageUtils.java @@ -29,17 +29,16 @@ import org.apache.camel.component.as2.api.entity.MimeEntity; import org.apache.camel.component.as2.api.entity.MultipartSignedEntity; import org.apache.camel.util.ObjectHelper; -import org.apache.http.Header; -import org.apache.http.HeaderElement; -import org.apache.http.HttpEntity; -import org.apache.http.HttpEntityEnclosingRequest; -import org.apache.http.HttpException; -import org.apache.http.HttpMessage; -import org.apache.http.HttpResponse; -import org.apache.http.NameValuePair; -import org.apache.http.entity.ContentType; -import org.apache.http.io.SessionInputBuffer; -import org.apache.http.util.CharArrayBuffer; +import org.apache.hc.core5.http.ContentType; +import org.apache.hc.core5.http.Header; +import org.apache.hc.core5.http.HeaderElement; +import org.apache.hc.core5.http.HttpEntity; +import org.apache.hc.core5.http.HttpException; +import org.apache.hc.core5.http.HttpMessage; +import org.apache.hc.core5.http.NameValuePair; +import org.apache.hc.core5.http.message.BasicClassicHttpRequest; +import org.apache.hc.core5.http.message.BasicClassicHttpResponse; +import org.apache.hc.core5.http.message.MessageSupport; import org.bouncycastle.cms.jcajce.ZlibExpanderProvider; public final class HttpMessageUtils { @@ -65,12 +64,12 @@ public static void setHeaderValue(HttpMessage message, String headerName, String public static T getEntity(HttpMessage message, Class type) { ObjectHelper.notNull(message, "message"); ObjectHelper.notNull(type, "type"); - if (message instanceof HttpEntityEnclosingRequest httpEntityEnclosingRequest) { + if (message instanceof BasicClassicHttpRequest httpEntityEnclosingRequest) { HttpEntity entity = httpEntityEnclosingRequest.getEntity(); if (entity != null && type.isInstance(entity)) { return type.cast(entity); } - } else if (message instanceof HttpResponse httpResponse) { + } else if (message instanceof BasicClassicHttpResponse httpResponse) { HttpEntity entity = httpResponse.getEntity(); if (entity != null && type.isInstance(entity)) { type.cast(entity); @@ -79,36 +78,6 @@ public static T getEntity(HttpMessage message, Class type) { return null; } - public static String parseBodyPartContent(SessionInputBuffer inBuffer, String boundary) throws HttpException { - try { - CharArrayBuffer bodyPartContentBuffer = new CharArrayBuffer(1024); - CharArrayBuffer lineBuffer = new CharArrayBuffer(1024); - boolean foundMultipartEndBoundary = false; - while (inBuffer.readLine(lineBuffer) != -1) { - if (EntityParser.isBoundaryDelimiter(lineBuffer, null, boundary)) { - foundMultipartEndBoundary = true; - // Remove previous line ending: this is associated with - // boundary - bodyPartContentBuffer.setLength(bodyPartContentBuffer.length() - 2); - lineBuffer.clear(); - break; - } - lineBuffer.append("\r\n"); // add line delimiter - bodyPartContentBuffer.append(lineBuffer); - lineBuffer.clear(); - } - if (!foundMultipartEndBoundary) { - throw new HttpException("Failed to find end boundary delimiter for body part"); - } - - return bodyPartContentBuffer.toString(); - } catch (HttpException e) { - throw e; - } catch (Exception e) { - throw new HttpException("Failed to parse body part content", e); - } - } - public static String getParameterValue(HttpMessage message, String headerName, String parameterName) { ObjectHelper.notNull(message, "message"); ObjectHelper.notNull(headerName, "headerName"); @@ -117,7 +86,7 @@ public static String getParameterValue(HttpMessage message, String headerName, S if (header == null) { return null; } - for (HeaderElement headerElement : header.getElements()) { + for (HeaderElement headerElement : MessageSupport.parse(header)) { for (NameValuePair nameValuePair : headerElement.getParameters()) { if (nameValuePair.getName().equalsIgnoreCase(parameterName)) { return nameValuePair.getValue(); @@ -229,7 +198,7 @@ private static ApplicationEntity extractMultipartSigned( ediEntity = extractEdiPayloadFromCompressedEntity(compressedDataEntity, decrpytingAndSigningInfo); } else { throw new HttpException( - "Failed to extract EDI payload: invalid content type '" + mimeEntity.getContentTypeValue() + "Failed to extract EDI payload: invalid content type '" + mimeEntity.getContentType() + "' for AS2 compressed and signed message"); } return ediEntity; @@ -241,7 +210,7 @@ private static ApplicationEntity extractEdiPayloadFromEnvelopedEntity( ApplicationEntity ediEntity; MimeEntity entity = envelopedDataEntity.getEncryptedEntity(decrpytingAndSigningInfo.getDecryptingPrivateKey()); - String contentTypeString = entity.getContentTypeValue(); + String contentTypeString = entity.getContentType(); if (contentTypeString == null) { throw new HttpException("Failed to extract EDI message: content type missing from encrypted entity"); } @@ -269,7 +238,7 @@ private static ApplicationEntity extractEdiPayloadFromEnvelopedEntity( } else { throw new HttpException( - "Failed to extract EDI payload: invalid content type '" + mimeEntity.getContentTypeValue() + "Failed to extract EDI payload: invalid content type '" + mimeEntity.getContentType() + "' for AS2 compressed and signed entity"); } break; @@ -300,7 +269,7 @@ public static ApplicationEntity extractEdiPayloadFromCompressedEntity( ApplicationEntity ediEntity; MimeEntity entity = compressedDataEntity.getCompressedEntity(new ZlibExpanderProvider()); - String contentTypeString = entity.getContentTypeValue(); + String contentTypeString = entity.getContentType(); if (contentTypeString == null) { throw new HttpException("Failed to extract EDI payload: content type missing from compressed entity"); } @@ -326,7 +295,7 @@ public static ApplicationEntity extractEdiPayloadFromCompressedEntity( } else { throw new HttpException( - "Failed to extract EDI payload: invalid content type '" + mimeEntity.getContentTypeValue() + "Failed to extract EDI payload: invalid content type '" + mimeEntity.getContentType() + "' for AS2 compressed and signed entity"); } break; diff --git a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/util/MicUtils.java b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/util/MicUtils.java index 87f42229fa134..b1699058d8a95 100644 --- a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/util/MicUtils.java +++ b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/util/MicUtils.java @@ -27,9 +27,9 @@ import org.apache.camel.component.as2.api.AS2MicAlgorithm; import org.apache.camel.component.as2.api.entity.DispositionNotificationOptions; import org.apache.camel.component.as2.api.entity.DispositionNotificationOptionsParser; -import org.apache.http.HttpEntity; -import org.apache.http.HttpEntityEnclosingRequest; -import org.apache.http.HttpException; +import org.apache.hc.core5.http.ClassicHttpRequest; +import org.apache.hc.core5.http.HttpEntity; +import org.apache.hc.core5.http.HttpException; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -80,7 +80,7 @@ public static byte[] createMic(byte[] content, String algorithmId) { } public static ReceivedContentMic createReceivedContentMic( - HttpEntityEnclosingRequest request, Certificate[] validateSigningCertificateChain, PrivateKey decryptingPrivateKey) + ClassicHttpRequest request, Certificate[] validateSigningCertificateChain, PrivateKey decryptingPrivateKey) throws HttpException { String dispositionNotificationOptionsString diff --git a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/util/SigningUtils.java b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/util/SigningUtils.java index f2cdf8f44c0ca..9ea451a5e1c39 100644 --- a/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/util/SigningUtils.java +++ b/components/camel-as2/camel-as2-api/src/main/java/org/apache/camel/component/as2/api/util/SigningUtils.java @@ -31,7 +31,7 @@ import org.apache.camel.component.as2.api.entity.MimeEntity; import org.apache.camel.component.as2.api.entity.MultipartSignedEntity; import org.apache.camel.util.ObjectHelper; -import org.apache.http.HttpException; +import org.apache.hc.core5.http.HttpException; import org.bouncycastle.asn1.ASN1EncodableVector; import org.bouncycastle.asn1.cms.AttributeTable; import org.bouncycastle.asn1.cms.IssuerAndSerialNumber; diff --git a/components/camel-as2/camel-as2-api/src/test/java/org/apache/camel/component/as2/api/AS2MessageTest.java b/components/camel-as2/camel-as2-api/src/test/java/org/apache/camel/component/as2/api/AS2MessageTest.java index 95faa06bfc5b8..74f0f39b84319 100644 --- a/components/camel-as2/camel-as2-api/src/test/java/org/apache/camel/component/as2/api/AS2MessageTest.java +++ b/components/camel-as2/camel-as2-api/src/test/java/org/apache/camel/component/as2/api/AS2MessageTest.java @@ -29,7 +29,11 @@ import java.security.cert.Certificate; import java.security.cert.X509Certificate; import java.time.Duration; -import java.util.*; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; import com.helger.as2lib.client.AS2Client; import com.helger.as2lib.client.AS2ClientRequest; @@ -60,21 +64,23 @@ import org.apache.camel.component.as2.api.util.MicUtils.ReceivedContentMic; import org.apache.camel.component.as2.api.util.SigningUtils; import org.apache.camel.test.AvailablePortFinder; -import org.apache.http.HttpEntity; -import org.apache.http.HttpEntityEnclosingRequest; -import org.apache.http.HttpException; -import org.apache.http.HttpRequest; -import org.apache.http.HttpResponse; -import org.apache.http.HttpStatus; -import org.apache.http.HttpVersion; -import org.apache.http.entity.ContentType; -import org.apache.http.impl.EnglishReasonPhraseCatalog; -import org.apache.http.message.BasicHttpEntityEnclosingRequest; -import org.apache.http.message.BasicHttpResponse; -import org.apache.http.protocol.HttpContext; -import org.apache.http.protocol.HttpCoreContext; -import org.apache.http.protocol.HttpDateGenerator; -import org.apache.http.protocol.HttpRequestHandler; +import org.apache.hc.core5.http.ClassicHttpRequest; +import org.apache.hc.core5.http.ClassicHttpResponse; +import org.apache.hc.core5.http.ContentType; +import org.apache.hc.core5.http.HttpEntity; +import org.apache.hc.core5.http.HttpException; +import org.apache.hc.core5.http.HttpRequest; +import org.apache.hc.core5.http.HttpResponse; +import org.apache.hc.core5.http.HttpStatus; +import org.apache.hc.core5.http.HttpVersion; +import org.apache.hc.core5.http.ProtocolVersion; +import org.apache.hc.core5.http.impl.EnglishReasonPhraseCatalog; +import org.apache.hc.core5.http.io.HttpRequestHandler; +import org.apache.hc.core5.http.message.BasicClassicHttpRequest; +import org.apache.hc.core5.http.message.BasicHttpResponse; +import org.apache.hc.core5.http.protocol.HttpContext; +import org.apache.hc.core5.http.protocol.HttpCoreContext; +import org.apache.hc.core5.http.protocol.HttpDateGenerator; import org.bouncycastle.asn1.ASN1EncodableVector; import org.bouncycastle.asn1.cms.AttributeTable; import org.bouncycastle.asn1.cms.IssuerAndSerialNumber; @@ -158,7 +164,7 @@ public class AS2MessageTest { private static final String[] SIGNED_RECEIPT_MIC_ALGORITHMS = new String[] { "sha1", "md5" }; private static final String MDN_MESSAGE_TEMPLATE = "TBD"; - private static final HttpDateGenerator DATE_GENERATOR = new HttpDateGenerator(); + private static final HttpDateGenerator DATE_GENERATOR = HttpDateGenerator.INSTANCE; private static AS2ServerConnection testServer; private static KeyPair issueKP; @@ -220,7 +226,7 @@ public static void setUpOnce() throws Exception { VALIDATE_SIGNING_CERTIFICATE_CHAIN, null); testServer.listen("*", new HttpRequestHandler() { @Override - public void handle(HttpRequest request, HttpResponse response, HttpContext context) + public void handle(ClassicHttpRequest request, ClassicHttpResponse response, HttpContext context) throws HttpException, IOException { try { org.apache.camel.component.as2.api.entity.EntityParser.parseAS2MessageEntity(request); @@ -291,9 +297,9 @@ public void plainEDIMessageTest() throws Exception { "file.txt"); HttpRequest request = httpContext.getRequest(); - assertEquals(METHOD, request.getRequestLine().getMethod(), "Unexpected method value"); - assertEquals(REQUEST_URI, request.getRequestLine().getUri(), "Unexpected request URI value"); - assertEquals(HttpVersion.HTTP_1_1, request.getRequestLine().getProtocolVersion(), "Unexpected HTTP version value"); + assertEquals(METHOD, request.getMethod(), "Unexpected method value"); + assertEquals(REQUEST_URI, request.getUri().getPath(), "Unexpected request URI value"); + assertEquals(HttpVersion.HTTP_1_1, request.getVersion(), "Unexpected HTTP version value"); assertEquals(SUBJECT, request.getFirstHeader(AS2Header.SUBJECT).getValue(), "Unexpected subject value"); assertEquals(FROM, request.getFirstHeader(AS2Header.FROM).getValue(), "Unexpected from value"); @@ -310,12 +316,12 @@ public void plainEDIMessageTest() throws Exception { assertTrue(request.getFirstHeader(AS2Header.CONTENT_TYPE).getValue().startsWith(AS2MediaType.APPLICATION_EDIFACT), "Unexpected content type for message"); - assertTrue(request instanceof BasicHttpEntityEnclosingRequest, "Request does not contain entity"); - HttpEntity entity = ((BasicHttpEntityEnclosingRequest) request).getEntity(); + assertTrue(request instanceof ClassicHttpRequest, "Request does not contain entity"); + HttpEntity entity = ((ClassicHttpRequest) request).getEntity(); assertNotNull(entity, "Request does not contain entity"); assertTrue(entity instanceof ApplicationEDIFACTEntity, "Unexpected request entity type"); ApplicationEDIFACTEntity ediEntity = (ApplicationEDIFACTEntity) entity; - assertTrue(ediEntity.getContentType().getValue().startsWith(AS2MediaType.APPLICATION_EDIFACT), + assertTrue(ediEntity.getContentType().startsWith(AS2MediaType.APPLICATION_EDIFACT), "Unexpected content type for entity"); assertTrue(ediEntity.isMainBody(), "Entity not set as main body of request"); } @@ -376,9 +382,9 @@ public void multipartSignedMessageTest() throws Exception { null, DISPOSITION_NOTIFICATION_TO, SIGNED_RECEIPT_MIC_ALGORITHMS, null, null, "file.txt"); HttpRequest request = httpContext.getRequest(); - assertEquals(METHOD, request.getRequestLine().getMethod(), "Unexpected method value"); - assertEquals(REQUEST_URI, request.getRequestLine().getUri(), "Unexpected request URI value"); - assertEquals(HttpVersion.HTTP_1_1, request.getRequestLine().getProtocolVersion(), "Unexpected HTTP version value"); + assertEquals(METHOD, request.getMethod(), "Unexpected method value"); + assertEquals(REQUEST_URI, request.getUri().getPath(), "Unexpected request URI value"); + assertEquals(HttpVersion.HTTP_1_1, request.getVersion(), "Unexpected HTTP version value"); assertEquals(SUBJECT, request.getFirstHeader(AS2Header.SUBJECT).getValue(), "Unexpected subject value"); assertEquals(FROM, request.getFirstHeader(AS2Header.FROM).getValue(), "Unexpected from value"); @@ -395,8 +401,8 @@ public void multipartSignedMessageTest() throws Exception { assertTrue(request.getFirstHeader(AS2Header.CONTENT_TYPE).getValue().startsWith(AS2MediaType.MULTIPART_SIGNED), "Unexpected content type for message"); - assertTrue(request instanceof BasicHttpEntityEnclosingRequest, "Request does not contain entity"); - HttpEntity entity = ((BasicHttpEntityEnclosingRequest) request).getEntity(); + assertTrue(request instanceof ClassicHttpRequest, "Request does not contain entity"); + HttpEntity entity = ((ClassicHttpRequest) request).getEntity(); assertNotNull(entity, "Request does not contain entity"); assertTrue(entity instanceof MultipartSignedEntity, "Unexpected request entity type"); MultipartSignedEntity signedEntity = (MultipartSignedEntity) entity; @@ -406,14 +412,14 @@ public void multipartSignedMessageTest() throws Exception { // Validated first mime part. assertTrue(signedEntity.getPart(0) instanceof ApplicationEDIFACTEntity, "First mime part incorrect type "); ApplicationEDIFACTEntity ediEntity = (ApplicationEDIFACTEntity) signedEntity.getPart(0); - assertTrue(ediEntity.getContentType().getValue().startsWith(AS2MediaType.APPLICATION_EDIFACT), + assertTrue(ediEntity.getContentType().startsWith(AS2MediaType.APPLICATION_EDIFACT), "Unexpected content type for first mime part"); assertFalse(ediEntity.isMainBody(), "First mime type set as main body of request"); // Validate second mime part. assertTrue(signedEntity.getPart(1) instanceof ApplicationPkcs7SignatureEntity, "Second mime part incorrect type "); ApplicationPkcs7SignatureEntity signatureEntity = (ApplicationPkcs7SignatureEntity) signedEntity.getPart(1); - assertTrue(signatureEntity.getContentType().getValue().startsWith(AS2MediaType.APPLICATION_PKCS7_SIGNATURE), + assertTrue(signatureEntity.getContentType().startsWith(AS2MediaType.APPLICATION_PKCS7_SIGNATURE), "Unexpected content type for second mime part"); assertFalse(signatureEntity.isMainBody(), "First mime type set as main body of request"); } @@ -531,9 +537,9 @@ public void envelopedMessageTest(AS2EncryptionAlgorithm encryptionAlgorithm) thr certList.toArray(new Certificate[0]), "file.txt"); HttpRequest request = httpContext.getRequest(); - assertEquals(METHOD, request.getRequestLine().getMethod(), "Unexpected method value"); - assertEquals(REQUEST_URI, request.getRequestLine().getUri(), "Unexpected request URI value"); - assertEquals(HttpVersion.HTTP_1_1, request.getRequestLine().getProtocolVersion(), "Unexpected HTTP version value"); + assertEquals(METHOD, request.getMethod(), "Unexpected method value"); + assertEquals(REQUEST_URI, request.getUri().getPath(), "Unexpected request URI value"); + assertEquals(HttpVersion.HTTP_1_1, request.getVersion(), "Unexpected HTTP version value"); assertEquals(SUBJECT, request.getFirstHeader(AS2Header.SUBJECT).getValue(), "Unexpected subject value"); assertEquals(FROM, request.getFirstHeader(AS2Header.FROM).getValue(), "Unexpected from value"); @@ -550,8 +556,8 @@ public void envelopedMessageTest(AS2EncryptionAlgorithm encryptionAlgorithm) thr assertTrue(request.getFirstHeader(AS2Header.CONTENT_TYPE).getValue().startsWith(AS2MimeType.APPLICATION_PKCS7_MIME), "Unexpected content type for message"); - assertTrue(request instanceof BasicHttpEntityEnclosingRequest, "Request does not contain entity"); - HttpEntity entity = ((BasicHttpEntityEnclosingRequest) request).getEntity(); + assertTrue(request instanceof ClassicHttpRequest, "Request does not contain entity"); + HttpEntity entity = ((ClassicHttpRequest) request).getEntity(); assertNotNull(entity, "Request does not contain entity"); assertTrue(entity instanceof ApplicationPkcs7MimeEnvelopedDataEntity, "Unexpected request entity type"); ApplicationPkcs7MimeEnvelopedDataEntity envelopedEntity = (ApplicationPkcs7MimeEnvelopedDataEntity) entity; @@ -561,7 +567,7 @@ public void envelopedMessageTest(AS2EncryptionAlgorithm encryptionAlgorithm) thr MimeEntity encryptedEntity = envelopedEntity.getEncryptedEntity(signingKP.getPrivate()); assertTrue(encryptedEntity instanceof ApplicationEDIFACTEntity, "Enveloped mime part incorrect type "); ApplicationEDIFACTEntity ediEntity = (ApplicationEDIFACTEntity) encryptedEntity; - assertTrue(ediEntity.getContentType().getValue().startsWith(AS2MediaType.APPLICATION_EDIFACT), + assertTrue(ediEntity.getContentType().startsWith(AS2MediaType.APPLICATION_EDIFACT), "Unexpected content type for enveloped mime part"); assertFalse(ediEntity.isMainBody(), "Enveloped mime type set as main body of request"); assertEquals(EDI_MESSAGE.replaceAll("[\n\r]", ""), ediEntity.getEdiMessage().replaceAll("[\n\r]", ""), @@ -586,9 +592,9 @@ public void envelopedAndSignedMessageTest(AS2EncryptionAlgorithm encryptionAlgor certList.toArray(new Certificate[0]), "file.txt"); HttpRequest request = httpContext.getRequest(); - assertEquals(METHOD, request.getRequestLine().getMethod(), "Unexpected method value"); - assertEquals(REQUEST_URI, request.getRequestLine().getUri(), "Unexpected request URI value"); - assertEquals(HttpVersion.HTTP_1_1, request.getRequestLine().getProtocolVersion(), "Unexpected HTTP version value"); + assertEquals(METHOD, request.getMethod(), "Unexpected method value"); + assertEquals(REQUEST_URI, request.getUri().getPath(), "Unexpected request URI value"); + assertEquals(HttpVersion.HTTP_1_1, request.getVersion(), "Unexpected HTTP version value"); assertEquals(SUBJECT, request.getFirstHeader(AS2Header.SUBJECT).getValue(), "Unexpected subject value"); assertEquals(FROM, request.getFirstHeader(AS2Header.FROM).getValue(), "Unexpected from value"); @@ -606,8 +612,8 @@ public void envelopedAndSignedMessageTest(AS2EncryptionAlgorithm encryptionAlgor assertTrue(request.getFirstHeader(AS2Header.CONTENT_TYPE).getValue().startsWith(AS2MimeType.APPLICATION_PKCS7_MIME), "Unexpected content type for message"); - assertTrue(request instanceof BasicHttpEntityEnclosingRequest, "Request does not contain entity"); - HttpEntity entity = ((BasicHttpEntityEnclosingRequest) request).getEntity(); + assertTrue(request instanceof ClassicHttpRequest, "Request does not contain entity"); + HttpEntity entity = ((ClassicHttpRequest) request).getEntity(); assertNotNull(entity, "Request does not contain entity"); assertTrue(entity instanceof ApplicationPkcs7MimeEnvelopedDataEntity, "Unexpected request entity type"); ApplicationPkcs7MimeEnvelopedDataEntity envelopedEntity = (ApplicationPkcs7MimeEnvelopedDataEntity) entity; @@ -617,7 +623,7 @@ public void envelopedAndSignedMessageTest(AS2EncryptionAlgorithm encryptionAlgor MimeEntity encryptedEntity = envelopedEntity.getEncryptedEntity(signingKP.getPrivate()); assertTrue(encryptedEntity instanceof MultipartSignedEntity, "Enveloped mime part incorrect type "); MultipartSignedEntity multipartSignedEntity = (MultipartSignedEntity) encryptedEntity; - assertTrue(multipartSignedEntity.getContentType().getValue().startsWith(AS2MediaType.MULTIPART_SIGNED), + assertTrue(multipartSignedEntity.getContentType().startsWith(AS2MediaType.MULTIPART_SIGNED), "Unexpected content type for enveloped mime part"); assertFalse(multipartSignedEntity.isMainBody(), "Enveloped mime type set as main body of request"); assertEquals(2, multipartSignedEntity.getPartCount(), "Request contains invalid number of mime parts"); @@ -625,7 +631,7 @@ public void envelopedAndSignedMessageTest(AS2EncryptionAlgorithm encryptionAlgor // Validated first mime part. assertTrue(multipartSignedEntity.getPart(0) instanceof ApplicationEDIFACTEntity, "First mime part incorrect type "); ApplicationEDIFACTEntity ediEntity = (ApplicationEDIFACTEntity) multipartSignedEntity.getPart(0); - assertTrue(ediEntity.getContentType().getValue().startsWith(AS2MediaType.APPLICATION_EDIFACT), + assertTrue(ediEntity.getContentType().startsWith(AS2MediaType.APPLICATION_EDIFACT), "Unexpected content type for first mime part"); assertFalse(ediEntity.isMainBody(), "First mime type set as main body of request"); @@ -633,7 +639,7 @@ public void envelopedAndSignedMessageTest(AS2EncryptionAlgorithm encryptionAlgor assertTrue(multipartSignedEntity.getPart(1) instanceof ApplicationPkcs7SignatureEntity, "Second mime part incorrect type "); ApplicationPkcs7SignatureEntity signatureEntity = (ApplicationPkcs7SignatureEntity) multipartSignedEntity.getPart(1); - assertTrue(signatureEntity.getContentType().getValue().startsWith(AS2MediaType.APPLICATION_PKCS7_SIGNATURE), + assertTrue(signatureEntity.getContentType().startsWith(AS2MediaType.APPLICATION_PKCS7_SIGNATURE), "Unexpected content type for second mime part"); assertFalse(signatureEntity.isMainBody(), "First mime type set as main body of request"); @@ -649,8 +655,8 @@ public void signatureVerificationTest() throws Exception { null, DISPOSITION_NOTIFICATION_TO, SIGNED_RECEIPT_MIC_ALGORITHMS, null, null, "file.txt"); HttpRequest request = httpContext.getRequest(); - assertTrue(request instanceof BasicHttpEntityEnclosingRequest, "Request does not contain entity"); - HttpEntity entity = ((BasicHttpEntityEnclosingRequest) request).getEntity(); + assertTrue(request instanceof ClassicHttpRequest, "Request does not contain entity"); + HttpEntity entity = ((ClassicHttpRequest) request).getEntity(); assertNotNull(entity, "Request does not contain entity"); assertTrue(entity instanceof MultipartSignedEntity, "Unexpected request entity type"); MultipartSignedEntity multipartSignedEntity = (MultipartSignedEntity) entity; @@ -676,12 +682,13 @@ public void mdnMessageTest() throws Exception { "file.txt"); HttpResponse response = httpContext.getResponse(); - assertEquals(HttpVersion.HTTP_1_1, response.getStatusLine().getProtocolVersion(), "Unexpected method value"); - assertEquals(HttpStatus.SC_OK, response.getStatusLine().getStatusCode(), "Unexpected method value"); - assertEquals(EnglishReasonPhraseCatalog.INSTANCE.getReason(200, null), response.getStatusLine().getReasonPhrase(), + assertEquals(HttpVersion.HTTP_1_1, response.getVersion(), "Unexpected method value"); + assertEquals(HttpStatus.SC_OK, response.getCode(), "Unexpected method value"); + assertEquals(EnglishReasonPhraseCatalog.INSTANCE.getReason(200, null), response.getReasonPhrase(), "Unexpected method value"); - HttpEntity responseEntity = response.getEntity(); + assertTrue(response instanceof ClassicHttpResponse); + HttpEntity responseEntity = ((ClassicHttpResponse) response).getEntity(); assertNotNull(responseEntity, "Response entity"); assertTrue(responseEntity instanceof MultipartSignedEntity, "Unexpected response entity type"); MultipartSignedEntity responseSignedEntity = (MultipartSignedEntity) responseEntity; @@ -693,11 +700,11 @@ public void mdnMessageTest() throws Exception { assertEquals(2, reportEntity.getPartCount(), "Unexpected number of body parts in report"); MimeEntity firstPart = reportEntity.getPart(0); assertEquals(ContentType.create(AS2MimeType.TEXT_PLAIN, StandardCharsets.US_ASCII).toString(), - firstPart.getContentTypeValue(), + firstPart.getContentType(), "Unexpected content type in first body part of report"); MimeEntity secondPart = reportEntity.getPart(1); - assertEquals(ContentType.create(AS2MimeType.MESSAGE_DISPOSITION_NOTIFICATION, StandardCharsets.US_ASCII).toString(), - secondPart.getContentTypeValue(), + assertEquals(ContentType.create(AS2MimeType.MESSAGE_DISPOSITION_NOTIFICATION).toString(), + secondPart.getContentType(), "Unexpected content type in second body part of report"); ApplicationPkcs7SignatureEntity signatureEntity = responseSignedEntity.getSignatureEntity(); assertNotNull(signatureEntity, "Signature Entity"); @@ -716,7 +723,7 @@ public void asynchronousMdnMessageTest() throws Exception { // Create plain edi request message to acknowledge ApplicationEntity ediEntity = EntityUtils.createEDIEntity(EDI_MESSAGE, ContentType.create(AS2MediaType.APPLICATION_EDIFACT, StandardCharsets.US_ASCII), null, false, "filename.txt"); - HttpEntityEnclosingRequest request = new BasicHttpEntityEnclosingRequest("POST", REQUEST_URI); + BasicClassicHttpRequest request = new BasicClassicHttpRequest("POST", REQUEST_URI); HttpMessageUtils.setHeaderValue(request, AS2Header.SUBJECT, SUBJECT); String httpdate = DATE_GENERATOR.getCurrentDate(); HttpMessageUtils.setHeaderValue(request, AS2Header.DATE, httpdate); @@ -729,7 +736,8 @@ public void asynchronousMdnMessageTest() throws Exception { EntityUtils.setMessageEntity(request, ediEntity); // Create response for MDN creation. - HttpResponse response = new BasicHttpResponse(HttpVersion.HTTP_1_1, 200, "OK"); + HttpResponse response = new BasicHttpResponse(200, "OK"); + response.setVersion(new ProtocolVersion("HTTP", 1, 1)); httpdate = DATE_GENERATOR.getCurrentDate(); response.setHeader(AS2Header.DATE, httpdate); response.setHeader(AS2Header.SERVER, REPORTING_UA); @@ -791,9 +799,9 @@ public void compressedMessageTest() throws Exception { null, "file.txt"); HttpRequest request = httpContext.getRequest(); - assertEquals(METHOD, request.getRequestLine().getMethod(), "Unexpected method value"); - assertEquals(REQUEST_URI, request.getRequestLine().getUri(), "Unexpected request URI value"); - assertEquals(HttpVersion.HTTP_1_1, request.getRequestLine().getProtocolVersion(), "Unexpected HTTP version value"); + assertEquals(METHOD, request.getMethod(), "Unexpected method value"); + assertEquals(REQUEST_URI, request.getUri().getPath(), "Unexpected request URI value"); + assertEquals(HttpVersion.HTTP_1_1, request.getVersion(), "Unexpected HTTP version value"); assertEquals(SUBJECT, request.getFirstHeader(AS2Header.SUBJECT).getValue(), "Unexpected subject value"); assertEquals(FROM, request.getFirstHeader(AS2Header.FROM).getValue(), "Unexpected from value"); @@ -810,8 +818,8 @@ public void compressedMessageTest() throws Exception { assertTrue(request.getFirstHeader(AS2Header.CONTENT_TYPE).getValue().startsWith(AS2MimeType.APPLICATION_PKCS7_MIME), "Unexpected content type for message"); - assertTrue(request instanceof BasicHttpEntityEnclosingRequest, "Request does not contain entity"); - HttpEntity entity = ((BasicHttpEntityEnclosingRequest) request).getEntity(); + assertTrue(request instanceof ClassicHttpRequest, "Request does not contain entity"); + HttpEntity entity = ((ClassicHttpRequest) request).getEntity(); assertNotNull(entity, "Request does not contain entity"); assertTrue(entity instanceof ApplicationPkcs7MimeCompressedDataEntity, "Unexpected request entity type"); ApplicationPkcs7MimeCompressedDataEntity compressedDataEntity = (ApplicationPkcs7MimeCompressedDataEntity) entity; @@ -821,7 +829,7 @@ public void compressedMessageTest() throws Exception { MimeEntity compressedEntity = compressedDataEntity.getCompressedEntity(new ZlibExpanderProvider()); assertTrue(compressedEntity instanceof ApplicationEDIFACTEntity, "Enveloped mime part incorrect type "); ApplicationEDIFACTEntity ediEntity = (ApplicationEDIFACTEntity) compressedEntity; - assertTrue(ediEntity.getContentType().getValue().startsWith(AS2MediaType.APPLICATION_EDIFACT), + assertTrue(ediEntity.getContentType().startsWith(AS2MediaType.APPLICATION_EDIFACT), "Unexpected content type for compressed entity"); assertFalse(ediEntity.isMainBody(), "Compressed entity set as main body of request"); @@ -842,9 +850,9 @@ public void compressedAndSignedMessageTest() throws Exception { null, "file.txt"); HttpRequest request = httpContext.getRequest(); - assertEquals(METHOD, request.getRequestLine().getMethod(), "Unexpected method value"); - assertEquals(REQUEST_URI, request.getRequestLine().getUri(), "Unexpected request URI value"); - assertEquals(HttpVersion.HTTP_1_1, request.getRequestLine().getProtocolVersion(), "Unexpected HTTP version value"); + assertEquals(METHOD, request.getMethod(), "Unexpected method value"); + assertEquals(REQUEST_URI, request.getUri().getPath(), "Unexpected request URI value"); + assertEquals(HttpVersion.HTTP_1_1, request.getVersion(), "Unexpected HTTP version value"); assertEquals(SUBJECT, request.getFirstHeader(AS2Header.SUBJECT).getValue(), "Unexpected subject value"); assertEquals(FROM, request.getFirstHeader(AS2Header.FROM).getValue(), "Unexpected from value"); @@ -861,8 +869,8 @@ public void compressedAndSignedMessageTest() throws Exception { assertTrue(request.getFirstHeader(AS2Header.CONTENT_TYPE).getValue().startsWith(AS2MimeType.APPLICATION_PKCS7_MIME), "Unexpected content type for message"); - assertTrue(request instanceof BasicHttpEntityEnclosingRequest, "Request does not contain entity"); - HttpEntity entity = ((BasicHttpEntityEnclosingRequest) request).getEntity(); + assertTrue(request instanceof ClassicHttpRequest, "Request does not contain entity"); + HttpEntity entity = ((ClassicHttpRequest) request).getEntity(); assertNotNull(entity, "Request does not contain entity"); assertTrue(entity instanceof ApplicationPkcs7MimeCompressedDataEntity, "Unexpected request entity type"); ApplicationPkcs7MimeCompressedDataEntity compressedDataEntity = (ApplicationPkcs7MimeCompressedDataEntity) entity; @@ -872,7 +880,7 @@ public void compressedAndSignedMessageTest() throws Exception { MimeEntity compressedEntity = compressedDataEntity.getCompressedEntity(new ZlibExpanderProvider()); assertTrue(compressedEntity instanceof MultipartSignedEntity, "Enveloped mime part incorrect type "); MultipartSignedEntity multipartSignedEntity = (MultipartSignedEntity) compressedEntity; - assertTrue(multipartSignedEntity.getContentType().getValue().startsWith(AS2MediaType.MULTIPART_SIGNED), + assertTrue(multipartSignedEntity.getContentType().startsWith(AS2MediaType.MULTIPART_SIGNED), "Unexpected content type for compressed entity"); assertFalse(multipartSignedEntity.isMainBody(), "Multipart signed entity set as main body of request"); assertEquals(2, multipartSignedEntity.getPartCount(), "Multipart signed entity contains invalid number of mime parts"); @@ -880,7 +888,7 @@ public void compressedAndSignedMessageTest() throws Exception { // Validated first mime part. assertTrue(multipartSignedEntity.getPart(0) instanceof ApplicationEDIFACTEntity, "First mime part incorrect type "); ApplicationEDIFACTEntity ediEntity = (ApplicationEDIFACTEntity) multipartSignedEntity.getPart(0); - assertTrue(ediEntity.getContentType().getValue().startsWith(AS2MediaType.APPLICATION_EDIFACT), + assertTrue(ediEntity.getContentType().startsWith(AS2MediaType.APPLICATION_EDIFACT), "Unexpected content type for first mime part"); assertFalse(ediEntity.isMainBody(), "First mime type set as main body of request"); @@ -888,7 +896,7 @@ public void compressedAndSignedMessageTest() throws Exception { assertTrue(multipartSignedEntity.getPart(1) instanceof ApplicationPkcs7SignatureEntity, "Second mime part incorrect type "); ApplicationPkcs7SignatureEntity signatureEntity = (ApplicationPkcs7SignatureEntity) multipartSignedEntity.getPart(1); - assertTrue(signatureEntity.getContentType().getValue().startsWith(AS2MediaType.APPLICATION_PKCS7_SIGNATURE), + assertTrue(signatureEntity.getContentType().startsWith(AS2MediaType.APPLICATION_PKCS7_SIGNATURE), "Unexpected content type for second mime part"); assertFalse(signatureEntity.isMainBody(), "First mime type set as main body of request"); } @@ -906,9 +914,9 @@ public void envelopedAndCompressedMessageTest() throws Exception { AS2EncryptionAlgorithm.AES128_CBC, certList.toArray(new Certificate[0]), "file.txt"); HttpRequest request = httpContext.getRequest(); - assertEquals(METHOD, request.getRequestLine().getMethod(), "Unexpected method value"); - assertEquals(REQUEST_URI, request.getRequestLine().getUri(), "Unexpected request URI value"); - assertEquals(HttpVersion.HTTP_1_1, request.getRequestLine().getProtocolVersion(), "Unexpected HTTP version value"); + assertEquals(METHOD, request.getMethod(), "Unexpected method value"); + assertEquals(REQUEST_URI, request.getUri().getPath(), "Unexpected request URI value"); + assertEquals(HttpVersion.HTTP_1_1, request.getVersion(), "Unexpected HTTP version value"); assertEquals(SUBJECT, request.getFirstHeader(AS2Header.SUBJECT).getValue(), "Unexpected subject value"); assertEquals(FROM, request.getFirstHeader(AS2Header.FROM).getValue(), "Unexpected from value"); @@ -925,8 +933,8 @@ public void envelopedAndCompressedMessageTest() throws Exception { assertTrue(request.getFirstHeader(AS2Header.CONTENT_TYPE).getValue().startsWith(AS2MimeType.APPLICATION_PKCS7_MIME), "Unexpected content type for message"); - assertTrue(request instanceof BasicHttpEntityEnclosingRequest, "Request does not contain entity"); - HttpEntity entity = ((BasicHttpEntityEnclosingRequest) request).getEntity(); + assertTrue(request instanceof ClassicHttpRequest, "Request does not contain entity"); + HttpEntity entity = ((ClassicHttpRequest) request).getEntity(); assertNotNull(entity, "Request does not contain entity"); assertTrue(entity instanceof ApplicationPkcs7MimeEnvelopedDataEntity, "Unexpected request entity type"); ApplicationPkcs7MimeEnvelopedDataEntity envelopedEntity = (ApplicationPkcs7MimeEnvelopedDataEntity) entity; @@ -937,7 +945,7 @@ public void envelopedAndCompressedMessageTest() throws Exception { assertTrue(encryptedEntity instanceof ApplicationPkcs7MimeCompressedDataEntity, "Enveloped mime part incorrect type "); ApplicationPkcs7MimeCompressedDataEntity compressedDataEntity = (ApplicationPkcs7MimeCompressedDataEntity) encryptedEntity; - assertTrue(compressedDataEntity.getContentType().getValue().startsWith(AS2MimeType.APPLICATION_PKCS7_MIME), + assertTrue(compressedDataEntity.getContentType().startsWith(AS2MimeType.APPLICATION_PKCS7_MIME), "Unexpected content type for compressed mime part"); assertFalse(compressedDataEntity.isMainBody(), "Enveloped mime type set as main body of request"); @@ -945,7 +953,7 @@ public void envelopedAndCompressedMessageTest() throws Exception { MimeEntity compressedEntity = compressedDataEntity.getCompressedEntity(new ZlibExpanderProvider()); assertTrue(compressedEntity instanceof ApplicationEDIFACTEntity, "Enveloped mime part incorrect type "); ApplicationEDIFACTEntity ediEntity = (ApplicationEDIFACTEntity) compressedEntity; - assertTrue(ediEntity.getContentType().getValue().startsWith(AS2MediaType.APPLICATION_EDIFACT), + assertTrue(ediEntity.getContentType().startsWith(AS2MediaType.APPLICATION_EDIFACT), "Unexpected content type for compressed entity"); assertFalse(ediEntity.isMainBody(), "Compressed entity set as main body of request"); assertEquals(EDI_MESSAGE.replaceAll("[\n\r]", ""), ediEntity.getEdiMessage().replaceAll("[\n\r]", ""), @@ -966,9 +974,9 @@ public void envelopedCompressedAndSignedMessageTest() throws Exception { AS2EncryptionAlgorithm.AES128_CBC, certList.toArray(new Certificate[0]), "file.txt"); HttpRequest request = httpContext.getRequest(); - assertEquals(METHOD, request.getRequestLine().getMethod(), "Unexpected method value"); - assertEquals(REQUEST_URI, request.getRequestLine().getUri(), "Unexpected request URI value"); - assertEquals(HttpVersion.HTTP_1_1, request.getRequestLine().getProtocolVersion(), "Unexpected HTTP version value"); + assertEquals(METHOD, request.getMethod(), "Unexpected method value"); + assertEquals(REQUEST_URI, request.getUri().getPath(), "Unexpected request URI value"); + assertEquals(HttpVersion.HTTP_1_1, request.getVersion(), "Unexpected HTTP version value"); assertEquals(SUBJECT, request.getFirstHeader(AS2Header.SUBJECT).getValue(), "Unexpected subject value"); assertEquals(FROM, request.getFirstHeader(AS2Header.FROM).getValue(), "Unexpected from value"); @@ -985,8 +993,8 @@ public void envelopedCompressedAndSignedMessageTest() throws Exception { assertTrue(request.getFirstHeader(AS2Header.CONTENT_TYPE).getValue().startsWith(AS2MimeType.APPLICATION_PKCS7_MIME), "Unexpected content type for message"); - assertTrue(request instanceof BasicHttpEntityEnclosingRequest, "Request does not contain entity"); - HttpEntity entity = ((BasicHttpEntityEnclosingRequest) request).getEntity(); + assertTrue(request instanceof ClassicHttpRequest, "Request does not contain entity"); + HttpEntity entity = ((ClassicHttpRequest) request).getEntity(); assertNotNull(entity, "Request does not contain entity"); assertTrue(entity instanceof ApplicationPkcs7MimeEnvelopedDataEntity, "Unexpected request entity type"); ApplicationPkcs7MimeEnvelopedDataEntity envelopedEntity = (ApplicationPkcs7MimeEnvelopedDataEntity) entity; @@ -997,7 +1005,7 @@ public void envelopedCompressedAndSignedMessageTest() throws Exception { assertTrue(encryptedEntity instanceof ApplicationPkcs7MimeCompressedDataEntity, "Enveloped mime part incorrect type "); ApplicationPkcs7MimeCompressedDataEntity compressedDataEntity = (ApplicationPkcs7MimeCompressedDataEntity) encryptedEntity; - assertTrue(compressedDataEntity.getContentType().getValue().startsWith(AS2MimeType.APPLICATION_PKCS7_MIME), + assertTrue(compressedDataEntity.getContentType().startsWith(AS2MimeType.APPLICATION_PKCS7_MIME), "Unexpected content type for compressed mime part"); assertFalse(compressedDataEntity.isMainBody(), "Enveloped mime type set as main body of request"); @@ -1005,7 +1013,7 @@ public void envelopedCompressedAndSignedMessageTest() throws Exception { MimeEntity compressedEntity = compressedDataEntity.getCompressedEntity(new ZlibExpanderProvider()); assertTrue(compressedEntity instanceof MultipartSignedEntity, "Enveloped mime part incorrect type "); MultipartSignedEntity multipartSignedEntity = (MultipartSignedEntity) compressedEntity; - assertTrue(multipartSignedEntity.getContentType().getValue().startsWith(AS2MediaType.MULTIPART_SIGNED), + assertTrue(multipartSignedEntity.getContentType().startsWith(AS2MediaType.MULTIPART_SIGNED), "Unexpected content type for compressed entity"); assertFalse(multipartSignedEntity.isMainBody(), "Multipart signed entity set as main body of request"); assertEquals(2, multipartSignedEntity.getPartCount(), "Multipart signed entity contains invalid number of mime parts"); @@ -1013,7 +1021,7 @@ public void envelopedCompressedAndSignedMessageTest() throws Exception { // Validated first mime part. assertTrue(multipartSignedEntity.getPart(0) instanceof ApplicationEDIFACTEntity, "First mime part incorrect type "); ApplicationEDIFACTEntity ediEntity = (ApplicationEDIFACTEntity) multipartSignedEntity.getPart(0); - assertTrue(ediEntity.getContentType().getValue().startsWith(AS2MediaType.APPLICATION_EDIFACT), + assertTrue(ediEntity.getContentType().startsWith(AS2MediaType.APPLICATION_EDIFACT), "Unexpected content type for first mime part"); assertFalse(ediEntity.isMainBody(), "First mime type set as main body of request"); @@ -1021,7 +1029,7 @@ public void envelopedCompressedAndSignedMessageTest() throws Exception { assertTrue(multipartSignedEntity.getPart(1) instanceof ApplicationPkcs7SignatureEntity, "Second mime part incorrect type "); ApplicationPkcs7SignatureEntity signatureEntity = (ApplicationPkcs7SignatureEntity) multipartSignedEntity.getPart(1); - assertTrue(signatureEntity.getContentType().getValue().startsWith(AS2MediaType.APPLICATION_PKCS7_SIGNATURE), + assertTrue(signatureEntity.getContentType().startsWith(AS2MediaType.APPLICATION_PKCS7_SIGNATURE), "Unexpected content type for second mime part"); assertFalse(signatureEntity.isMainBody(), "First mime type set as main body of request"); } diff --git a/components/camel-as2/camel-as2-api/src/test/java/org/apache/camel/component/as2/api/entity/DispositionNotificationOptionsParserTest.java b/components/camel-as2/camel-as2-api/src/test/java/org/apache/camel/component/as2/api/entity/DispositionNotificationOptionsParserTest.java index b7a0baf226213..b27af6b994569 100644 --- a/components/camel-as2/camel-as2-api/src/test/java/org/apache/camel/component/as2/api/entity/DispositionNotificationOptionsParserTest.java +++ b/components/camel-as2/camel-as2-api/src/test/java/org/apache/camel/component/as2/api/entity/DispositionNotificationOptionsParserTest.java @@ -17,6 +17,7 @@ package org.apache.camel.component.as2.api.entity; import org.apache.camel.component.as2.api.util.AS2HeaderUtils.Parameter; +import org.apache.hc.core5.http.ParseException; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertArrayEquals; @@ -35,7 +36,7 @@ public class DispositionNotificationOptionsParserTest { private static final String[] SIGNED_RECEIPT_MICALG_VALUES = { "sha1" }; @Test - public void parseDispositionNotificationOptionsTest() { + public void parseDispositionNotificationOptionsTest() throws ParseException { DispositionNotificationOptions dispositionNotificationOptions = DispositionNotificationOptionsParser.parseDispositionNotificationOptions(TEST_NAME_VALUES, null); diff --git a/components/camel-as2/camel-as2-api/src/test/java/org/apache/camel/component/as2/api/entity/EntityParserTest.java b/components/camel-as2/camel-as2-api/src/test/java/org/apache/camel/component/as2/api/entity/EntityParserTest.java index 1033e8cb8e20e..aa7997790ddd6 100644 --- a/components/camel-as2/camel-as2-api/src/test/java/org/apache/camel/component/as2/api/entity/EntityParserTest.java +++ b/components/camel-as2/camel-as2-api/src/test/java/org/apache/camel/component/as2/api/entity/EntityParserTest.java @@ -36,14 +36,15 @@ import org.apache.camel.component.as2.api.io.AS2SessionInputBuffer; import org.apache.camel.component.as2.api.util.EntityUtils; import org.apache.camel.component.as2.api.util.HttpMessageUtils; -import org.apache.http.HttpEntity; -import org.apache.http.HttpResponse; -import org.apache.http.HttpStatus; -import org.apache.http.HttpVersion; -import org.apache.http.entity.BasicHttpEntity; -import org.apache.http.impl.EnglishReasonPhraseCatalog; -import org.apache.http.impl.io.HttpTransportMetricsImpl; -import org.apache.http.message.BasicHttpResponse; +import org.apache.hc.core5.http.ContentType; +import org.apache.hc.core5.http.HttpEntity; +import org.apache.hc.core5.http.HttpResponse; +import org.apache.hc.core5.http.HttpStatus; +import org.apache.hc.core5.http.ProtocolVersion; +import org.apache.hc.core5.http.impl.BasicHttpTransportMetrics; +import org.apache.hc.core5.http.impl.EnglishReasonPhraseCatalog; +import org.apache.hc.core5.http.io.entity.BasicHttpEntity; +import org.apache.hc.core5.http.message.BasicClassicHttpResponse; import org.bouncycastle.asn1.x500.X500Name; import org.bouncycastle.asn1.x509.AuthorityKeyIdentifier; import org.bouncycastle.asn1.x509.Extension; @@ -192,16 +193,15 @@ public void tearDown() throws Exception { @Test public void parseMessageDispositionNotificationReportMessageTest() throws Exception { - HttpResponse response = new BasicHttpResponse( - HttpVersion.HTTP_1_1, HttpStatus.SC_OK, EnglishReasonPhraseCatalog.INSTANCE.getReason(HttpStatus.SC_OK, null)); + HttpResponse response = new BasicClassicHttpResponse( + HttpStatus.SC_OK, EnglishReasonPhraseCatalog.INSTANCE.getReason(HttpStatus.SC_OK, null)); + response.setVersion(new ProtocolVersion("HTTP", 1, 1)); HttpMessageUtils.setHeaderValue(response, AS2Header.CONTENT_TRANSFER_ENCODING, DISPOSITION_NOTIFICATION_CONTENT_TRANSFER_ENCODING); - BasicHttpEntity entity = new BasicHttpEntity(); - entity.setContentType(REPORT_CONTENT_TYPE_VALUE); InputStream is = new ByteArrayInputStream( DISPOSITION_NOTIFICATION_REPORT_CONTENT.getBytes(DISPOSITION_NOTIFICATION_REPORT_CONTENT_CHARSET_NAME)); - entity.setContent(is); + BasicHttpEntity entity = new BasicHttpEntity(is, ContentType.parse(REPORT_CONTENT_TYPE_VALUE)); EntityUtils.setMessageEntity(response, entity); EntityParser.parseAS2MessageEntity(response); @@ -217,11 +217,10 @@ public void parseMessageDispositionNotificationReportBodyTest() throws Exception InputStream is = new ByteArrayInputStream( DISPOSITION_NOTIFICATION_REPORT_CONTENT.getBytes(DISPOSITION_NOTIFICATION_REPORT_CONTENT_CHARSET_NAME)); AS2SessionInputBuffer inbuffer - = new AS2SessionInputBuffer(new HttpTransportMetricsImpl(), DEFAULT_BUFFER_SIZE, DEFAULT_BUFFER_SIZE, null); - inbuffer.bind(is); + = new AS2SessionInputBuffer(new BasicHttpTransportMetrics(), DEFAULT_BUFFER_SIZE, DEFAULT_BUFFER_SIZE); DispositionNotificationMultipartReportEntity dispositionNotificationMultipartReportEntity = EntityParser - .parseMultipartReportEntityBody(inbuffer, DISPOSITION_NOTIFICATION_REPORT_CONTENT_BOUNDARY, + .parseMultipartReportEntityBody(inbuffer, is, DISPOSITION_NOTIFICATION_REPORT_CONTENT_BOUNDARY, DISPOSITION_NOTIFICATION_REPORT_CONTENT_CHARSET_NAME, DISPOSITION_NOTIFICATION_REPORT_CONTENT_TRANSFER_ENCODING); @@ -240,10 +239,9 @@ public void parseTextPlainBodyTest() throws Exception { InputStream is = new ByteArrayInputStream(TEXT_PLAIN_CONTENT.getBytes(TEXT_PLAIN_CONTENT_CHARSET_NAME)); AS2SessionInputBuffer inbuffer - = new AS2SessionInputBuffer(new HttpTransportMetricsImpl(), DEFAULT_BUFFER_SIZE, DEFAULT_BUFFER_SIZE, null); - inbuffer.bind(is); + = new AS2SessionInputBuffer(new BasicHttpTransportMetrics(), DEFAULT_BUFFER_SIZE, DEFAULT_BUFFER_SIZE); - TextPlainEntity textPlainEntity = EntityParser.parseTextPlainEntityBody(inbuffer, TEXT_PLAIN_CONTENT_BOUNDARY, + TextPlainEntity textPlainEntity = EntityParser.parseTextPlainEntityBody(inbuffer, is, TEXT_PLAIN_CONTENT_BOUNDARY, TEXT_PLAIN_CONTENT_CHARSET_NAME, TEXT_PLAIN_CONTENT_TRANSFER_ENCODING); String text = textPlainEntity.getText(); @@ -257,11 +255,10 @@ public void parseMessageDispositionNotificationBodyTest() throws Exception { InputStream is = new ByteArrayInputStream( DISPOSITION_NOTIFICATION_CONTENT.getBytes(DISPOSITION_NOTIFICATION_CONTENT_CHARSET_NAME)); AS2SessionInputBuffer inbuffer - = new AS2SessionInputBuffer(new HttpTransportMetricsImpl(), DEFAULT_BUFFER_SIZE, DEFAULT_BUFFER_SIZE, null); - inbuffer.bind(is); + = new AS2SessionInputBuffer(new BasicHttpTransportMetrics(), DEFAULT_BUFFER_SIZE, DEFAULT_BUFFER_SIZE); AS2MessageDispositionNotificationEntity messageDispositionNotificationEntity = EntityParser - .parseMessageDispositionNotificationEntityBody(inbuffer, DISPOSITION_NOTIFICATION_CONTENT_BOUNDARY, + .parseMessageDispositionNotificationEntityBody(inbuffer, is, DISPOSITION_NOTIFICATION_CONTENT_BOUNDARY, DISPOSITION_NOTIFICATION_CONTENT_CHARSET_NAME); assertEquals(EXPECTED_REPORTING_UA, messageDispositionNotificationEntity.getReportingUA(), @@ -345,7 +342,7 @@ public void parseEnvelopedBodyTest() throws Exception { textEntity, cmsEnvelopeDataGenerator, contentEncryptor, "binary", true); MimeEntity decryptedMimeEntity = applicationPkcs7MimeEntity.getEncryptedEntity(encryptKP.getPrivate()); - assertEquals("text/plain; charset=US-ASCII", decryptedMimeEntity.getContentTypeValue(), + assertEquals("text/plain; charset=US-ASCII", decryptedMimeEntity.getContentType(), "Decrypted entity has unexpected content type"); assertEquals("This is a super secret messatge!", ((TextPlainEntity) decryptedMimeEntity).getText(), "Decrypted entity has unexpected content"); diff --git a/components/camel-as2/camel-as2-api/src/test/java/org/apache/camel/component/as2/api/util/AS2HeaderUtilsTest.java b/components/camel-as2/camel-as2-api/src/test/java/org/apache/camel/component/as2/api/util/AS2HeaderUtilsTest.java index 103ba087b3428..aa26051a06996 100644 --- a/components/camel-as2/camel-as2-api/src/test/java/org/apache/camel/component/as2/api/util/AS2HeaderUtilsTest.java +++ b/components/camel-as2/camel-as2-api/src/test/java/org/apache/camel/component/as2/api/util/AS2HeaderUtilsTest.java @@ -17,8 +17,8 @@ package org.apache.camel.component.as2.api.util; import org.apache.camel.component.as2.api.util.AS2HeaderUtils.Parameter; -import org.apache.http.message.ParserCursor; -import org.apache.http.util.CharArrayBuffer; +import org.apache.hc.core5.http.message.ParserCursor; +import org.apache.hc.core5.util.CharArrayBuffer; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertArrayEquals; diff --git a/components/camel-as2/camel-as2-api/src/test/java/org/apache/camel/component/as2/api/util/DispositionNotificationContentUtilsTest.java b/components/camel-as2/camel-as2-api/src/test/java/org/apache/camel/component/as2/api/util/DispositionNotificationContentUtilsTest.java index e5f7b483c74b2..d4d3698cae436 100644 --- a/components/camel-as2/camel-as2-api/src/test/java/org/apache/camel/component/as2/api/util/DispositionNotificationContentUtilsTest.java +++ b/components/camel-as2/camel-as2-api/src/test/java/org/apache/camel/component/as2/api/util/DispositionNotificationContentUtilsTest.java @@ -26,9 +26,9 @@ import org.apache.camel.component.as2.api.entity.DispositionMode; import org.apache.camel.component.as2.api.entity.EntityParser; import org.apache.camel.component.as2.api.io.AS2SessionInputBuffer; -import org.apache.http.impl.io.HttpTransportMetricsImpl; -import org.apache.http.message.BasicLineParser; -import org.apache.http.util.CharArrayBuffer; +import org.apache.hc.core5.http.impl.BasicHttpTransportMetrics; +import org.apache.hc.core5.http.message.BasicLineParser; +import org.apache.hc.core5.util.CharArrayBuffer; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -78,11 +78,11 @@ public void test() throws Exception { InputStream is = new ByteArrayInputStream(DISPOSITION_NOTIFICATION_CONTENT.getBytes()); - AS2SessionInputBuffer inbuffer = new AS2SessionInputBuffer(new HttpTransportMetricsImpl(), 8 * 1024); - inbuffer.bind(is); + AS2SessionInputBuffer inbuffer = new AS2SessionInputBuffer(new BasicHttpTransportMetrics(), 8 * 1024); List dispositionNotificationFields - = EntityParser.parseBodyPartFields(inbuffer, null, BasicLineParser.INSTANCE, new ArrayList()); + = EntityParser.parseBodyPartFields(inbuffer, is, null, BasicLineParser.INSTANCE, + new ArrayList()); AS2MessageDispositionNotificationEntity messageDispositionNotificationEntity = DispositionNotificationContentUtils.parseDispositionNotification(dispositionNotificationFields); diff --git a/components/camel-as2/camel-as2-api/src/test/java/org/apache/camel/component/as2/api/util/EntityUtilsTest.java b/components/camel-as2/camel-as2-api/src/test/java/org/apache/camel/component/as2/api/util/EntityUtilsTest.java index 9a3f992a3859d..5b88f94bbe054 100644 --- a/components/camel-as2/camel-as2-api/src/test/java/org/apache/camel/component/as2/api/util/EntityUtilsTest.java +++ b/components/camel-as2/camel-as2-api/src/test/java/org/apache/camel/component/as2/api/util/EntityUtilsTest.java @@ -21,8 +21,8 @@ import org.apache.camel.component.as2.api.AS2Header; import org.apache.camel.component.as2.api.AS2MediaType; import org.apache.camel.component.as2.api.entity.ApplicationEntity; -import org.apache.http.Header; -import org.apache.http.entity.ContentType; +import org.apache.hc.core5.http.ContentType; +import org.apache.hc.core5.http.Header; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; @@ -34,7 +34,7 @@ public void testCreateEDIEntityContentTypeWithoutEncoding() throws Exception { String ediMessage = "whatever"; ApplicationEntity applicationEntity = EntityUtils.createEDIEntity(ediMessage, ediMessageContentType, null, false, "sample.txt"); - String actualContentType = applicationEntity.getContentTypeValue(); + String actualContentType = applicationEntity.getContentType(); Assertions.assertEquals("application/edifact", actualContentType, "content type matches"); Header[] actualContentDisposition = applicationEntity.getHeaders(AS2Header.CONTENT_DISPOSITION); Assertions.assertEquals(1, actualContentDisposition.length, "exactly one Content-Disposition header found"); @@ -48,7 +48,7 @@ public void testCreateEDIEntityContentTypeWithEncoding() throws Exception { String ediMessage = "whatever"; ApplicationEntity applicationEntity = EntityUtils.createEDIEntity(ediMessage, ediMessageContentType, null, false, "sample.txt"); - String actualContentType = applicationEntity.getContentTypeValue(); + String actualContentType = applicationEntity.getContentType(); Assertions.assertEquals("application/edifact; charset=US-ASCII", actualContentType, "content type matches"); Header[] actualContentDisposition = applicationEntity.getHeaders(AS2Header.CONTENT_DISPOSITION); Assertions.assertEquals(1, actualContentDisposition.length, "exactly one Content-Disposition header found"); @@ -62,7 +62,7 @@ public void testCreateEDIEntityContentTypeWithoutContentDisposition() throws Exc String ediMessage = "whatever"; ApplicationEntity applicationEntity = EntityUtils.createEDIEntity(ediMessage, ediMessageContentType, null, false, ""); - String actualContentType = applicationEntity.getContentTypeValue(); + String actualContentType = applicationEntity.getContentType(); Assertions.assertEquals("application/edifact", actualContentType, "content type matches"); Header[] actualContentDisposition = applicationEntity.getHeaders(AS2Header.CONTENT_DISPOSITION); Assertions.assertEquals(0, actualContentDisposition.length, "no Content-Disposition headers found"); diff --git a/components/camel-as2/camel-as2-api/src/test/java/org/apache/camel/component/as2/api/util/MicUtilsTest.java b/components/camel-as2/camel-as2-api/src/test/java/org/apache/camel/component/as2/api/util/MicUtilsTest.java index 3ab269da4e7e9..e16abdc3f5fbc 100644 --- a/components/camel-as2/camel-as2-api/src/test/java/org/apache/camel/component/as2/api/util/MicUtilsTest.java +++ b/components/camel-as2/camel-as2-api/src/test/java/org/apache/camel/component/as2/api/util/MicUtilsTest.java @@ -25,10 +25,9 @@ import org.apache.camel.component.as2.api.AS2TransferEncoding; import org.apache.camel.component.as2.api.entity.ApplicationEDIFACTEntity; import org.apache.camel.component.as2.api.util.MicUtils.ReceivedContentMic; -import org.apache.http.HttpEntityEnclosingRequest; -import org.apache.http.HttpVersion; -import org.apache.http.entity.BasicHttpEntity; -import org.apache.http.message.BasicHttpEntityEnclosingRequest; +import org.apache.hc.core5.http.ContentType; +import org.apache.hc.core5.http.io.entity.BasicHttpEntity; +import org.apache.hc.core5.http.message.BasicClassicHttpRequest; import org.bouncycastle.jce.provider.BouncyCastleProvider; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; @@ -88,7 +87,7 @@ public void tearDown() throws Exception { @Test public void createReceivedContentMicTest() throws Exception { - HttpEntityEnclosingRequest request = new BasicHttpEntityEnclosingRequest("POST", "/", HttpVersion.HTTP_1_1); + BasicClassicHttpRequest request = new BasicClassicHttpRequest("POST", "/"); request.addHeader(AS2Header.DISPOSITION_NOTIFICATION_OPTIONS, DISPOSITION_NOTIFICATION_OPTIONS_VALUE); request.addHeader(AS2Header.CONTENT_TYPE, CONTENT_TYPE_VALUE); @@ -96,9 +95,7 @@ public void createReceivedContentMicTest() throws Exception { = new ApplicationEDIFACTEntity( EDI_MESSAGE, StandardCharsets.US_ASCII.name(), AS2TransferEncoding.NONE, true, "filename.txt"); InputStream is = edifactEntity.getContent(); - BasicHttpEntity basicEntity = new BasicHttpEntity(); - basicEntity.setContent(is); - basicEntity.setContentType(CONTENT_TYPE_VALUE); + BasicHttpEntity basicEntity = new BasicHttpEntity(is, ContentType.create(CONTENT_TYPE_VALUE)); request.setEntity(basicEntity); ReceivedContentMic receivedContentMic = MicUtils.createReceivedContentMic(request, null, null); diff --git a/components/camel-as2/camel-as2-component/src/generated/java/org/apache/camel/component/as2/AS2ClientManagerEndpointConfiguration.java b/components/camel-as2/camel-as2-component/src/generated/java/org/apache/camel/component/as2/AS2ClientManagerEndpointConfiguration.java index 06906f6ae24a5..4fe8098dce65e 100644 --- a/components/camel-as2/camel-as2-component/src/generated/java/org/apache/camel/component/as2/AS2ClientManagerEndpointConfiguration.java +++ b/components/camel-as2/camel-as2-component/src/generated/java/org/apache/camel/component/as2/AS2ClientManagerEndpointConfiguration.java @@ -15,7 +15,7 @@ */ @ApiParams(apiName = "client", producerOnly = true, description = "Sends EDI Messages over HTTP", - apiMethods = {@ApiMethod(methodName = "send", description="Send ediMessage to trading partner", signatures={"org.apache.http.protocol.HttpCoreContext send(String ediMessage, String requestUri, String subject, String from, String as2From, String as2To, org.apache.camel.component.as2.api.AS2MessageStructure as2MessageStructure, org.apache.http.entity.ContentType ediMessageContentType, String ediMessageTransferEncoding, org.apache.camel.component.as2.api.AS2SignatureAlgorithm signingAlgorithm, java.security.cert.Certificate[] signingCertificateChain, java.security.PrivateKey signingPrivateKey, org.apache.camel.component.as2.api.AS2CompressionAlgorithm compressionAlgorithm, String dispositionNotificationTo, String[] signedReceiptMicAlgorithms, org.apache.camel.component.as2.api.AS2EncryptionAlgorithm encryptingAlgorithm, java.security.cert.Certificate[] encryptingCertificateChain, String attachedFileName)"})}, aliases = {}) + apiMethods = {@ApiMethod(methodName = "send", description="Send ediMessage to trading partner", signatures={"org.apache.hc.core5.http.protocol.HttpCoreContext send(String ediMessage, String requestUri, String subject, String from, String as2From, String as2To, org.apache.camel.component.as2.api.AS2MessageStructure as2MessageStructure, org.apache.hc.core5.http.ContentType ediMessageContentType, String ediMessageTransferEncoding, org.apache.camel.component.as2.api.AS2SignatureAlgorithm signingAlgorithm, java.security.cert.Certificate[] signingCertificateChain, java.security.PrivateKey signingPrivateKey, org.apache.camel.component.as2.api.AS2CompressionAlgorithm compressionAlgorithm, String dispositionNotificationTo, String[] signedReceiptMicAlgorithms, org.apache.camel.component.as2.api.AS2EncryptionAlgorithm encryptingAlgorithm, java.security.cert.Certificate[] encryptingCertificateChain, String attachedFileName)"})}, aliases = {}) @UriParams @Configurer(extended = true) public final class AS2ClientManagerEndpointConfiguration extends AS2Configuration { @@ -42,7 +42,7 @@ public final class AS2ClientManagerEndpointConfiguration extends AS2Configuratio private String ediMessage; @UriParam @ApiParam(optional = false, apiMethods = {@ApiMethod(methodName = "send", description="The content type of EDI message")}) - private org.apache.http.entity.ContentType ediMessageContentType; + private org.apache.hc.core5.http.ContentType ediMessageContentType; @UriParam @ApiParam(optional = true, apiMethods = {@ApiMethod(methodName = "send", description="The transfer encoding used to transport EDI message")}) private String ediMessageTransferEncoding; @@ -130,11 +130,11 @@ public void setEdiMessage(String ediMessage) { this.ediMessage = ediMessage; } - public org.apache.http.entity.ContentType getEdiMessageContentType() { + public org.apache.hc.core5.http.ContentType getEdiMessageContentType() { return ediMessageContentType; } - public void setEdiMessageContentType(org.apache.http.entity.ContentType ediMessageContentType) { + public void setEdiMessageContentType(org.apache.hc.core5.http.ContentType ediMessageContentType) { this.ediMessageContentType = ediMessageContentType; } diff --git a/components/camel-as2/camel-as2-component/src/generated/java/org/apache/camel/component/as2/AS2ClientManagerEndpointConfigurationConfigurer.java b/components/camel-as2/camel-as2-component/src/generated/java/org/apache/camel/component/as2/AS2ClientManagerEndpointConfigurationConfigurer.java index c4a46be58d39e..df2eaaee281df 100644 --- a/components/camel-as2/camel-as2-component/src/generated/java/org/apache/camel/component/as2/AS2ClientManagerEndpointConfigurationConfigurer.java +++ b/components/camel-as2/camel-as2-component/src/generated/java/org/apache/camel/component/as2/AS2ClientManagerEndpointConfigurationConfigurer.java @@ -31,9 +31,9 @@ public class AS2ClientManagerEndpointConfigurationConfigurer extends org.apache. map.put("DecryptingPrivateKey", java.security.PrivateKey.class); map.put("DispositionNotificationTo", java.lang.String.class); map.put("EdiMessage", java.lang.String.class); - map.put("EdiMessageContentType", org.apache.http.entity.ContentType.class); + map.put("EdiMessageContentType", org.apache.hc.core5.http.ContentType.class); map.put("EdiMessageTransferEncoding", java.lang.String.class); - map.put("EdiMessageType", org.apache.http.entity.ContentType.class); + map.put("EdiMessageType", org.apache.hc.core5.http.ContentType.class); map.put("EncryptingAlgorithm", org.apache.camel.component.as2.api.AS2EncryptionAlgorithm.class); map.put("EncryptingCertificateChain", java.security.cert.Certificate[].class); map.put("From", java.lang.String.class); @@ -88,11 +88,11 @@ public boolean configure(CamelContext camelContext, Object obj, String name, Obj case "edimessage": case "ediMessage": target.setEdiMessage(property(camelContext, java.lang.String.class, value)); return true; case "edimessagecontenttype": - case "ediMessageContentType": target.setEdiMessageContentType(property(camelContext, org.apache.http.entity.ContentType.class, value)); return true; + case "ediMessageContentType": target.setEdiMessageContentType(property(camelContext, org.apache.hc.core5.http.ContentType.class, value)); return true; case "edimessagetransferencoding": case "ediMessageTransferEncoding": target.setEdiMessageTransferEncoding(property(camelContext, java.lang.String.class, value)); return true; case "edimessagetype": - case "ediMessageType": target.setEdiMessageType(property(camelContext, org.apache.http.entity.ContentType.class, value)); return true; + case "ediMessageType": target.setEdiMessageType(property(camelContext, org.apache.hc.core5.http.ContentType.class, value)); return true; case "encryptingalgorithm": case "encryptingAlgorithm": target.setEncryptingAlgorithm(property(camelContext, org.apache.camel.component.as2.api.AS2EncryptionAlgorithm.class, value)); return true; case "encryptingcertificatechain": @@ -173,11 +173,11 @@ public Class getOptionType(String name, boolean ignoreCase) { case "edimessage": case "ediMessage": return java.lang.String.class; case "edimessagecontenttype": - case "ediMessageContentType": return org.apache.http.entity.ContentType.class; + case "ediMessageContentType": return org.apache.hc.core5.http.ContentType.class; case "edimessagetransferencoding": case "ediMessageTransferEncoding": return java.lang.String.class; case "edimessagetype": - case "ediMessageType": return org.apache.http.entity.ContentType.class; + case "ediMessageType": return org.apache.hc.core5.http.ContentType.class; case "encryptingalgorithm": case "encryptingAlgorithm": return org.apache.camel.component.as2.api.AS2EncryptionAlgorithm.class; case "encryptingcertificatechain": diff --git a/components/camel-as2/camel-as2-component/src/generated/java/org/apache/camel/component/as2/AS2ConfigurationConfigurer.java b/components/camel-as2/camel-as2-component/src/generated/java/org/apache/camel/component/as2/AS2ConfigurationConfigurer.java index c9bc936f0eaff..1363228a518dc 100644 --- a/components/camel-as2/camel-as2-component/src/generated/java/org/apache/camel/component/as2/AS2ConfigurationConfigurer.java +++ b/components/camel-as2/camel-as2-component/src/generated/java/org/apache/camel/component/as2/AS2ConfigurationConfigurer.java @@ -31,7 +31,7 @@ public class AS2ConfigurationConfigurer extends org.apache.camel.support.compone map.put("DecryptingPrivateKey", java.security.PrivateKey.class); map.put("DispositionNotificationTo", java.lang.String.class); map.put("EdiMessageTransferEncoding", java.lang.String.class); - map.put("EdiMessageType", org.apache.http.entity.ContentType.class); + map.put("EdiMessageType", org.apache.hc.core5.http.ContentType.class); map.put("EncryptingAlgorithm", org.apache.camel.component.as2.api.AS2EncryptionAlgorithm.class); map.put("EncryptingCertificateChain", java.security.cert.Certificate[].class); map.put("From", java.lang.String.class); @@ -86,7 +86,7 @@ public boolean configure(CamelContext camelContext, Object obj, String name, Obj case "edimessagetransferencoding": case "ediMessageTransferEncoding": target.setEdiMessageTransferEncoding(property(camelContext, java.lang.String.class, value)); return true; case "edimessagetype": - case "ediMessageType": target.setEdiMessageType(property(camelContext, org.apache.http.entity.ContentType.class, value)); return true; + case "ediMessageType": target.setEdiMessageType(property(camelContext, org.apache.hc.core5.http.ContentType.class, value)); return true; case "encryptingalgorithm": case "encryptingAlgorithm": target.setEncryptingAlgorithm(property(camelContext, org.apache.camel.component.as2.api.AS2EncryptionAlgorithm.class, value)); return true; case "encryptingcertificatechain": @@ -167,7 +167,7 @@ public Class getOptionType(String name, boolean ignoreCase) { case "edimessagetransferencoding": case "ediMessageTransferEncoding": return java.lang.String.class; case "edimessagetype": - case "ediMessageType": return org.apache.http.entity.ContentType.class; + case "ediMessageType": return org.apache.hc.core5.http.ContentType.class; case "encryptingalgorithm": case "encryptingAlgorithm": return org.apache.camel.component.as2.api.AS2EncryptionAlgorithm.class; case "encryptingcertificatechain": diff --git a/components/camel-as2/camel-as2-component/src/generated/java/org/apache/camel/component/as2/AS2EndpointConfigurer.java b/components/camel-as2/camel-as2-component/src/generated/java/org/apache/camel/component/as2/AS2EndpointConfigurer.java index 1a2331fad378d..6d7b47c971456 100644 --- a/components/camel-as2/camel-as2-component/src/generated/java/org/apache/camel/component/as2/AS2EndpointConfigurer.java +++ b/components/camel-as2/camel-as2-component/src/generated/java/org/apache/camel/component/as2/AS2EndpointConfigurer.java @@ -31,7 +31,7 @@ public class AS2EndpointConfigurer extends PropertyConfigurerSupport implements map.put("compressionAlgorithm", org.apache.camel.component.as2.api.AS2CompressionAlgorithm.class); map.put("dispositionNotificationTo", java.lang.String.class); map.put("ediMessageTransferEncoding", java.lang.String.class); - map.put("ediMessageType", org.apache.http.entity.ContentType.class); + map.put("ediMessageType", org.apache.hc.core5.http.ContentType.class); map.put("from", java.lang.String.class); map.put("hostnameVerifier", javax.net.ssl.HostnameVerifier.class); map.put("httpConnectionPoolSize", java.lang.Integer.class); @@ -88,7 +88,7 @@ public boolean configure(CamelContext camelContext, Object obj, String name, Obj case "edimessagetransferencoding": case "ediMessageTransferEncoding": target.getConfiguration().setEdiMessageTransferEncoding(property(camelContext, java.lang.String.class, value)); return true; case "edimessagetype": - case "ediMessageType": target.getConfiguration().setEdiMessageType(property(camelContext, org.apache.http.entity.ContentType.class, value)); return true; + case "ediMessageType": target.getConfiguration().setEdiMessageType(property(camelContext, org.apache.hc.core5.http.ContentType.class, value)); return true; case "encryptingalgorithm": case "encryptingAlgorithm": target.getConfiguration().setEncryptingAlgorithm(property(camelContext, org.apache.camel.component.as2.api.AS2EncryptionAlgorithm.class, value)); return true; case "encryptingcertificatechain": @@ -173,7 +173,7 @@ public Class getOptionType(String name, boolean ignoreCase) { case "edimessagetransferencoding": case "ediMessageTransferEncoding": return java.lang.String.class; case "edimessagetype": - case "ediMessageType": return org.apache.http.entity.ContentType.class; + case "ediMessageType": return org.apache.hc.core5.http.ContentType.class; case "encryptingalgorithm": case "encryptingAlgorithm": return org.apache.camel.component.as2.api.AS2EncryptionAlgorithm.class; case "encryptingcertificatechain": diff --git a/components/camel-as2/camel-as2-component/src/generated/java/org/apache/camel/component/as2/AS2ServerManagerEndpointConfiguration.java b/components/camel-as2/camel-as2-component/src/generated/java/org/apache/camel/component/as2/AS2ServerManagerEndpointConfiguration.java index c504a4753c7eb..1cf291da0ec4e 100644 --- a/components/camel-as2/camel-as2-component/src/generated/java/org/apache/camel/component/as2/AS2ServerManagerEndpointConfiguration.java +++ b/components/camel-as2/camel-as2-component/src/generated/java/org/apache/camel/component/as2/AS2ServerManagerEndpointConfiguration.java @@ -15,7 +15,7 @@ */ @ApiParams(apiName = "server", consumerOnly = true, description = "Receives EDI Messages over HTTP", - apiMethods = {@ApiMethod(methodName = "listen", signatures={"void listen(String requestUriPattern, org.apache.http.protocol.HttpRequestHandler handler)"})}, aliases = {}) + apiMethods = {@ApiMethod(methodName = "listen", signatures={"void listen(String requestUriPattern, org.apache.hc.core5.http.io.HttpRequestHandler handler)"})}, aliases = {}) @UriParams @Configurer(extended = true) public final class AS2ServerManagerEndpointConfiguration extends AS2Configuration { diff --git a/components/camel-as2/camel-as2-component/src/generated/java/org/apache/camel/component/as2/AS2ServerManagerEndpointConfigurationConfigurer.java b/components/camel-as2/camel-as2-component/src/generated/java/org/apache/camel/component/as2/AS2ServerManagerEndpointConfigurationConfigurer.java index c0d199d058e0a..d7e0b88590a09 100644 --- a/components/camel-as2/camel-as2-component/src/generated/java/org/apache/camel/component/as2/AS2ServerManagerEndpointConfigurationConfigurer.java +++ b/components/camel-as2/camel-as2-component/src/generated/java/org/apache/camel/component/as2/AS2ServerManagerEndpointConfigurationConfigurer.java @@ -31,7 +31,7 @@ public class AS2ServerManagerEndpointConfigurationConfigurer extends org.apache. map.put("DecryptingPrivateKey", java.security.PrivateKey.class); map.put("DispositionNotificationTo", java.lang.String.class); map.put("EdiMessageTransferEncoding", java.lang.String.class); - map.put("EdiMessageType", org.apache.http.entity.ContentType.class); + map.put("EdiMessageType", org.apache.hc.core5.http.ContentType.class); map.put("EncryptingAlgorithm", org.apache.camel.component.as2.api.AS2EncryptionAlgorithm.class); map.put("EncryptingCertificateChain", java.security.cert.Certificate[].class); map.put("From", java.lang.String.class); @@ -87,7 +87,7 @@ public boolean configure(CamelContext camelContext, Object obj, String name, Obj case "edimessagetransferencoding": case "ediMessageTransferEncoding": target.setEdiMessageTransferEncoding(property(camelContext, java.lang.String.class, value)); return true; case "edimessagetype": - case "ediMessageType": target.setEdiMessageType(property(camelContext, org.apache.http.entity.ContentType.class, value)); return true; + case "ediMessageType": target.setEdiMessageType(property(camelContext, org.apache.hc.core5.http.ContentType.class, value)); return true; case "encryptingalgorithm": case "encryptingAlgorithm": target.setEncryptingAlgorithm(property(camelContext, org.apache.camel.component.as2.api.AS2EncryptionAlgorithm.class, value)); return true; case "encryptingcertificatechain": @@ -170,7 +170,7 @@ public Class getOptionType(String name, boolean ignoreCase) { case "edimessagetransferencoding": case "ediMessageTransferEncoding": return java.lang.String.class; case "edimessagetype": - case "ediMessageType": return org.apache.http.entity.ContentType.class; + case "ediMessageType": return org.apache.hc.core5.http.ContentType.class; case "encryptingalgorithm": case "encryptingAlgorithm": return org.apache.camel.component.as2.api.AS2EncryptionAlgorithm.class; case "encryptingcertificatechain": diff --git a/components/camel-as2/camel-as2-component/src/generated/java/org/apache/camel/component/as2/converter/ContentTypeConverterLoader.java b/components/camel-as2/camel-as2-component/src/generated/java/org/apache/camel/component/as2/converter/ContentTypeConverterLoader.java index 6fd83fbaad0eb..eb58e70f081b4 100644 --- a/components/camel-as2/camel-as2-component/src/generated/java/org/apache/camel/component/as2/converter/ContentTypeConverterLoader.java +++ b/components/camel-as2/camel-as2-component/src/generated/java/org/apache/camel/component/as2/converter/ContentTypeConverterLoader.java @@ -41,7 +41,7 @@ public void load(TypeConverterRegistry registry) throws TypeConverterLoaderExcep } private void registerConverters(TypeConverterRegistry registry) { - addTypeConverter(registry, org.apache.http.entity.ContentType.class, java.lang.String.class, false, + addTypeConverter(registry, org.apache.hc.core5.http.ContentType.class, java.lang.String.class, false, (type, exchange, value) -> org.apache.camel.component.as2.converter.ContentTypeConverter.toContentType((java.lang.String) value)); } diff --git a/components/camel-as2/camel-as2-component/src/generated/java/org/apache/camel/component/as2/internal/AS2ClientManagerApiMethod.java b/components/camel-as2/camel-as2-component/src/generated/java/org/apache/camel/component/as2/internal/AS2ClientManagerApiMethod.java index c23d6f81c163d..ba4f782638b24 100644 --- a/components/camel-as2/camel-as2-component/src/generated/java/org/apache/camel/component/as2/internal/AS2ClientManagerApiMethod.java +++ b/components/camel-as2/camel-as2-component/src/generated/java/org/apache/camel/component/as2/internal/AS2ClientManagerApiMethod.java @@ -20,7 +20,7 @@ public enum AS2ClientManagerApiMethod implements ApiMethod { SEND( - org.apache.http.protocol.HttpCoreContext.class, + org.apache.hc.core5.http.protocol.HttpCoreContext.class, "send", arg("ediMessage", String.class), arg("requestUri", String.class), @@ -29,7 +29,7 @@ public enum AS2ClientManagerApiMethod implements ApiMethod { arg("as2From", String.class), arg("as2To", String.class), arg("as2MessageStructure", org.apache.camel.component.as2.api.AS2MessageStructure.class), - arg("ediMessageContentType", org.apache.http.entity.ContentType.class), + arg("ediMessageContentType", org.apache.hc.core5.http.ContentType.class), arg("ediMessageTransferEncoding", String.class), arg("signingAlgorithm", org.apache.camel.component.as2.api.AS2SignatureAlgorithm.class), arg("signingCertificateChain", new java.security.cert.Certificate[0].getClass()), diff --git a/components/camel-as2/camel-as2-component/src/generated/java/org/apache/camel/component/as2/internal/AS2ServerManagerApiMethod.java b/components/camel-as2/camel-as2-component/src/generated/java/org/apache/camel/component/as2/internal/AS2ServerManagerApiMethod.java index 7ee9b7ff256df..60f918922ab5a 100644 --- a/components/camel-as2/camel-as2-component/src/generated/java/org/apache/camel/component/as2/internal/AS2ServerManagerApiMethod.java +++ b/components/camel-as2/camel-as2-component/src/generated/java/org/apache/camel/component/as2/internal/AS2ServerManagerApiMethod.java @@ -23,7 +23,7 @@ public enum AS2ServerManagerApiMethod implements ApiMethod { void.class, "listen", arg("requestUriPattern", String.class), - arg("handler", org.apache.http.protocol.HttpRequestHandler.class)); + arg("handler", org.apache.hc.core5.http.io.HttpRequestHandler.class)); private final ApiMethod apiMethod; diff --git a/components/camel-as2/camel-as2-component/src/generated/resources/META-INF/org/apache/camel/component/as2/as2.json b/components/camel-as2/camel-as2-component/src/generated/resources/META-INF/org/apache/camel/component/as2/as2.json index c1bdb573241c4..9d279ce2cdcc0 100644 --- a/components/camel-as2/camel-as2-component/src/generated/resources/META-INF/org/apache/camel/component/as2/as2.json +++ b/components/camel-as2/camel-as2-component/src/generated/resources/META-INF/org/apache/camel/component/as2/as2.json @@ -41,7 +41,7 @@ "compressionAlgorithm": { "index": 8, "kind": "parameter", "displayName": "Compression Algorithm", "group": "common", "label": "", "required": false, "type": "object", "javaType": "org.apache.camel.component.as2.api.AS2CompressionAlgorithm", "enum": [ "ZLIB" ], "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.as2.AS2Configuration", "configurationField": "configuration", "description": "The algorithm used to compress EDI message." }, "dispositionNotificationTo": { "index": 9, "kind": "parameter", "displayName": "Disposition Notification To", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.as2.AS2Configuration", "configurationField": "configuration", "description": "The value of the Disposition-Notification-To header. Assigning a value to this parameter requests a message disposition notification (MDN) for the AS2 message." }, "ediMessageTransferEncoding": { "index": 10, "kind": "parameter", "displayName": "Edi Message Transfer Encoding", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.as2.AS2Configuration", "configurationField": "configuration", "description": "The transfer encoding of EDI message." }, - "ediMessageType": { "index": 11, "kind": "parameter", "displayName": "Edi Message Type", "group": "common", "label": "", "required": false, "type": "object", "javaType": "org.apache.http.entity.ContentType", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.as2.AS2Configuration", "configurationField": "configuration", "description": "The content type of EDI message. One of application\/edifact, application\/edi-x12, application\/edi-consent, application\/xml" }, + "ediMessageType": { "index": 11, "kind": "parameter", "displayName": "Edi Message Type", "group": "common", "label": "", "required": false, "type": "object", "javaType": "org.apache.hc.core5.http.ContentType", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.as2.AS2Configuration", "configurationField": "configuration", "description": "The content type of EDI message. One of application\/edifact, application\/edi-x12, application\/edi-consent, application\/xml" }, "from": { "index": 12, "kind": "parameter", "displayName": "From", "group": "common", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.as2.AS2Configuration", "configurationField": "configuration", "description": "The value of the From header of AS2 message." }, "hostnameVerifier": { "index": 13, "kind": "parameter", "displayName": "Hostname Verifier", "group": "common", "label": "", "required": false, "type": "object", "javaType": "javax.net.ssl.HostnameVerifier", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.as2.AS2Configuration", "configurationField": "configuration", "description": "Set hostname verifier for SSL session." }, "httpConnectionPoolSize": { "index": 14, "kind": "parameter", "displayName": "Http Connection Pool Size", "group": "common", "label": "", "required": false, "type": "integer", "javaType": "java.lang.Integer", "deprecated": false, "autowired": false, "secret": false, "defaultValue": "5", "configurationClass": "org.apache.camel.component.as2.AS2Configuration", "configurationField": "configuration", "description": "The maximum size of the connection pool for http connections (client only)" }, @@ -72,11 +72,11 @@ "validateSigningCertificateChain": { "index": 39, "kind": "parameter", "displayName": "Validate Signing Certificate Chain", "group": "security", "label": "security", "required": false, "type": "object", "javaType": "java.security.cert.Certificate[]", "deprecated": false, "autowired": false, "secret": false, "configurationClass": "org.apache.camel.component.as2.AS2Configuration", "configurationField": "configuration", "description": "Certificates to validate the message's signature against. If not supplied, validation will not take place. Server: validates the received message. Client: not yet implemented, should validate the MDN" } }, "apis": { - "client": { "consumerOnly": false, "producerOnly": true, "description": "Sends EDI Messages over HTTP", "methods": { "send": { "description": "Send ediMessage to trading partner", "signatures": [ "org.apache.http.protocol.HttpCoreContext send(String ediMessage, String requestUri, String subject, String from, String as2From, String as2To, org.apache.camel.component.as2.api.AS2MessageStructure as2MessageStructure, org.apache.http.entity.ContentType ediMessageContentType, String ediMessageTransferEncoding, org.apache.camel.component.as2.api.AS2SignatureAlgorithm signingAlgorithm, java.security.cert.Certificate[] signingCertificateChain, java.security.PrivateKey signingPrivateKey, org.apache.camel.component.as2.api.AS2CompressionAlgorithm compressionAlgorithm, String dispositionNotificationTo, String[] signedReceiptMicAlgorithms, org.apache.camel.component.as2.api.AS2EncryptionAlgorithm encryptingAlgorithm, java.security.cert.Certificate[] encryptingCertificateChain, String attachedFileName)" ] } } }, - "server": { "consumerOnly": true, "producerOnly": false, "description": "Receives EDI Messages over HTTP", "methods": { "listen": { "description": "", "signatures": [ "void listen(String requestUriPattern, org.apache.http.protocol.HttpRequestHandler handler)" ] } } } + "client": { "consumerOnly": false, "producerOnly": true, "description": "Sends EDI Messages over HTTP", "methods": { "send": { "description": "Send ediMessage to trading partner", "signatures": [ "org.apache.hc.core5.http.protocol.HttpCoreContext send(String ediMessage, String requestUri, String subject, String from, String as2From, String as2To, org.apache.camel.component.as2.api.AS2MessageStructure as2MessageStructure, org.apache.hc.core5.http.ContentType ediMessageContentType, String ediMessageTransferEncoding, org.apache.camel.component.as2.api.AS2SignatureAlgorithm signingAlgorithm, java.security.cert.Certificate[] signingCertificateChain, java.security.PrivateKey signingPrivateKey, org.apache.camel.component.as2.api.AS2CompressionAlgorithm compressionAlgorithm, String dispositionNotificationTo, String[] signedReceiptMicAlgorithms, org.apache.camel.component.as2.api.AS2EncryptionAlgorithm encryptingAlgorithm, java.security.cert.Certificate[] encryptingCertificateChain, String attachedFileName)" ] } } }, + "server": { "consumerOnly": true, "producerOnly": false, "description": "Receives EDI Messages over HTTP", "methods": { "listen": { "description": "", "signatures": [ "void listen(String requestUriPattern, org.apache.hc.core5.http.io.HttpRequestHandler handler)" ] } } } }, "apiProperties": { - "client": { "methods": { "send": { "properties": { "as2From": { "index": 0, "kind": "parameter", "displayName": "As2 From", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "AS2 name of sender", "optional": false }, "as2MessageStructure": { "index": 1, "kind": "parameter", "displayName": "As2 Message Structure", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "org.apache.camel.component.as2.api.AS2MessageStructure", "enum": [ "PLAIN", "SIGNED", "ENCRYPTED", "SIGNED_ENCRYPTED", "PLAIN_COMPRESSED", "SIGNED_COMPRESSED", "ENCRYPTED_COMPRESSED", "ENCRYPTED_COMPRESSED_SIGNED" ], "deprecated": false, "autowired": false, "secret": false, "description": "The structure of AS2 to send; see AS2MessageStructure", "optional": false }, "as2To": { "index": 2, "kind": "parameter", "displayName": "As2 To", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "AS2 name of recipient", "optional": false }, "attachedFileName": { "index": 3, "kind": "parameter", "displayName": "Attached File Name", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The name of the attached file or null if user doesn't want to specify it", "optional": true }, "compressionAlgorithm": { "index": 4, "kind": "parameter", "displayName": "Compression Algorithm", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "org.apache.camel.component.as2.api.AS2CompressionAlgorithm", "enum": [ "ZLIB" ], "deprecated": false, "autowired": false, "secret": false, "description": "The algorithm used to compress the message or null if sending EDI message uncompressed", "optional": true }, "dispositionNotificationTo": { "index": 5, "kind": "parameter", "displayName": "Disposition Notification To", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "An RFC2822 address to request a receipt or null if no receipt requested", "optional": true }, "ediMessage": { "index": 6, "kind": "parameter", "displayName": "Edi Message", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "EDI message to transport", "optional": false }, "ediMessageContentType": { "index": 7, "kind": "parameter", "displayName": "Edi Message Content Type", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "org.apache.http.entity.ContentType", "deprecated": false, "autowired": false, "secret": false, "description": "The content type of EDI message", "optional": false }, "ediMessageTransferEncoding": { "index": 8, "kind": "parameter", "displayName": "Edi Message Transfer Encoding", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The transfer encoding used to transport EDI message", "optional": true }, "encryptingAlgorithm": { "index": 9, "kind": "parameter", "displayName": "Encrypting Algorithm", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "org.apache.camel.component.as2.api.AS2EncryptionAlgorithm", "enum": [ "AES128_CBC", "AES192_CBC", "AES256_CBC", "AES128_CCM", "AES192_CCM", "AES256_CCM", "AES128_GCM", "AES192_GCM", "AES256_GCM", "CAMELLIA128_CBC", "CAMELLIA192_CBC", "CAMELLIA256_CBC", "CAST5_CBC", "DES_CBC", "DES_EDE3_CBC", "GOST28147_GCFB", "IDEA_CBC", "RC2_CBC", "RC4", "SEED_CBC" ], "deprecated": false, "autowired": false, "secret": false, "description": "The algorithm used to encrypt the message or null if sending EDI message unencrypted", "optional": true }, "encryptingCertificateChain": { "index": 10, "kind": "parameter", "displayName": "Encrypting Certificate Chain", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "java.security.cert.Certificate[]", "deprecated": false, "autowired": false, "secret": false, "description": "The chain of certificates used to encrypt the message or null if sending EDI message unencrypted", "optional": true }, "from": { "index": 11, "kind": "parameter", "displayName": "From", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "RFC2822 address of sender", "optional": false }, "requestUri": { "index": 12, "kind": "parameter", "displayName": "Request Uri", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Resource location to deliver message", "optional": false }, "signedReceiptMicAlgorithms": { "index": 13, "kind": "parameter", "displayName": "Signed Receipt Mic Algorithms", "group": "producer", "label": "", "required": false, "type": "array", "javaType": "java.lang.String[]", "deprecated": false, "autowired": false, "secret": false, "description": "The senders list of signing algorithms for signing receipt, in preferred order, or null if requesting an unsigned receipt.", "optional": true }, "signingAlgorithm": { "index": 14, "kind": "parameter", "displayName": "Signing Algorithm", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "org.apache.camel.component.as2.api.AS2SignatureAlgorithm", "enum": [ "SHA3_224WITHRSA", "SHA3_256WITHRSA", "SHA3_384withRSA", "SHA3_512WITHRSA", "MD5WITHRSA", "SHA1WITHRSA", "MD2WITHRSA", "SHA224WITHRSA", "SHA256WITHRSA", "SHA384WITHRSA", "SHA512WITHRSA", "RIPEMD128WITHRSA", "RIPEMD160WITHRSA", "RIPEMD256WITHRSA", "SHA224WITHDSA", "SHA256WITHDSA", "SHA384WITHDSA", "SHA512WITHDSA", "SHA3_224WITHDSA", "SHA3_256WITHDSA", "SHA3_384WITHDSA", "SHA3_512WITHDSA", "SHA1WITHDSA", "SHA3_224WITHECDSA", "SHA3_256WITHECDSA", "SHA3_384WITHECDSA", "SHA3_512WITHECDSA", "SHA1WITHECDSA", "SHA224WITHECDSA", "SHA256WITHECDSA", "SHA384WITHECDSA", "SHA512WITHECDSA", "SHA1WITHPLAIN_ECDSA", "SHA224WITHPLAIN_ECDSA", "SHA256WITHPLAIN_ECDSA", "SHA384WITHPLAIN_ECDSA", "SHA512WITHPLAIN_ECDSA", "RIPEMD160WITHPLAIN_ECDSA", "SHA1WITHRSAANDMGF1", "SHA224WITHRSAANDMGF1", "SHA256WITHRSAANDMGF1", "SHA384WITHRSAANDMGF1", "SHA512WITHRSAANDMGF1", "SHA3_224WITHRSAANDMGF1", "SHA3_256WITHRSAANDMGF1", "SHA3_384WITHRSAANDMGF1", "SHA3_512WITHRSAANDMGF1" ], "deprecated": false, "autowired": false, "secret": false, "description": "The algorithm used to sign the message or null if sending EDI message unsigned", "optional": true }, "signingCertificateChain": { "index": 15, "kind": "parameter", "displayName": "Signing Certificate Chain", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "java.security.cert.Certificate[]", "deprecated": false, "autowired": false, "secret": false, "description": "The chain of certificates used to sign the message or null if sending EDI message unsigned", "optional": true }, "signingPrivateKey": { "index": 16, "kind": "parameter", "displayName": "Signing Private Key", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "java.security.PrivateKey", "deprecated": false, "autowired": false, "secret": false, "description": "The private key used to sign EDI message", "optional": true }, "subject": { "index": 17, "kind": "parameter", "displayName": "Subject", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Message subject", "optional": false } } } } }, + "client": { "methods": { "send": { "properties": { "as2From": { "index": 0, "kind": "parameter", "displayName": "As2 From", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "AS2 name of sender", "optional": false }, "as2MessageStructure": { "index": 1, "kind": "parameter", "displayName": "As2 Message Structure", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "org.apache.camel.component.as2.api.AS2MessageStructure", "enum": [ "PLAIN", "SIGNED", "ENCRYPTED", "SIGNED_ENCRYPTED", "PLAIN_COMPRESSED", "SIGNED_COMPRESSED", "ENCRYPTED_COMPRESSED", "ENCRYPTED_COMPRESSED_SIGNED" ], "deprecated": false, "autowired": false, "secret": false, "description": "The structure of AS2 to send; see AS2MessageStructure", "optional": false }, "as2To": { "index": 2, "kind": "parameter", "displayName": "As2 To", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "AS2 name of recipient", "optional": false }, "attachedFileName": { "index": 3, "kind": "parameter", "displayName": "Attached File Name", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The name of the attached file or null if user doesn't want to specify it", "optional": true }, "compressionAlgorithm": { "index": 4, "kind": "parameter", "displayName": "Compression Algorithm", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "org.apache.camel.component.as2.api.AS2CompressionAlgorithm", "enum": [ "ZLIB" ], "deprecated": false, "autowired": false, "secret": false, "description": "The algorithm used to compress the message or null if sending EDI message uncompressed", "optional": true }, "dispositionNotificationTo": { "index": 5, "kind": "parameter", "displayName": "Disposition Notification To", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "An RFC2822 address to request a receipt or null if no receipt requested", "optional": true }, "ediMessage": { "index": 6, "kind": "parameter", "displayName": "Edi Message", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "EDI message to transport", "optional": false }, "ediMessageContentType": { "index": 7, "kind": "parameter", "displayName": "Edi Message Content Type", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "org.apache.hc.core5.http.ContentType", "deprecated": false, "autowired": false, "secret": false, "description": "The content type of EDI message", "optional": false }, "ediMessageTransferEncoding": { "index": 8, "kind": "parameter", "displayName": "Edi Message Transfer Encoding", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "The transfer encoding used to transport EDI message", "optional": true }, "encryptingAlgorithm": { "index": 9, "kind": "parameter", "displayName": "Encrypting Algorithm", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "org.apache.camel.component.as2.api.AS2EncryptionAlgorithm", "enum": [ "AES128_CBC", "AES192_CBC", "AES256_CBC", "AES128_CCM", "AES192_CCM", "AES256_CCM", "AES128_GCM", "AES192_GCM", "AES256_GCM", "CAMELLIA128_CBC", "CAMELLIA192_CBC", "CAMELLIA256_CBC", "CAST5_CBC", "DES_CBC", "DES_EDE3_CBC", "GOST28147_GCFB", "IDEA_CBC", "RC2_CBC", "RC4", "SEED_CBC" ], "deprecated": false, "autowired": false, "secret": false, "description": "The algorithm used to encrypt the message or null if sending EDI message unencrypted", "optional": true }, "encryptingCertificateChain": { "index": 10, "kind": "parameter", "displayName": "Encrypting Certificate Chain", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "java.security.cert.Certificate[]", "deprecated": false, "autowired": false, "secret": false, "description": "The chain of certificates used to encrypt the message or null if sending EDI message unencrypted", "optional": true }, "from": { "index": 11, "kind": "parameter", "displayName": "From", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "RFC2822 address of sender", "optional": false }, "requestUri": { "index": 12, "kind": "parameter", "displayName": "Request Uri", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Resource location to deliver message", "optional": false }, "signedReceiptMicAlgorithms": { "index": 13, "kind": "parameter", "displayName": "Signed Receipt Mic Algorithms", "group": "producer", "label": "", "required": false, "type": "array", "javaType": "java.lang.String[]", "deprecated": false, "autowired": false, "secret": false, "description": "The senders list of signing algorithms for signing receipt, in preferred order, or null if requesting an unsigned receipt.", "optional": true }, "signingAlgorithm": { "index": 14, "kind": "parameter", "displayName": "Signing Algorithm", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "org.apache.camel.component.as2.api.AS2SignatureAlgorithm", "enum": [ "SHA3_224WITHRSA", "SHA3_256WITHRSA", "SHA3_384withRSA", "SHA3_512WITHRSA", "MD5WITHRSA", "SHA1WITHRSA", "MD2WITHRSA", "SHA224WITHRSA", "SHA256WITHRSA", "SHA384WITHRSA", "SHA512WITHRSA", "RIPEMD128WITHRSA", "RIPEMD160WITHRSA", "RIPEMD256WITHRSA", "SHA224WITHDSA", "SHA256WITHDSA", "SHA384WITHDSA", "SHA512WITHDSA", "SHA3_224WITHDSA", "SHA3_256WITHDSA", "SHA3_384WITHDSA", "SHA3_512WITHDSA", "SHA1WITHDSA", "SHA3_224WITHECDSA", "SHA3_256WITHECDSA", "SHA3_384WITHECDSA", "SHA3_512WITHECDSA", "SHA1WITHECDSA", "SHA224WITHECDSA", "SHA256WITHECDSA", "SHA384WITHECDSA", "SHA512WITHECDSA", "SHA1WITHPLAIN_ECDSA", "SHA224WITHPLAIN_ECDSA", "SHA256WITHPLAIN_ECDSA", "SHA384WITHPLAIN_ECDSA", "SHA512WITHPLAIN_ECDSA", "RIPEMD160WITHPLAIN_ECDSA", "SHA1WITHRSAANDMGF1", "SHA224WITHRSAANDMGF1", "SHA256WITHRSAANDMGF1", "SHA384WITHRSAANDMGF1", "SHA512WITHRSAANDMGF1", "SHA3_224WITHRSAANDMGF1", "SHA3_256WITHRSAANDMGF1", "SHA3_384WITHRSAANDMGF1", "SHA3_512WITHRSAANDMGF1" ], "deprecated": false, "autowired": false, "secret": false, "description": "The algorithm used to sign the message or null if sending EDI message unsigned", "optional": true }, "signingCertificateChain": { "index": 15, "kind": "parameter", "displayName": "Signing Certificate Chain", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "java.security.cert.Certificate[]", "deprecated": false, "autowired": false, "secret": false, "description": "The chain of certificates used to sign the message or null if sending EDI message unsigned", "optional": true }, "signingPrivateKey": { "index": 16, "kind": "parameter", "displayName": "Signing Private Key", "group": "producer", "label": "", "required": false, "type": "object", "javaType": "java.security.PrivateKey", "deprecated": false, "autowired": false, "secret": false, "description": "The private key used to sign EDI message", "optional": true }, "subject": { "index": 17, "kind": "parameter", "displayName": "Subject", "group": "producer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "Message subject", "optional": false } } } } }, "server": { "methods": { "listen": { "properties": { "requestUriPattern": { "index": 0, "kind": "parameter", "displayName": "Request Uri Pattern", "group": "consumer", "label": "", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "autowired": false, "secret": false, "description": "", "optional": false } } } } } } } diff --git a/components/camel-as2/camel-as2-component/src/main/java/org/apache/camel/component/as2/AS2Configuration.java b/components/camel-as2/camel-as2-component/src/main/java/org/apache/camel/component/as2/AS2Configuration.java index f9916915dfd15..7b19618d3e802 100644 --- a/components/camel-as2/camel-as2-component/src/main/java/org/apache/camel/component/as2/AS2Configuration.java +++ b/components/camel-as2/camel-as2-component/src/main/java/org/apache/camel/component/as2/AS2Configuration.java @@ -34,7 +34,7 @@ import org.apache.camel.spi.UriParam; import org.apache.camel.spi.UriParams; import org.apache.camel.spi.UriPath; -import org.apache.http.entity.ContentType; +import org.apache.hc.core5.http.ContentType; /** * Component configuration for AS2 component. diff --git a/components/camel-as2/camel-as2-component/src/main/java/org/apache/camel/component/as2/AS2Consumer.java b/components/camel-as2/camel-as2-component/src/main/java/org/apache/camel/component/as2/AS2Consumer.java index 92d39d0f0381e..a71af284dd0ed 100644 --- a/components/camel-as2/camel-as2-component/src/main/java/org/apache/camel/component/as2/AS2Consumer.java +++ b/components/camel-as2/camel-as2-component/src/main/java/org/apache/camel/component/as2/AS2Consumer.java @@ -33,13 +33,13 @@ import org.apache.camel.support.component.ApiConsumerHelper; import org.apache.camel.support.component.ApiMethod; import org.apache.camel.support.component.ApiMethodHelper; -import org.apache.http.HttpEntityEnclosingRequest; -import org.apache.http.HttpException; -import org.apache.http.HttpRequest; -import org.apache.http.HttpResponse; -import org.apache.http.protocol.HttpContext; -import org.apache.http.protocol.HttpCoreContext; -import org.apache.http.protocol.HttpRequestHandler; +import org.apache.hc.core5.http.ClassicHttpRequest; +import org.apache.hc.core5.http.ClassicHttpResponse; +import org.apache.hc.core5.http.HttpEntityContainer; +import org.apache.hc.core5.http.HttpException; +import org.apache.hc.core5.http.io.HttpRequestHandler; +import org.apache.hc.core5.http.protocol.HttpContext; +import org.apache.hc.core5.http.protocol.HttpCoreContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -102,20 +102,15 @@ protected void doStart() throws Exception { @Override protected void doStop() throws Exception { - if (apiProxy != null) { - String requestUri = (String) properties.get(REQUEST_URI_PROPERTY); - apiProxy.stopListening(requestUri); - } - super.doStop(); } @Override - public void handle(HttpRequest request, HttpResponse response, HttpContext context) + public void handle(ClassicHttpRequest request, ClassicHttpResponse response, HttpContext context) throws HttpException { Exception exception; try { - if (request instanceof HttpEntityEnclosingRequest) { + if (request instanceof HttpEntityContainer) { EntityParser.parseAS2MessageEntity(request); apiProxy.handleMDNResponse(context, getEndpoint().getSubject(), ofNullable(getEndpoint().getFrom()).orElse(getEndpoint().getConfiguration().getServer())); diff --git a/components/camel-as2/camel-as2-component/src/main/java/org/apache/camel/component/as2/AS2Endpoint.java b/components/camel-as2/camel-as2-component/src/main/java/org/apache/camel/component/as2/AS2Endpoint.java index 42134cf3a02ee..70aa0e4c61025 100644 --- a/components/camel-as2/camel-as2-component/src/main/java/org/apache/camel/component/as2/AS2Endpoint.java +++ b/components/camel-as2/camel-as2-component/src/main/java/org/apache/camel/component/as2/AS2Endpoint.java @@ -48,7 +48,7 @@ import org.apache.camel.support.component.AbstractApiEndpoint; import org.apache.camel.support.component.ApiMethod; import org.apache.camel.support.component.ApiMethodPropertiesHelper; -import org.apache.http.entity.ContentType; +import org.apache.hc.core5.http.ContentType; /** * Transfer data securely and reliably using the AS2 protocol (RFC4130). diff --git a/components/camel-as2/camel-as2-component/src/main/java/org/apache/camel/component/as2/AS2Producer.java b/components/camel-as2/camel-as2-component/src/main/java/org/apache/camel/component/as2/AS2Producer.java index fece60f46145e..b3c389ba8c968 100644 --- a/components/camel-as2/camel-as2-component/src/main/java/org/apache/camel/component/as2/AS2Producer.java +++ b/components/camel-as2/camel-as2-component/src/main/java/org/apache/camel/component/as2/AS2Producer.java @@ -23,9 +23,10 @@ import org.apache.camel.component.as2.internal.AS2Constants; import org.apache.camel.component.as2.internal.AS2PropertiesHelper; import org.apache.camel.support.component.AbstractApiProducer; -import org.apache.http.HttpEntity; -import org.apache.http.HttpResponse; -import org.apache.http.protocol.HttpCoreContext; +import org.apache.hc.core5.http.ClassicHttpResponse; +import org.apache.hc.core5.http.HttpEntity; +import org.apache.hc.core5.http.HttpResponse; +import org.apache.hc.core5.http.protocol.HttpCoreContext; /** * The AS2 producer. @@ -41,11 +42,13 @@ public void interceptResult(Object methodResult, Exchange resultExchange) { HttpCoreContext context = (HttpCoreContext) methodResult; resultExchange.setProperty(AS2Constants.AS2_INTERCHANGE, context); HttpResponse response = context.getResponse(); - HttpEntity entity = response.getEntity(); - if (entity instanceof DispositionNotificationMultipartReportEntity || entity instanceof MultipartSignedEntity) { - resultExchange.getMessage().setBody(entity); - } else { - resultExchange.getMessage().setBody(null); + if (response instanceof ClassicHttpResponse classicResponse) { + HttpEntity entity = classicResponse.getEntity(); + if (entity instanceof DispositionNotificationMultipartReportEntity || entity instanceof MultipartSignedEntity) { + resultExchange.getMessage().setBody(entity); + } else { + resultExchange.getMessage().setBody(null); + } } } } diff --git a/components/camel-as2/camel-as2-component/src/main/java/org/apache/camel/component/as2/converter/ContentTypeConverter.java b/components/camel-as2/camel-as2-component/src/main/java/org/apache/camel/component/as2/converter/ContentTypeConverter.java index 3662b981276a1..88c5b8f1586f9 100644 --- a/components/camel-as2/camel-as2-component/src/main/java/org/apache/camel/component/as2/converter/ContentTypeConverter.java +++ b/components/camel-as2/camel-as2-component/src/main/java/org/apache/camel/component/as2/converter/ContentTypeConverter.java @@ -18,7 +18,7 @@ import org.apache.camel.CamelException; import org.apache.camel.Converter; -import org.apache.http.entity.ContentType; +import org.apache.hc.core5.http.ContentType; /** * Content type related converters. diff --git a/components/camel-as2/camel-as2-component/src/test/java/org/apache/camel/component/as2/AS2ClientManagerIT.java b/components/camel-as2/camel-as2-component/src/test/java/org/apache/camel/component/as2/AS2ClientManagerIT.java index 3f45a164e12ca..7431f1837a789 100644 --- a/components/camel-as2/camel-as2-component/src/test/java/org/apache/camel/component/as2/AS2ClientManagerIT.java +++ b/components/camel-as2/camel-as2-component/src/test/java/org/apache/camel/component/as2/AS2ClientManagerIT.java @@ -64,19 +64,19 @@ import org.apache.camel.test.AvailablePortFinder; import org.apache.commons.lang3.tuple.ImmutableTriple; import org.apache.commons.lang3.tuple.Triple; -import org.apache.http.HttpEntity; -import org.apache.http.HttpEntityEnclosingRequest; -import org.apache.http.HttpException; -import org.apache.http.HttpRequest; -import org.apache.http.HttpResponse; -import org.apache.http.HttpVersion; -import org.apache.http.entity.ContentType; -import org.apache.http.message.BasicHttpEntityEnclosingRequest; -import org.apache.http.message.BasicHttpResponse; -import org.apache.http.protocol.HttpContext; -import org.apache.http.protocol.HttpCoreContext; -import org.apache.http.protocol.HttpDateGenerator; -import org.apache.http.protocol.HttpRequestHandler; +import org.apache.hc.core5.http.ClassicHttpRequest; +import org.apache.hc.core5.http.ClassicHttpResponse; +import org.apache.hc.core5.http.ContentType; +import org.apache.hc.core5.http.HttpEntity; +import org.apache.hc.core5.http.HttpException; +import org.apache.hc.core5.http.HttpRequest; +import org.apache.hc.core5.http.HttpResponse; +import org.apache.hc.core5.http.io.HttpRequestHandler; +import org.apache.hc.core5.http.message.BasicClassicHttpRequest; +import org.apache.hc.core5.http.message.BasicHttpResponse; +import org.apache.hc.core5.http.protocol.HttpContext; +import org.apache.hc.core5.http.protocol.HttpCoreContext; +import org.apache.hc.core5.http.protocol.HttpDateGenerator; import org.bouncycastle.cms.jcajce.ZlibExpanderProvider; import org.bouncycastle.jce.provider.BouncyCastleProvider; import org.junit.jupiter.api.AfterAll; @@ -156,7 +156,7 @@ public class AS2ClientManagerIT extends AbstractAS2ITSupport { private static X509Certificate serverCert; private static RequestHandler requestHandler; - private static final HttpDateGenerator DATE_GENERATOR = new HttpDateGenerator(); + private static final HttpDateGenerator DATE_GENERATOR = HttpDateGenerator.INSTANCE; private static KeyPair clientKeyPair; private static X509Certificate clientCert; @@ -194,8 +194,8 @@ public void plainMessageSendTest() throws Exception { assertNotNull(result, "send result"); LOG.debug("send: {}", result); assertNotNull(request, "Request"); - assertTrue(request instanceof HttpEntityEnclosingRequest, "Request does not contain body"); - HttpEntity entity = ((HttpEntityEnclosingRequest) request).getEntity(); + assertTrue(request instanceof ClassicHttpRequest, "Request does not contain body"); + HttpEntity entity = ((ClassicHttpRequest) request).getEntity(); assertNotNull(entity, "Request body"); assertTrue(entity instanceof ApplicationEntity, "Request body does not contain EDI entity"); String ediMessage = ((ApplicationEntity) entity).getEdiMessage(); @@ -222,10 +222,10 @@ public void plainMessageSendTest() throws Exception { assertEquals(2, reportEntity.getPartCount(), "Unexpected number of body parts in report"); MimeEntity firstPart = reportEntity.getPart(0); assertEquals(ContentType.create(AS2MimeType.TEXT_PLAIN, StandardCharsets.US_ASCII).toString(), - firstPart.getContentTypeValue(), "Unexpected content type in first body part of report"); + firstPart.getContentType(), "Unexpected content type in first body part of report"); MimeEntity secondPart = reportEntity.getPart(1); - assertEquals(ContentType.create(AS2MimeType.MESSAGE_DISPOSITION_NOTIFICATION, StandardCharsets.US_ASCII).toString(), - secondPart.getContentTypeValue(), + assertEquals(ContentType.create(AS2MimeType.MESSAGE_DISPOSITION_NOTIFICATION).toString(), + secondPart.getContentType(), "Unexpected content type in second body part of report"); assertTrue(secondPart instanceof AS2MessageDispositionNotificationEntity, ""); @@ -275,8 +275,8 @@ public void plainMessageSendTestWhenDispositionNotificationToNotSet() throws Exc assertNotNull(result, "send result"); LOG.debug("send: {}", result); assertNotNull(request, "Request"); - assertTrue(request instanceof HttpEntityEnclosingRequest, "Request does not contain body"); - HttpEntity entity = ((HttpEntityEnclosingRequest) request).getEntity(); + assertTrue(request instanceof ClassicHttpRequest, "Request does not contain body"); + HttpEntity entity = ((ClassicHttpRequest) request).getEntity(); assertNotNull(entity, "Request body"); assertTrue(entity instanceof ApplicationEntity, "Request body does not contain EDI entity"); String ediMessage = ((ApplicationEntity) entity).getEdiMessage(); @@ -328,8 +328,8 @@ public void plainMessageSend2Test() throws Exception { assertNotNull(result, "send result"); LOG.debug("send: {}", result); assertNotNull(request, "Request"); - assertTrue(request instanceof HttpEntityEnclosingRequest, "Request does not contain body"); - HttpEntity entity = ((HttpEntityEnclosingRequest) request).getEntity(); + assertTrue(request instanceof ClassicHttpRequest, "Request does not contain body"); + HttpEntity entity = ((ClassicHttpRequest) request).getEntity(); assertNotNull(entity, "Request body"); assertTrue(entity instanceof ApplicationEntity, "Request body does not contain EDI entity"); String ediMessage = ((ApplicationEntity) entity).getEdiMessage(); @@ -356,10 +356,10 @@ public void plainMessageSend2Test() throws Exception { assertEquals(2, reportEntity.getPartCount(), "Unexpected number of body parts in report"); MimeEntity firstPart = reportEntity.getPart(0); assertEquals(ContentType.create(AS2MimeType.TEXT_PLAIN, StandardCharsets.US_ASCII).toString(), - firstPart.getContentTypeValue(), "Unexpected content type in first body part of report"); + firstPart.getContentType(), "Unexpected content type in first body part of report"); MimeEntity secondPart = reportEntity.getPart(1); - assertEquals(ContentType.create(AS2MimeType.MESSAGE_DISPOSITION_NOTIFICATION, StandardCharsets.US_ASCII).toString(), - secondPart.getContentTypeValue(), + assertEquals(ContentType.create(AS2MimeType.MESSAGE_DISPOSITION_NOTIFICATION).toString(), + secondPart.getContentType(), "Unexpected content type in second body part of report"); assertTrue(secondPart instanceof AS2MessageDispositionNotificationEntity, ""); @@ -416,8 +416,8 @@ public void envelopedMessageSendTest() throws Exception { LOG.debug("send: {}", result); assertNotNull(request, "Request"); - assertTrue(request instanceof HttpEntityEnclosingRequest, "Request does not contain body"); - HttpEntity entity = ((HttpEntityEnclosingRequest) request).getEntity(); + assertTrue(request instanceof ClassicHttpRequest, "Request does not contain body"); + HttpEntity entity = ((ClassicHttpRequest) request).getEntity(); assertNotNull(entity, "Request body"); assertTrue(entity instanceof ApplicationPkcs7MimeEnvelopedDataEntity, "Request body does not contain ApplicationPkcs7Mime entity"); @@ -448,10 +448,10 @@ public void envelopedMessageSendTest() throws Exception { assertEquals(2, reportEntity.getPartCount(), "Unexpected number of body parts in report"); MimeEntity firstPart = reportEntity.getPart(0); assertEquals(ContentType.create(AS2MimeType.TEXT_PLAIN, StandardCharsets.US_ASCII).toString(), - firstPart.getContentTypeValue(), "Unexpected content type in first body part of report"); + firstPart.getContentType(), "Unexpected content type in first body part of report"); MimeEntity secondPart = reportEntity.getPart(1); - assertEquals(ContentType.create(AS2MimeType.MESSAGE_DISPOSITION_NOTIFICATION, StandardCharsets.US_ASCII).toString(), - secondPart.getContentTypeValue(), + assertEquals(ContentType.create(AS2MimeType.MESSAGE_DISPOSITION_NOTIFICATION).toString(), + secondPart.getContentType(), "Unexpected content type in second body part of report"); assertTrue(secondPart instanceof AS2MessageDispositionNotificationEntity, ""); @@ -511,8 +511,8 @@ public void multipartSignedMessageTest() throws Exception { assertNotNull(result, "send result"); LOG.debug("send: {}", result); assertNotNull(request, "Request"); - assertTrue(request instanceof HttpEntityEnclosingRequest, "Request does not contain body"); - HttpEntity entity = ((HttpEntityEnclosingRequest) request).getEntity(); + assertTrue(request instanceof ClassicHttpRequest, "Request does not contain body"); + HttpEntity entity = ((ClassicHttpRequest) request).getEntity(); assertNotNull(entity, "Request body"); assertTrue(entity instanceof MultipartSignedEntity, "Request body does not contain EDI entity"); @@ -550,10 +550,10 @@ public void multipartSignedMessageTest() throws Exception { assertEquals(2, reportEntity.getPartCount(), "Unexpected number of body parts in report"); MimeEntity firstPart = reportEntity.getPart(0); assertEquals(ContentType.create(AS2MimeType.TEXT_PLAIN, StandardCharsets.US_ASCII).toString(), - firstPart.getContentTypeValue(), "Unexpected content type in first body part of report"); + firstPart.getContentType(), "Unexpected content type in first body part of report"); MimeEntity secondPart = reportEntity.getPart(1); - assertEquals(ContentType.create(AS2MimeType.MESSAGE_DISPOSITION_NOTIFICATION, StandardCharsets.US_ASCII).toString(), - secondPart.getContentTypeValue(), + assertEquals(ContentType.create(AS2MimeType.MESSAGE_DISPOSITION_NOTIFICATION).toString(), + secondPart.getContentType(), "Unexpected content type in second body part of report"); ApplicationPkcs7SignatureEntity signatureEntity = responseSignedEntity.getSignatureEntity(); assertNotNull(signatureEntity, "Signature Entity"); @@ -574,7 +574,7 @@ public void multipartSignedMessageTest() throws Exception { ReceivedContentMic receivedContentMic = messageDispositionNotificationEntity.getReceivedContentMic(); ReceivedContentMic computedContentMic - = MicUtils.createReceivedContentMic((HttpEntityEnclosingRequest) request, new Certificate[] { clientCert }, + = MicUtils.createReceivedContentMic((ClassicHttpRequest) request, new Certificate[] { clientCert }, clientKeyPair.getPrivate()); assertEquals(computedContentMic.getEncodedMessageDigest(), receivedContentMic.getEncodedMessageDigest(), "Received content MIC does not match computed"); @@ -621,8 +621,8 @@ public void multipartSignedXMLMessageTest() throws Exception { assertNotNull(result, "send result"); LOG.debug("send: {}", result); assertNotNull(request, "Request"); - assertTrue(request instanceof HttpEntityEnclosingRequest, "Request does not contain body"); - HttpEntity entity = ((HttpEntityEnclosingRequest) request).getEntity(); + assertTrue(request instanceof ClassicHttpRequest, "Request does not contain body"); + HttpEntity entity = ((ClassicHttpRequest) request).getEntity(); assertNotNull(entity, "Request body"); assertTrue(entity instanceof MultipartSignedEntity, "Request body does not contain EDI entity"); @@ -660,10 +660,10 @@ public void multipartSignedXMLMessageTest() throws Exception { assertEquals(2, reportEntity.getPartCount(), "Unexpected number of body parts in report"); MimeEntity firstPart = reportEntity.getPart(0); assertEquals(ContentType.create(AS2MimeType.TEXT_PLAIN, StandardCharsets.US_ASCII).toString(), - firstPart.getContentTypeValue(), "Unexpected content type in first body part of report"); + firstPart.getContentType(), "Unexpected content type in first body part of report"); MimeEntity secondPart = reportEntity.getPart(1); - assertEquals(ContentType.create(AS2MimeType.MESSAGE_DISPOSITION_NOTIFICATION, StandardCharsets.US_ASCII).toString(), - secondPart.getContentTypeValue(), + assertEquals(ContentType.create(AS2MimeType.MESSAGE_DISPOSITION_NOTIFICATION).toString(), + secondPart.getContentType(), "Unexpected content type in second body part of report"); ApplicationPkcs7SignatureEntity signatureEntity = responseSignedEntity.getSignatureEntity(); assertNotNull(signatureEntity, "Signature Entity"); @@ -684,7 +684,7 @@ public void multipartSignedXMLMessageTest() throws Exception { ReceivedContentMic receivedContentMic = messageDispositionNotificationEntity.getReceivedContentMic(); ReceivedContentMic computedContentMic - = MicUtils.createReceivedContentMic((HttpEntityEnclosingRequest) request, new Certificate[] { clientCert }, + = MicUtils.createReceivedContentMic((ClassicHttpRequest) request, new Certificate[] { clientCert }, clientKeyPair.getPrivate()); assertEquals(computedContentMic.getEncodedMessageDigest(), receivedContentMic.getEncodedMessageDigest(), "Received content MIC does not match computed"); @@ -727,8 +727,8 @@ public void compressedMessageTest() throws Exception { assertNotNull(result, "send result"); LOG.debug("send: {}", result); assertNotNull(request, "Request"); - assertTrue(request instanceof HttpEntityEnclosingRequest, "Request does not contain body"); - HttpEntity entity = ((HttpEntityEnclosingRequest) request).getEntity(); + assertTrue(request instanceof ClassicHttpRequest, "Request does not contain body"); + HttpEntity entity = ((ClassicHttpRequest) request).getEntity(); assertNotNull(entity, "Request body"); assertTrue(entity instanceof ApplicationPkcs7MimeCompressedDataEntity, "Request body does not contain EDI entity"); @@ -767,10 +767,10 @@ public void compressedMessageTest() throws Exception { assertEquals(2, reportEntity.getPartCount(), "Unexpected number of body parts in report"); MimeEntity firstPart = reportEntity.getPart(0); assertEquals(ContentType.create(AS2MimeType.TEXT_PLAIN, StandardCharsets.US_ASCII).toString(), - firstPart.getContentTypeValue(), "Unexpected content type in first body part of report"); + firstPart.getContentType(), "Unexpected content type in first body part of report"); MimeEntity secondPart = reportEntity.getPart(1); - assertEquals(ContentType.create(AS2MimeType.MESSAGE_DISPOSITION_NOTIFICATION, StandardCharsets.US_ASCII).toString(), - secondPart.getContentTypeValue(), + assertEquals(ContentType.create(AS2MimeType.MESSAGE_DISPOSITION_NOTIFICATION).toString(), + secondPart.getContentType(), "Unexpected content type in second body part of report"); ApplicationPkcs7SignatureEntity signatureEntity = responseSignedEntity.getSignatureEntity(); assertNotNull(signatureEntity, "Signature Entity"); @@ -791,7 +791,7 @@ public void compressedMessageTest() throws Exception { ReceivedContentMic receivedContentMic = messageDispositionNotificationEntity.getReceivedContentMic(); ReceivedContentMic computedContentMic - = MicUtils.createReceivedContentMic((HttpEntityEnclosingRequest) request, new Certificate[] { clientCert }, + = MicUtils.createReceivedContentMic((ClassicHttpRequest) request, new Certificate[] { clientCert }, clientKeyPair.getPrivate()); assertEquals(computedContentMic.getEncodedMessageDigest(), receivedContentMic.getEncodedMessageDigest(), "Received content MIC does not match computed"); @@ -812,7 +812,7 @@ private void runAsyncMDNTest() throws CamelException, HttpException { ApplicationEntity ediEntity = EntityUtils.createEDIEntity(EDI_MESSAGE, ContentType.create(AS2MediaType.APPLICATION_EDIFACT, StandardCharsets.US_ASCII), null, false, ATTACHED_FILE_NAME); - HttpEntityEnclosingRequest request = new BasicHttpEntityEnclosingRequest("POST", REQUEST_URI); + BasicClassicHttpRequest request = new BasicClassicHttpRequest("POST", REQUEST_URI); HttpMessageUtils.setHeaderValue(request, AS2Header.SUBJECT, SUBJECT); String httpdate = DATE_GENERATOR.getCurrentDate(); HttpMessageUtils.setHeaderValue(request, AS2Header.DATE, httpdate); @@ -825,7 +825,7 @@ private void runAsyncMDNTest() throws CamelException, HttpException { EntityUtils.setMessageEntity(request, ediEntity); // Create response for MDN creation. - HttpResponse response = new BasicHttpResponse(HttpVersion.HTTP_1_1, 200, "OK"); + HttpResponse response = new BasicHttpResponse(200, "OK"); httpdate = DATE_GENERATOR.getCurrentDate(); response.setHeader(AS2Header.DATE, httpdate); response.setHeader(AS2Header.SERVER, REPORTING_UA); @@ -858,7 +858,6 @@ public static void setupTest() throws Exception { @AfterAll public static void teardownTest() throws Exception { if (serverConnection != null) { - serverConnection.stopListening("/"); serverConnection.close(); } } @@ -869,7 +868,7 @@ public static class RequestHandler implements HttpRequestHandler { private HttpResponse response; @Override - public void handle(HttpRequest request, HttpResponse response, HttpContext context) + public void handle(ClassicHttpRequest request, ClassicHttpResponse response, HttpContext context) throws HttpException, IOException { LOG.info("Received test message: {}", request); context.setAttribute(AS2ServerManager.FROM, MDN_FROM); diff --git a/components/camel-as2/camel-as2-component/src/test/java/org/apache/camel/component/as2/AS2ServerManagerIT.java b/components/camel-as2/camel-as2-component/src/test/java/org/apache/camel/component/as2/AS2ServerManagerIT.java index 9b2618ccb7bd9..8a5dbb4a9f99e 100644 --- a/components/camel-as2/camel-as2-component/src/test/java/org/apache/camel/component/as2/AS2ServerManagerIT.java +++ b/components/camel-as2/camel-as2-component/src/test/java/org/apache/camel/component/as2/AS2ServerManagerIT.java @@ -60,14 +60,15 @@ import org.apache.camel.support.jsse.SSLContextParameters; import org.apache.camel.support.jsse.SSLContextServerParameters; import org.apache.camel.support.jsse.TrustManagersParameters; -import org.apache.http.HttpEntity; -import org.apache.http.HttpRequest; -import org.apache.http.HttpResponse; -import org.apache.http.HttpStatus; -import org.apache.http.HttpVersion; -import org.apache.http.entity.ContentType; -import org.apache.http.message.BasicHttpEntityEnclosingRequest; -import org.apache.http.protocol.HttpCoreContext; +import org.apache.hc.core5.http.ClassicHttpRequest; +import org.apache.hc.core5.http.ClassicHttpResponse; +import org.apache.hc.core5.http.ContentType; +import org.apache.hc.core5.http.HttpEntity; +import org.apache.hc.core5.http.HttpRequest; +import org.apache.hc.core5.http.HttpResponse; +import org.apache.hc.core5.http.HttpStatus; +import org.apache.hc.core5.http.HttpVersion; +import org.apache.hc.core5.http.protocol.HttpCoreContext; import org.bouncycastle.asn1.ASN1EncodableVector; import org.bouncycastle.asn1.cms.IssuerAndSerialNumber; import org.bouncycastle.asn1.smime.SMIMECapabilitiesAttribute; @@ -193,9 +194,9 @@ public void receivePlainEDIMessageTest() throws Exception { assertNotNull(coreContext, "context"); HttpRequest request = coreContext.getRequest(); assertNotNull(request, "request"); - assertEquals(METHOD, request.getRequestLine().getMethod(), "Unexpected method value"); - assertEquals(REQUEST_URI, request.getRequestLine().getUri(), "Unexpected request URI value"); - assertEquals(HttpVersion.HTTP_1_1, request.getRequestLine().getProtocolVersion(), "Unexpected HTTP version value"); + assertEquals(METHOD, request.getMethod(), "Unexpected method value"); + assertEquals(REQUEST_URI, request.getUri().getPath(), "Unexpected request URI value"); + assertEquals(HttpVersion.HTTP_1_1, request.getVersion(), "Unexpected HTTP version value"); assertEquals(SUBJECT, request.getFirstHeader(AS2Header.SUBJECT).getValue(), "Unexpected subject value"); assertEquals(FROM, request.getFirstHeader(AS2Header.FROM).getValue(), "Unexpected from value"); assertEquals(AS2_VERSION, request.getFirstHeader(AS2Header.AS2_VERSION).getValue(), "Unexpected AS2 version value"); @@ -211,12 +212,12 @@ public void receivePlainEDIMessageTest() throws Exception { assertTrue(request.getFirstHeader(AS2Header.CONTENT_TYPE).getValue().startsWith(AS2MediaType.APPLICATION_EDIFACT), "Unexpected content type for message"); - assertTrue(request instanceof BasicHttpEntityEnclosingRequest, "Request does not contain entity"); - HttpEntity entity = ((BasicHttpEntityEnclosingRequest) request).getEntity(); + assertTrue(request instanceof ClassicHttpRequest, "Request does not contain entity"); + HttpEntity entity = ((ClassicHttpRequest) request).getEntity(); assertNotNull(entity, "Request does not contain entity"); assertTrue(entity instanceof ApplicationEDIFACTEntity, "Unexpected request entity type"); ApplicationEDIFACTEntity ediEntity = (ApplicationEDIFACTEntity) entity; - assertTrue(ediEntity.getContentType().getValue().startsWith(AS2MediaType.APPLICATION_EDIFACT), + assertTrue(ediEntity.getContentType().startsWith(AS2MediaType.APPLICATION_EDIFACT), "Unexpected content type for entity"); assertTrue(ediEntity.isMainBody(), "Entity not set as main body of request"); String rcvdMessage = ediEntity.getEdiMessage().replaceAll("\r", ""); @@ -260,9 +261,9 @@ public void receiveMultipartSignedMessageTest() throws Exception { assertNotNull(coreContext, "context"); HttpRequest request = coreContext.getRequest(); assertNotNull(request, "request"); - assertEquals(METHOD, request.getRequestLine().getMethod(), "Unexpected method value"); - assertEquals(REQUEST_URI, request.getRequestLine().getUri(), "Unexpected request URI value"); - assertEquals(HttpVersion.HTTP_1_1, request.getRequestLine().getProtocolVersion(), "Unexpected HTTP version value"); + assertEquals(METHOD, request.getMethod(), "Unexpected method value"); + assertEquals(REQUEST_URI, request.getUri().getPath(), "Unexpected request URI value"); + assertEquals(HttpVersion.HTTP_1_1, request.getVersion(), "Unexpected HTTP version value"); assertEquals(SUBJECT, request.getFirstHeader(AS2Header.SUBJECT).getValue(), "Unexpected subject value"); assertEquals(FROM, request.getFirstHeader(AS2Header.FROM).getValue(), "Unexpected from value"); @@ -279,8 +280,8 @@ public void receiveMultipartSignedMessageTest() throws Exception { assertTrue(request.getFirstHeader(AS2Header.CONTENT_TYPE).getValue().startsWith(AS2MediaType.MULTIPART_SIGNED), "Unexpected content type for message"); - assertTrue(request instanceof BasicHttpEntityEnclosingRequest, "Request does not contain entity"); - HttpEntity entity = ((BasicHttpEntityEnclosingRequest) request).getEntity(); + assertTrue(request instanceof ClassicHttpRequest, "Request does not contain entity"); + HttpEntity entity = ((ClassicHttpRequest) request).getEntity(); assertNotNull(entity, "Request does not contain entity"); assertTrue(entity instanceof MultipartSignedEntity, "Unexpected request entity type"); MultipartSignedEntity signedEntity = (MultipartSignedEntity) entity; @@ -290,14 +291,14 @@ public void receiveMultipartSignedMessageTest() throws Exception { // Validated first mime part. assertTrue(signedEntity.getPart(0) instanceof ApplicationEDIFACTEntity, "First mime part incorrect type "); ApplicationEDIFACTEntity ediEntity = (ApplicationEDIFACTEntity) signedEntity.getPart(0); - assertTrue(ediEntity.getContentType().getValue().startsWith(AS2MediaType.APPLICATION_EDIFACT), + assertTrue(ediEntity.getContentType().startsWith(AS2MediaType.APPLICATION_EDIFACT), "Unexpected content type for first mime part"); assertFalse(ediEntity.isMainBody(), "First mime type set as main body of request"); // Validate second mime part. assertTrue(signedEntity.getPart(1) instanceof ApplicationPkcs7SignatureEntity, "Second mime part incorrect type "); ApplicationPkcs7SignatureEntity signatureEntity = (ApplicationPkcs7SignatureEntity) signedEntity.getPart(1); - assertTrue(signatureEntity.getContentType().getValue().startsWith(AS2MediaType.APPLICATION_PKCS7_SIGNATURE), + assertTrue(signatureEntity.getContentType().startsWith(AS2MediaType.APPLICATION_PKCS7_SIGNATURE), "Unexpected content type for second mime part"); assertFalse(signatureEntity.isMainBody(), "First mime type set as main body of request"); @@ -342,9 +343,9 @@ public void receiveMultipartSignedXMLMessageTest() throws Exception { assertNotNull(coreContext, "context"); HttpRequest request = coreContext.getRequest(); assertNotNull(request, "request"); - assertEquals(METHOD, request.getRequestLine().getMethod(), "Unexpected method value"); - assertEquals(REQUEST_URI, request.getRequestLine().getUri(), "Unexpected request URI value"); - assertEquals(HttpVersion.HTTP_1_1, request.getRequestLine().getProtocolVersion(), "Unexpected HTTP version value"); + assertEquals(METHOD, request.getMethod(), "Unexpected method value"); + assertEquals(REQUEST_URI, request.getUri().getPath(), "Unexpected request URI value"); + assertEquals(HttpVersion.HTTP_1_1, request.getVersion(), "Unexpected HTTP version value"); assertEquals(SUBJECT, request.getFirstHeader(AS2Header.SUBJECT).getValue(), "Unexpected subject value"); assertEquals(FROM, request.getFirstHeader(AS2Header.FROM).getValue(), "Unexpected from value"); @@ -361,8 +362,8 @@ public void receiveMultipartSignedXMLMessageTest() throws Exception { assertTrue(request.getFirstHeader(AS2Header.CONTENT_TYPE).getValue().startsWith(AS2MediaType.MULTIPART_SIGNED), "Unexpected content type for message"); - assertTrue(request instanceof BasicHttpEntityEnclosingRequest, "Request does not contain entity"); - HttpEntity entity = ((BasicHttpEntityEnclosingRequest) request).getEntity(); + assertTrue(request instanceof ClassicHttpRequest, "Request does not contain entity"); + HttpEntity entity = ((ClassicHttpRequest) request).getEntity(); assertNotNull(entity, "Request does not contain entity"); assertTrue(entity instanceof MultipartSignedEntity, "Unexpected request entity type"); MultipartSignedEntity signedEntity = (MultipartSignedEntity) entity; @@ -372,14 +373,14 @@ public void receiveMultipartSignedXMLMessageTest() throws Exception { // Validated first mime part. assertTrue(signedEntity.getPart(0) instanceof ApplicationXMLEntity, "First mime part incorrect type "); ApplicationXMLEntity xmlEntity = (ApplicationXMLEntity) signedEntity.getPart(0); - assertTrue(xmlEntity.getContentType().getValue().startsWith(AS2MediaType.APPLICATION_XML), + assertTrue(xmlEntity.getContentType().startsWith(AS2MediaType.APPLICATION_XML), "Unexpected content type for first mime part"); assertFalse(xmlEntity.isMainBody(), "First mime type set as main body of request"); // Validate second mime part. assertTrue(signedEntity.getPart(1) instanceof ApplicationPkcs7SignatureEntity, "Second mime part incorrect type "); ApplicationPkcs7SignatureEntity signatureEntity = (ApplicationPkcs7SignatureEntity) signedEntity.getPart(1); - assertTrue(signatureEntity.getContentType().getValue().startsWith(AS2MediaType.APPLICATION_PKCS7_SIGNATURE), + assertTrue(signatureEntity.getContentType().startsWith(AS2MediaType.APPLICATION_PKCS7_SIGNATURE), "Unexpected content type for second mime part"); assertFalse(signatureEntity.isMainBody(), "First mime type set as main body of request"); @@ -436,9 +437,9 @@ public void receiveMultipartInvalidSignedMessageTest() throws Exception { assertNotNull(coreContext, "context"); HttpRequest request = coreContext.getRequest(); assertNotNull(request, "request"); - assertEquals(METHOD, request.getRequestLine().getMethod(), "Unexpected method value"); - assertEquals(REQUEST_URI, request.getRequestLine().getUri(), "Unexpected request URI value"); - assertEquals(HttpVersion.HTTP_1_1, request.getRequestLine().getProtocolVersion(), "Unexpected HTTP version value"); + assertEquals(METHOD, request.getMethod(), "Unexpected method value"); + assertEquals(REQUEST_URI, request.getUri().getPath(), "Unexpected request URI value"); + assertEquals(HttpVersion.HTTP_1_1, request.getVersion(), "Unexpected HTTP version value"); assertEquals(SUBJECT, request.getFirstHeader(AS2Header.SUBJECT).getValue(), "Unexpected subject value"); assertEquals(FROM, request.getFirstHeader(AS2Header.FROM).getValue(), "Unexpected from value"); @@ -455,8 +456,8 @@ public void receiveMultipartInvalidSignedMessageTest() throws Exception { assertTrue(request.getFirstHeader(AS2Header.CONTENT_TYPE).getValue().startsWith(AS2MediaType.MULTIPART_SIGNED), "Unexpected content type for message"); - assertTrue(request instanceof BasicHttpEntityEnclosingRequest, "Request does not contain entity"); - HttpEntity entity = ((BasicHttpEntityEnclosingRequest) request).getEntity(); + assertTrue(request instanceof ClassicHttpRequest, "Request does not contain entity"); + HttpEntity entity = ((ClassicHttpRequest) request).getEntity(); assertNotNull(entity, "Request does not contain entity"); assertTrue(entity instanceof MultipartSignedEntity, "Unexpected request entity type"); MultipartSignedEntity signedEntity = (MultipartSignedEntity) entity; @@ -466,14 +467,14 @@ public void receiveMultipartInvalidSignedMessageTest() throws Exception { // Validated first mime part. assertTrue(signedEntity.getPart(0) instanceof ApplicationEDIFACTEntity, "First mime part incorrect type "); ApplicationEDIFACTEntity ediEntity = (ApplicationEDIFACTEntity) signedEntity.getPart(0); - assertTrue(ediEntity.getContentType().getValue().startsWith(AS2MediaType.APPLICATION_EDIFACT), + assertTrue(ediEntity.getContentType().startsWith(AS2MediaType.APPLICATION_EDIFACT), "Unexpected content type for first mime part"); assertFalse(ediEntity.isMainBody(), "First mime type set as main body of request"); // Validate second mime part. assertTrue(signedEntity.getPart(1) instanceof ApplicationPkcs7SignatureEntity, "Second mime part incorrect type "); ApplicationPkcs7SignatureEntity signatureEntity = (ApplicationPkcs7SignatureEntity) signedEntity.getPart(1); - assertTrue(signatureEntity.getContentType().getValue().startsWith(AS2MediaType.APPLICATION_PKCS7_SIGNATURE), + assertTrue(signatureEntity.getContentType().startsWith(AS2MediaType.APPLICATION_PKCS7_SIGNATURE), "Unexpected content type for second mime part"); assertFalse(signatureEntity.isMainBody(), "First mime type set as main body of request"); @@ -516,9 +517,9 @@ public void receiveEnvelopedMessageTest() throws Exception { assertNotNull(coreContext, "context"); HttpRequest request = coreContext.getRequest(); assertNotNull(request, "request"); - assertEquals(METHOD, request.getRequestLine().getMethod(), "Unexpected method value"); - assertEquals(REQUEST_URI, request.getRequestLine().getUri(), "Unexpected request URI value"); - assertEquals(HttpVersion.HTTP_1_1, request.getRequestLine().getProtocolVersion(), "Unexpected HTTP version value"); + assertEquals(METHOD, request.getMethod(), "Unexpected method value"); + assertEquals(REQUEST_URI, request.getUri().getPath(), "Unexpected request URI value"); + assertEquals(HttpVersion.HTTP_1_1, request.getVersion(), "Unexpected HTTP version value"); assertEquals(SUBJECT, request.getFirstHeader(AS2Header.SUBJECT).getValue(), "Unexpected subject value"); assertEquals(FROM, request.getFirstHeader(AS2Header.FROM).getValue(), "Unexpected from value"); assertEquals(AS2_VERSION, request.getFirstHeader(AS2Header.AS2_VERSION).getValue(), "Unexpected AS2 version value"); @@ -534,8 +535,8 @@ public void receiveEnvelopedMessageTest() throws Exception { assertTrue(request.getFirstHeader(AS2Header.CONTENT_TYPE).getValue().startsWith(AS2MimeType.APPLICATION_PKCS7_MIME), "Unexpected content type for message"); - assertTrue(request instanceof BasicHttpEntityEnclosingRequest, "Request does not contain entity"); - HttpEntity entity = ((BasicHttpEntityEnclosingRequest) request).getEntity(); + assertTrue(request instanceof ClassicHttpRequest, "Request does not contain entity"); + HttpEntity entity = ((ClassicHttpRequest) request).getEntity(); assertNotNull(entity, "Request does not contain entity"); assertTrue(entity instanceof ApplicationPkcs7MimeEnvelopedDataEntity, "Unexpected request entity type"); ApplicationPkcs7MimeEnvelopedDataEntity envelopedEntity = (ApplicationPkcs7MimeEnvelopedDataEntity) entity; @@ -545,7 +546,7 @@ public void receiveEnvelopedMessageTest() throws Exception { MimeEntity encryptedEntity = envelopedEntity.getEncryptedEntity(signingKP.getPrivate()); assertTrue(encryptedEntity instanceof ApplicationEDIFACTEntity, "Enveloped mime part incorrect type "); ApplicationEDIFACTEntity ediEntity = (ApplicationEDIFACTEntity) encryptedEntity; - assertTrue(ediEntity.getContentType().getValue().startsWith(AS2MediaType.APPLICATION_EDIFACT), + assertTrue(ediEntity.getContentType().startsWith(AS2MediaType.APPLICATION_EDIFACT), "Unexpected content type for enveloped mime part"); assertFalse(ediEntity.isMainBody(), "Enveloped mime type set as main body of request"); assertEquals(EDI_MESSAGE.replaceAll("[\n\r]", ""), ediEntity.getEdiMessage().replaceAll("[\n\r]", ""), @@ -576,9 +577,10 @@ public void sendEditMessageToFailingProcessorTest() throws Exception { mockEndpoint.assertIsSatisfied(); HttpResponse response = context.getResponse(); - assertEquals(HttpStatus.SC_INTERNAL_SERVER_ERROR, response.getStatusLine().getStatusCode(), + assertTrue(response instanceof ClassicHttpResponse, "Request does not contain entity"); + HttpEntity responseEntity = ((ClassicHttpResponse) response).getEntity(); + assertEquals(HttpStatus.SC_INTERNAL_SERVER_ERROR, response.getCode(), "Unexpected status code for response"); - HttpEntity responseEntity = response.getEntity(); String errorMessage = new String(Streams.readAll(responseEntity.getContent())); assertEquals(EXPECTED_EXCEPTION_MSG, errorMessage, ""); } diff --git a/components/camel-as2/camel-as2-component/src/test/java/org/apache/camel/component/as2/CreateEndpointManualIssueTest.java b/components/camel-as2/camel-as2-component/src/test/java/org/apache/camel/component/as2/CreateEndpointManualIssueTest.java index 86c0dc13f0356..731ea1b2bf985 100644 --- a/components/camel-as2/camel-as2-component/src/test/java/org/apache/camel/component/as2/CreateEndpointManualIssueTest.java +++ b/components/camel-as2/camel-as2-component/src/test/java/org/apache/camel/component/as2/CreateEndpointManualIssueTest.java @@ -37,8 +37,8 @@ public void testCreateEndpoint() throws Exception { CamelContext camelContext = new DefaultCamelContext(); camelContext.start(); - org.apache.http.entity.ContentType contentTypeEdifact - = org.apache.http.entity.ContentType.create("application/edifact", (Charset) null); + org.apache.hc.core5.http.ContentType contentTypeEdifact + = org.apache.hc.core5.http.ContentType.create("application/edifact", (Charset) null); String methodName = "send"; AS2ApiName as2ApiNameClient = AS2ApiName.CLIENT; diff --git a/components/camel-as2/camel-as2-component/src/test/java/org/apache/camel/component/as2/MendelsonCertLoader.java b/components/camel-as2/camel-as2-component/src/test/java/org/apache/camel/component/as2/MendelsonCertLoader.java index 37216f01eca29..dfa4629bedf3b 100644 --- a/components/camel-as2/camel-as2-component/src/test/java/org/apache/camel/component/as2/MendelsonCertLoader.java +++ b/components/camel-as2/camel-as2-component/src/test/java/org/apache/camel/component/as2/MendelsonCertLoader.java @@ -36,8 +36,8 @@ import javax.net.ssl.SSLContext; import org.apache.commons.io.IOUtils; -import org.apache.http.conn.ssl.TrustAllStrategy; -import org.apache.http.ssl.SSLContexts; +import org.apache.hc.client5.http.ssl.TrustAllStrategy; +import org.apache.hc.core5.ssl.SSLContexts; import org.slf4j.Logger; import org.slf4j.LoggerFactory; diff --git a/components/camel-as2/camel-as2-component/src/test/java/org/apache/camel/component/as2/MendelsonSslEndpointManualTest.java b/components/camel-as2/camel-as2-component/src/test/java/org/apache/camel/component/as2/MendelsonSslEndpointManualTest.java index 5382b74c9cb54..6a9e17cf86e83 100644 --- a/components/camel-as2/camel-as2-component/src/test/java/org/apache/camel/component/as2/MendelsonSslEndpointManualTest.java +++ b/components/camel-as2/camel-as2-component/src/test/java/org/apache/camel/component/as2/MendelsonSslEndpointManualTest.java @@ -29,7 +29,7 @@ import org.apache.camel.component.as2.api.AS2SignatureAlgorithm; import org.apache.camel.component.as2.internal.AS2ApiName; import org.apache.camel.impl.DefaultCamelContext; -import org.apache.http.conn.ssl.NoopHostnameVerifier; +import org.apache.hc.client5.http.ssl.NoopHostnameVerifier; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.BeforeAll; import org.junit.jupiter.api.Disabled; diff --git a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/AS2EndpointBuilderFactory.java b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/AS2EndpointBuilderFactory.java index 6fb7fc37cf741..889023fec0f4d 100644 --- a/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/AS2EndpointBuilderFactory.java +++ b/dsl/camel-endpointdsl/src/generated/java/org/apache/camel/builder/endpoint/dsl/AS2EndpointBuilderFactory.java @@ -222,7 +222,7 @@ default AS2EndpointConsumerBuilder ediMessageTransferEncoding( * application/edi-x12, application/edi-consent, application/xml. * * The option is a: - * <code>org.apache.http.entity.ContentType</code> type. + * <code>org.apache.hc.core5.http.ContentType</code> type. * * Group: common * @@ -230,7 +230,7 @@ default AS2EndpointConsumerBuilder ediMessageTransferEncoding( * @return the dsl builder */ default AS2EndpointConsumerBuilder ediMessageType( - org.apache.http.entity.ContentType ediMessageType) { + org.apache.hc.core5.http.ContentType ediMessageType) { doSetProperty("ediMessageType", ediMessageType); return this; } @@ -239,7 +239,7 @@ default AS2EndpointConsumerBuilder ediMessageType( * application/edi-x12, application/edi-consent, application/xml. * * The option will be converted to a - * <code>org.apache.http.entity.ContentType</code> type. + * <code>org.apache.hc.core5.http.ContentType</code> type. * * Group: common * @@ -1183,7 +1183,7 @@ default AS2EndpointProducerBuilder ediMessageTransferEncoding( * application/edi-x12, application/edi-consent, application/xml. * * The option is a: - * <code>org.apache.http.entity.ContentType</code> type. + * <code>org.apache.hc.core5.http.ContentType</code> type. * * Group: common * @@ -1191,7 +1191,7 @@ default AS2EndpointProducerBuilder ediMessageTransferEncoding( * @return the dsl builder */ default AS2EndpointProducerBuilder ediMessageType( - org.apache.http.entity.ContentType ediMessageType) { + org.apache.hc.core5.http.ContentType ediMessageType) { doSetProperty("ediMessageType", ediMessageType); return this; } @@ -1200,7 +1200,7 @@ default AS2EndpointProducerBuilder ediMessageType( * application/edi-x12, application/edi-consent, application/xml. * * The option will be converted to a - * <code>org.apache.http.entity.ContentType</code> type. + * <code>org.apache.hc.core5.http.ContentType</code> type. * * Group: common * @@ -2123,7 +2123,7 @@ default AS2EndpointBuilder ediMessageTransferEncoding( * application/edi-x12, application/edi-consent, application/xml. * * The option is a: - * <code>org.apache.http.entity.ContentType</code> type. + * <code>org.apache.hc.core5.http.ContentType</code> type. * * Group: common * @@ -2131,7 +2131,7 @@ default AS2EndpointBuilder ediMessageTransferEncoding( * @return the dsl builder */ default AS2EndpointBuilder ediMessageType( - org.apache.http.entity.ContentType ediMessageType) { + org.apache.hc.core5.http.ContentType ediMessageType) { doSetProperty("ediMessageType", ediMessageType); return this; } @@ -2140,7 +2140,7 @@ default AS2EndpointBuilder ediMessageType( * application/edi-x12, application/edi-consent, application/xml. * * The option will be converted to a - * <code>org.apache.http.entity.ContentType</code> type. + * <code>org.apache.hc.core5.http.ContentType</code> type. * * Group: common *