[ 
https://issues.apache.org/jira/browse/CAMEL-19843?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17762478#comment-17762478
 ] 

Peter Palaga commented on CAMEL-19843:
--------------------------------------

PR sent: https://github.com/apache/camel/pull/11327

> HTTP/2 pseudo-headers such as :status should not be propagated from CXF 
> message to Camel message
> ------------------------------------------------------------------------------------------------
>
>                 Key: CAMEL-19843
>                 URL: https://issues.apache.org/jira/browse/CAMEL-19843
>             Project: Camel
>          Issue Type: Bug
>            Reporter: Peter Palaga
>            Assignee: Peter Palaga
>            Priority: Major
>
> When implementing a [REST to SOAP 
> bridge|https://github.com/apache/camel-quarkus/pull/5271] on Camel Quarkus, 
> it turns out that Vert.x (the HTTP server of Quarkus) does not accept the 
> {{:status}} header propagated from CXF message:
> {code}
> 10:27:39,596 INFO  [app] 10:27:38,426 HTTP Request to /jaxrs/request failed, 
> error id: 9ce52cd2-3b97-4bbb-9971-1cbbfa20844b-1: 
> java.lang.IllegalArgumentException: a header name cannot contain some 
> prohibited characters, such as : :status
> 10:27:39,596 INFO  [app]        at 
> io.vertx.core.http.impl.HttpUtils.validateHeaderName0(HttpUtils.java:913)
> 10:27:39,596 INFO  [app]        at 
> io.vertx.core.http.impl.HttpUtils.validateHeaderName(HttpUtils.java:885)
> 10:27:39,597 INFO  [app]        at 
> io.vertx.core.http.impl.HttpUtils.validateHeader(HttpUtils.java:772)
> 10:27:39,597 INFO  [app]        at 
> io.vertx.core.http.impl.headers.HeadersMultiMap.add0(HeadersMultiMap.java:616)
> 10:27:39,597 INFO  [app]        at 
> io.vertx.core.http.impl.headers.HeadersMultiMap.set0(HeadersMultiMap.java:633)
> 10:27:39,597 INFO  [app]        at 
> io.vertx.core.http.impl.headers.HeadersMultiMap.set(HeadersMultiMap.java:184)
> 10:27:39,597 INFO  [app]        at 
> io.vertx.core.http.impl.headers.HeadersMultiMap.set(HeadersMultiMap.java:189)
> 10:27:39,597 INFO  [app]        at 
> io.vertx.core.http.impl.Http1xServerResponse.putHeader(Http1xServerResponse.java:193)
> 10:27:39,597 INFO  [app]        at 
> io.vertx.core.http.impl.Http1xServerResponse.putHeader(Http1xServerResponse.java:67)
> 10:27:39,598 INFO  [app]        at 
> org.apache.camel.component.platform.http.vertx.VertxPlatformHttpSupport.toHttpResponse(VertxPlatformHttpSupport.java:89)
> {code}
> This happens with {{HttpClientHTTPConduit}} using HTTP/2 capable 
> {{java.net.http.HttpClient}} as the underlying HTTP client. That's the 
> default in CXF 4.x. Another condition is that the service must also run on a 
> HTTP/2 enabled HTTP server. Jetty 11 used in Camel tests does not seem to 
> have HTTP/2 enabled.
> {{:status}} is a standard pseudo-header of HTTP/2 and HTTP/3 specified by
> [RFC-7540|https://datatracker.ietf.org/doc/html/rfc7540#section-8.1.2.4].
> If CXF is configured to use the older {{URLConnectionHTTPConduitFactory}} 
> using the HTTP/1.1 only {{java.net.HttpURLConnection}} then the issue does 
> not occur. Note that {{URLConnectionHTTPConduitFactory}} is set by default by 
> Quarkus CXF 2.3.1 and 2.2.3 because of 
> https://github.com/quarkiverse/quarkus-cxf/issues/992 (thus overriding the 
> CXF 4.x default). It was also the default in CXF 3.x used by Camel 3.x.
> I think the solution should be to filter out all HTTP pseudo-headers when 
> propagating the headers from the CXF message to the Camel message. The reason 
> is, that the info present in pseudo-headers is also available through 
> programmatic API and for HTTP status, it is indeed there as 
> {{CamelHttpResponseCode}} header. Any comments about that?



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to