This is an automated email from the ASF dual-hosted git repository. jiriondrusek pushed a commit to branch camel-main in repository https://gitbox.apache.org/repos/asf/camel-quarkus.git
commit f0c8b9df1d08c46d9a89d88f9c032e145b781786 Author: James Netherton <[email protected]> AuthorDate: Mon Jan 5 09:13:44 2026 +0000 Fix docling native support --- extensions/docling/deployment/pom.xml | 4 ++ .../docling/deployment/DoclingProcessor.java | 47 ++++++++++++++++++++++ extensions/docling/runtime/pom.xml | 9 +++++ ...ingServeClientBuilderFactorySubstitutions.java} | 20 ++++----- integration-tests/docling/pom.xml | 2 - .../quarkus/component/docling/it/DoclingTest.java | 2 - 6 files changed, 70 insertions(+), 14 deletions(-) diff --git a/extensions/docling/deployment/pom.xml b/extensions/docling/deployment/pom.xml index 6b5f6e3cd7..fc42431455 100644 --- a/extensions/docling/deployment/pom.xml +++ b/extensions/docling/deployment/pom.xml @@ -42,6 +42,10 @@ <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-support-httpclient5-deployment</artifactId> </dependency> + <dependency> + <groupId>io.quarkus</groupId> + <artifactId>quarkus-jackson-deployment</artifactId> + </dependency> </dependencies> <build> diff --git a/extensions/docling/deployment/src/main/java/org/apache/camel/quarkus/component/docling/deployment/DoclingProcessor.java b/extensions/docling/deployment/src/main/java/org/apache/camel/quarkus/component/docling/deployment/DoclingProcessor.java index 4db0474a6b..6463941454 100644 --- a/extensions/docling/deployment/src/main/java/org/apache/camel/quarkus/component/docling/deployment/DoclingProcessor.java +++ b/extensions/docling/deployment/src/main/java/org/apache/camel/quarkus/component/docling/deployment/DoclingProcessor.java @@ -16,8 +16,18 @@ */ package org.apache.camel.quarkus.component.docling.deployment; +import java.util.Set; +import java.util.stream.Collectors; + +import io.quarkus.deployment.annotations.BuildProducer; import io.quarkus.deployment.annotations.BuildStep; +import io.quarkus.deployment.builditem.CombinedIndexBuildItem; import io.quarkus.deployment.builditem.FeatureBuildItem; +import io.quarkus.deployment.builditem.IndexDependencyBuildItem; +import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem; +import io.quarkus.deployment.pkg.steps.NativeOrNativeSourcesBuild; +import org.jboss.jandex.ClassInfo; +import org.jboss.jandex.DotName; class DoclingProcessor { @@ -27,4 +37,41 @@ class DoclingProcessor { FeatureBuildItem feature() { return new FeatureBuildItem(FEATURE); } + + @BuildStep(onlyIf = NativeOrNativeSourcesBuild.class) + void indexDependencies(BuildProducer<IndexDependencyBuildItem> indexedDependency) { + indexedDependency.produce(new IndexDependencyBuildItem("ai.docling", "docling-core")); + indexedDependency.produce(new IndexDependencyBuildItem("ai.docling", "docling-serve-api")); + } + + @BuildStep(onlyIf = NativeOrNativeSourcesBuild.class) + void registerForReflection( + CombinedIndexBuildItem combinedIndex, + BuildProducer<ReflectiveClassBuildItem> reflectiveClass) { + + // Register Docling model and associated builder classes for reflection for Jackson serialization / deserialization + Set<String> doclingValidationBuilderClasses = combinedIndex.getIndex() + .getClassesInPackage("ai.docling.serve.api.validation") + .stream() + .map(ClassInfo::name) + .map(DotName::toString) + .filter(className -> className.endsWith("$Builder")) + .collect(Collectors.toUnmodifiableSet()); + + reflectiveClass.produce(ReflectiveClassBuildItem.builder(doclingValidationBuilderClasses.toArray(new String[0])) + .methods(true) + .build()); + + Set<String> doclingCoreBuilderClasses = combinedIndex.getIndex() + .getClassesInPackage("ai.docling.core") + .stream() + .map(ClassInfo::name) + .map(DotName::toString) + .filter(className -> className.endsWith("$Builder")) + .collect(Collectors.toUnmodifiableSet()); + + reflectiveClass.produce(ReflectiveClassBuildItem.builder(doclingCoreBuilderClasses.toArray(new String[0])) + .methods(true) + .build()); + } } diff --git a/extensions/docling/runtime/pom.xml b/extensions/docling/runtime/pom.xml index 55d77d6511..7c6f91afa4 100644 --- a/extensions/docling/runtime/pom.xml +++ b/extensions/docling/runtime/pom.xml @@ -48,6 +48,15 @@ <groupId>org.apache.camel.quarkus</groupId> <artifactId>camel-quarkus-support-httpclient5</artifactId> </dependency> + <dependency> + <groupId>io.quarkus</groupId> + <artifactId>quarkus-jackson</artifactId> + </dependency> + <dependency> + <groupId>org.graalvm.sdk</groupId> + <artifactId>graal-sdk</artifactId> + <scope>provided</scope> + </dependency> </dependencies> <build> diff --git a/extensions/docling/deployment/src/main/java/org/apache/camel/quarkus/component/docling/deployment/DoclingProcessor.java b/extensions/docling/runtime/src/main/java/ai/docling/serve/client/DoclingServeClientBuilderFactorySubstitutions.java similarity index 61% copy from extensions/docling/deployment/src/main/java/org/apache/camel/quarkus/component/docling/deployment/DoclingProcessor.java copy to extensions/docling/runtime/src/main/java/ai/docling/serve/client/DoclingServeClientBuilderFactorySubstitutions.java index 4db0474a6b..c3d29bafa7 100644 --- a/extensions/docling/deployment/src/main/java/org/apache/camel/quarkus/component/docling/deployment/DoclingProcessor.java +++ b/extensions/docling/runtime/src/main/java/ai/docling/serve/client/DoclingServeClientBuilderFactorySubstitutions.java @@ -14,17 +14,17 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package org.apache.camel.quarkus.component.docling.deployment; +package ai.docling.serve.client; -import io.quarkus.deployment.annotations.BuildStep; -import io.quarkus.deployment.builditem.FeatureBuildItem; +import com.oracle.svm.core.annotate.Substitute; +import com.oracle.svm.core.annotate.TargetClass; -class DoclingProcessor { - - private static final String FEATURE = "camel-docling"; - - @BuildStep - FeatureBuildItem feature() { - return new FeatureBuildItem(FEATURE); +// Remove references to Jackson 3.x +@TargetClass(DoclingServeClientBuilderFactory.class) +final class DoclingServeClientBuilderFactorySubstitutions { + @Substitute + public static <C extends DoclingServeClient, B extends DoclingServeClient.DoclingServeClientBuilder<C, B>> B newBuilder( + ClassLoader classLoader) { + return (B) DoclingServeJackson2Client.builder(); } } diff --git a/integration-tests/docling/pom.xml b/integration-tests/docling/pom.xml index dc98de1ca1..856c280af5 100644 --- a/integration-tests/docling/pom.xml +++ b/integration-tests/docling/pom.xml @@ -74,7 +74,6 @@ </dependencies> <profiles> - <!-- https://github.com/apache/camel-quarkus/issues/8085 <profile> <id>native</id> <activation> @@ -102,7 +101,6 @@ </plugins> </build> </profile> - --> <profile> <id>virtualDependencies</id> <activation> diff --git a/integration-tests/docling/src/test/java/org/apache/camel/quarkus/component/docling/it/DoclingTest.java b/integration-tests/docling/src/test/java/org/apache/camel/quarkus/component/docling/it/DoclingTest.java index bd719b6ce6..f010494a09 100644 --- a/integration-tests/docling/src/test/java/org/apache/camel/quarkus/component/docling/it/DoclingTest.java +++ b/integration-tests/docling/src/test/java/org/apache/camel/quarkus/component/docling/it/DoclingTest.java @@ -17,7 +17,6 @@ package org.apache.camel.quarkus.component.docling.it; import io.quarkus.test.common.QuarkusTestResource; -import io.quarkus.test.junit.DisabledOnIntegrationTest; import io.quarkus.test.junit.QuarkusTest; import io.restassured.RestAssured; import io.restassured.http.ContentType; @@ -28,7 +27,6 @@ import static org.hamcrest.Matchers.emptyString; import static org.hamcrest.Matchers.is; import static org.hamcrest.Matchers.not; -@DisabledOnIntegrationTest // https://github.com/apache/camel-quarkus/issues/8085 @QuarkusTest @QuarkusTestResource(DoclingTestResource.class) class DoclingTest {
