Blog

Michael Born

June 14, 2022

Spread the word


Share your thoughts

CFML makes it simple to instantiate and use native Java classes without leaving CFML-land. For example, we can use Java's SimpleDateFormat library to format a date object:


var dateFormatter = createObject( "java", "java.text.SimpleDateFormat" );
var formattedDate = dateFormatter.init( "yyyy-MM-dd'T'HH:mm: ssXXX" ).format( now() );

In order to use a third-party java library, however, such as the Jsoup HTML parser, you will need to load the jar into the CFML engine first.

There are two main ways to load a Java jar into CFML app:

  1. Using native CFML
  2. Using Javaloader

Loading Jars with native CFML

Add this to your web root's Application.cfc:


// Java Integration
this.javaSettings = {
   loadPaths               : [ expandPath( "./lib" ) ],
   loadColdFusionClassPath : true,
   reloadOnChange          : false
};

Then add the .jar file to the lib/ directory.

Once this is done, you can use the jar like this:


function getWikipediaPage(){
   var Jsoup = createObject( "java", "org.jsoup.Jsoup" );
   return Jsoup
      .connect( "https://en.wikipedia.org/wiki/The_Lord_of_the_Rings_(film_series)" )
      .get()
      .body()
      .text();
}

Loading Jars with JavaLoader

Javaloader is a CFML tool for loading java .jar files into your CFML application. Javaloader offers an improved developer experience, as there is no need to adjust application settings or restart the server after installation. With Javaloader, you can ship your dependencies with a module or library, and it "just works" without requiring further configuration.

box install cbjavaloader

Once javaloader installs, you can inject the Jsoup library into your components using the custom Javaloader syntax for Wirebox:


component{
    property name="Jsoup" inject="javaloader:org.jsoup.Jsoup";
    // ...
}

Once we’ve injected Jsoup, we can use Jsoup to fetch and parse the Wikipedia page for the LOTR film series:


function getWikipediaPage(){
   return Jsoup
      .connect( "https://en.wikipedia.org/wiki/The_Lord_of_the_Rings_(film_series)" )
      .get()
      .body()
      .text();
}

And that's how you use the Java "Jsoup" library in CFML!

Add Your Comment

(5)

Jun 15, 2022 00:42:47 UTC

by Charlie Arehart

Thanks, Michael. Always helpful for folks to be reminded of such things. That said, you could/should mention how lucee offers yet another option, in that you can name the library/jar as an arg to the createobject/cfobject. I do hope that someday Adobe will adopt that.

Finally, somehow in the formatting of the code examples, the first one for application.cfc has the this.javasetting mashed into the opening comment:

// Java Integrationthis.javaSettings

(If anyone corrects that, feel free to delete this part of my comment, starting with finally.)

Jun 15, 2022 00:49:45 UTC

by Anthony Ehrhardt

Which is better? And why would one use javaLoader over native CFML?

Jun 15, 2022 01:44:09 UTC

by Anthony Ehrhardt

Which is better? And why would one use javaLoader over native CFML?

Jun 16, 2022 14:21:33 UTC

by Michael Born

@anthony > Which is better? And why would one use javaLoader over native CFML?

Read the paragraph under Loading Jars with JavaLoader:

> ...Javaloader offers an improved developer experience, as there is no need to adjust application settings or restart the server after installation. With Javaloader, you can ship your dependencies with a module or library, and it just works without requiring further configuration.

Jun 16, 2022 14:29:44 UTC

by Michael Born

@charlie - Good catch, thank you! I fixed the formatting on that code snippet.

Yes, the post should probably mention Lucee's createObject() jar parameter. I avoided that to keep it simple, and because Ortus tends to focus on writing cross-engine compatible code. But agencies and companies building on Lucee only would certainly benefit from such a feature.

Recent Entries

Introducing the BoxLang Spring Boot Starter: Dynamic JVM Templating for Spring

Introducing the BoxLang Spring Boot Starter: Dynamic JVM Templating for Spring

Spring Boot developers know the pain of evaluating view technologies. Thymeleaf is great — until you need more expressiveness. FreeMarker is powerful — until the syntax fights you. What if you could write templates in a dynamic JVM language that gives you the full power of the platform, feels natural, and requires zero setup to integrate?

Meet the BoxLang Spring Boot Starter.

Luis Majano
Luis Majano
March 13, 2026
Why Swiss Banks Are Modernizing CFML Platforms Without Rewrites

Why Swiss Banks Are Modernizing CFML Platforms Without Rewrites

The growing need to evolve legacy financial platforms safely

Many Swiss banks and financial institutions still operate important systems built on ColdFusion and CFML platforms.

These systems manage a wide range of functions, including:

  • internal banking workflows
  • reporting systems
  • client portals
  • data integration platforms
  • compliance and risk management tools

In many cases, thes...

Cristobal Escobar
Cristobal Escobar
March 13, 2026
Reactive vs Proactive ColdFusion Support: Why Waiting for an Outage Is the Most Expensive Strategy

Reactive vs Proactive ColdFusion Support: Why Waiting for an Outage Is the Most Expensive Strategy

Many ColdFusion environments operate in a reactive mode without realizing it.

Everything seems fine… until something breaks.

A server crashes.

Performance drops suddenly.

An integration stops working.

A security audit reveals missing patches.

At that point the response is urgent:

“Can someone help us fix this now?”

Emergency support is sometimes unavoidable. But when reactive intervention becomes the norm, it usually means something deep...

Cristobal Escobar
Cristobal Escobar
March 12, 2026