[ 
https://issues.apache.org/jira/browse/CAMEL-24667?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Work on CAMEL-24667 started by Torsten Mielke.
----------------------------------------------
> camel-http: UnsatisfiedLinkError for Brotli4j when using Quarkus runtime
> ------------------------------------------------------------------------
>
>                 Key: CAMEL-24667
>                 URL: https://issues.apache.org/jira/browse/CAMEL-24667
>             Project: Camel
>          Issue Type: Bug
>          Components: camel-http
>    Affects Versions: 4.22.0
>            Reporter: Torsten Mielke
>            Assignee: Torsten Mielke
>            Priority: Minor
>
> *Description*
> When running a Camel route that uses the HTTP component (`toD` with 
> `https://` URI) with the Quarkus runtime (e.g. via {{{}camel run 
> --runtime=quarkus{}}}), the route fails with:{{{{}}{}}}
> {code:java}
> java.lang.UnsatisfiedLinkError: 'java.nio.ByteBuffer 
> com.aayushatharva.brotli4j.decoder.DecoderJNI.nativeCreate(long[])'The same 
> route works fine with Camel Main and Spring Boot runtimes.{code}
> A sample route in YAML DSL would be
> {code:java}
> - route:
>     from:
>       uri: timer:test
>       parameters:
>         period: "2000"
>         repeatCount: 1
>       steps:
>         - toD:
>             uri: "https://jsonplaceholder.typicode.com/posts/1";
>             parameters:
>                 throwExceptionOnFailure: true
>         - log: ${body}{code}
>  
> *Root Cause*
> The {{quarkus-vertx-http}} dependency transitively pulls in the {{brotli4j}} 
> API jar. However, brotli4j uses Maven profile activation to include 
> platform-specific native JNI artifacts (e.g. {{{}native-osx-aarch64{}}}), and 
> Maven does not activate profiles in transitive dependency POMs. This means:
> 1. The {{brotli4j}} Java API classes are on the classpath
> 2. The platform-native JNI library (`.dylib`/`.so`) is *not* on the classpath
> 3. Apache HttpClient 5's {{Brotli4jRuntime.available()}} check passes (it 
> only checks class presence via {{Class.forName}} with 
> {{{}initialize=false{}}}, not JNI loadability)
> 4. HttpClient registers a Brotli content decoder and adds {{br}} to the 
> {{Accept-Encoding}} request header
> 5. The server responds with Brotli-compressed content
> 6. Decompression fails with {{UnsatisfiedLinkError}} because the native 
> library was never loaded
> With Camel Main and Spring Boot, brotli4j is declared optional in httpclient5 
> and nothing else pulls it in, so the Brotli decoder is never registered and 
> the issue does not occur.
> *Workaround*
> Disable compression in `application.properties`:
> {{camel.component.http.contentCompressionDisabled=true}}
> {{camel.component.https.contentCompressionDisabled=true}}



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

Reply via email to