News and updates on Docling Java!
Introduction
It’s been over a year since I last dove into the Docling Java implementation — and since I’m not a native Java developer, it’s admittedly slipped under my radar more than it should. That’s a blind spot I’m ready to fix (or not 🤓).
For anyone following the project, we’ve seen Docling’s meteoric rise since the begining and now being donated to the Linux Foundation by IBM Research. The pace is relentless; it feels like we’re seeing major enhancements or fresh features almost every other day.
The Java side of the house is no exception. With a fresh update landing just last week, it’s the perfect time to give it a second look. If you’re building in Java, here’s why this deserves a spot in your stack.
Docling-Java (direct from GitHub Excerpt)
Docling simplifies document processing, parsing diverse formats, including advanced PDF understanding, and providing seamless integrations with the Generative AI ecosystem.
Features
- 🗂️ Parsing of multiple document formats incl. PDF, DOCX, PPTX, XLSX, HTML, WAV, MP3, VTT, images (PNG, TIFF, JPEG, …), and more
- 📑 Advanced PDF understanding incl. page layout, reading order, table structure, code, formulas, image classification, and more
- 🧬 Unified, expressive DoclingDocument representation format
- ↪️ Various export formats and options, including Markdown, HTML, DocTags and lossless JSON
- 🔒 Local execution capabilities for sensitive data and air-gapped environments
- 🤖 Plug-and-play integrations including LangChain4j
- 🔍 Extensive OCR support for scanned PDFs and images
- 👓 Support of several Visual Language Models (GraniteDocling)
- 🎙️ Audio support with Automatic Speech Recognition (ASR) models
Hands-on Docling Java
If you’ve been hesitant to dive into the Python ecosystem, now is the perfect time to get your hands dirty. The latest Java implementation makes entry incredibly smooth: the samples are well-documented, the artifact guides are thorough, and the actual integration is surprisingly straightforward. No more excuses — it’s time to build.
Artifacts (Excerpt of GitHub)
This project provides the following artifacts:
- docling-core: Java API for working with the data types used by Docling for document representation (see Docling Core).
- docling-serve-api: Java API for interacting with a Docling Serve backend. It's framework‑agnostic.
- docling-serve-client: A reference implementation of the docling-serve-api using Java's HttpClient and Jackson to connect to a Docling Serve endpoint.
- docling-testing: Utilities for testing Docling integration.
- docling-testcontainers: A Testcontainers module for running Docling in a Docker container.
Getting started
Use DoclingServeApi.convertSource() to convert individual documents (make sure both docling-serve-api and docling-serve-clientare on your classpath).
import ai.docling.serve.api.DoclingServeApi;
import ai.docling.serve.api.convert.request.ConvertDocumentRequest;
import ai.docling.serve.api.convert.request.source.HttpSource;
import ai.docling.serve.api.convert.response.InBodyConvertDocumentResponse;
DoclingServeApi doclingServeApi = DoclingServeApi.builder()
.baseUrl("<location of docling serve instance>")
.build();
ConvertDocumentRequest request = ConvertDocumentRequest.builder()
.source(
HttpSource.builder()
.url(URI.create("https://arxiv.org/pdf/2408.09869"))
.build()
)
.build();
InBodyConvertDocumentResponse response = (InBodyConvertDocumentResponse) doclingServeApi.convertSource(request);
System.out.println(response.getDocument().getMarkdownContent());
If you’re unsure of the concrete type returned by the convert API, you can handle it dynamically using the getResponseType() method:
import ai.docling.serve.api.convert.response.ResponseType;
// ... your code to create and configure the request ...
var result = doclingServeApi.convertSource(request);
switch(result.getResponseType()) {
case ResponseType.IN_BODY -> // Response is InBodyConvertDocumentResponse
case ResponseType.ZIP_ARCHIVE -> // Response is ZipArchiveConvertDocumentResponse
case ResponseType.PRE_SIGNED_URL -> // Response is PreSignedUrlConvertDocumentResponse
}
Integration with SDLC / ADLC
If you’re a fan of using Claude for coding, there’s a specific Markdown format available that provides clear implementation guidelines. It’s a perfect fit for an assistant like IBM Bob to ingest also — in fact, putting that to the test is at the top of my “next steps” list.
Conclusion
Ultimately, whether you’re a Java purist or looking to expand your AI toolkit beyond Python, the momentum behind Docling is impossible to ignore. Between the refreshed Java implementation and the specialized tooling for Claude and Bob, the barriers to entry have never been lower. It’s a fast-moving ecosystem, and with the latest updates making high-performance document parsing more accessible than ever, there’s no better time to jump in and start building.
And last but not least… a great thank to the Docling-Java project contributors 👏
>>> Thanks for reading <<<
Links
- Docling-Java repo: https://github.com/docling-project/docling-java
- Docling Project: https://github.com/docling-project



Top comments (0)