You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@camel.apache.org by "Torsten Mielke (Jira)" <ji...@apache.org> on 2026/09/10 09:14:00 UTC

[jira] [Created] (CAMEL-24667) camel-http: UnsatisfiedLinkError for Brotli4j when using Quarkus runtime

Torsten Mielke created CAMEL-24667:
--------------------------------------

             Summary: 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


*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[])'{code}
{{}}
The same route works fine with Camel Main and Spring Boot runtimes.

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)