Skip to content

Migration Guide 4.1.0

Simon Braconnier edited this page Oct 24, 2017 · 3 revisions

This guide discusses migration from JODConverter version 4.0.0-RELEASE to version 4.1.0.

Background

Lots of work has been done for 4.1.0. The two major changes have been to create a new fluent API for performing document conversions, and to introduce a new module for LibreOffice Online support. The addition of this new module has had an impact on the project structure and thus, JODConverter users will have to update their dependency in order to reflect this change.

Move to Java 7 for baseline

JODConverter 4.1.0 is built using Java 7 JDK and will require Java 7 JRE at runtime (Java 8 also works).

All local stuff moved from jodconverter-core to jodconverter-local

At first, the support for LibreOffice Online was all develop in the main jodconverter-core project. But I didn't like the fact that it added more (HTTP) dependencies to the project. Even worse, the 4.0.0-RELEASE version of jodconverter-core requires an office installation (LibreOffice/Apache OpenOffice), and LibreOffice Online does not. It would have been pointless to offer an online converter that requires a local OOo installation.

So I decided to create 2 new modules that depend on the core module; jodconverter-local and jodconverter-online. All the classes required for local conversions was moved into the local module and all the new classes required for online conversions was moved into the online module. This way, the online module doesn't have all the OOo libraries as dependencies, nor the local module has the http-components libraries as dependencies.

Since the jodconverter-core project is now just a dependency of both the new modules, former JODConverter users must now use the jodconverter-local in their project, instead of jodconverter-core:

Old Maven Setup 4.0.0-RELEASE

<dependencies>
   <dependency>
      <groupId>org.jodconverter</groupId>
      <artifactId>jodconverter-core</artifactId>
      <version>4.0.0-RELEASE</version>
   </dependency>
</dependencies>

New Maven Setup 4.1.0

<dependencies>
   <dependency>
      <groupId>org.jodconverter</groupId>
      <artifactId>jodconverter-local</artifactId>
      <version>4.1.0</version>
   </dependency>
</dependencies>

Old Gradle Setup 4.0.0-RELEASE

compile 'org.jodconverter:jodconverter-core:4.0.0-RELEASE'

New Gradle Setup 4.1.0

compile 'org.jodconverter:jodconverter-local:4.1.0'

Using the new API

Even if the 4.1.0 version is backward compatible (just changing maven dependency from jodconverter-core to jodconverter-local is enough), JODConverter users are encouraged to use the new API since the classes DefaultOfficeManagerBuilder and OfficeDocumentConverter are now deprecated.

Please read the Usage as a Java Library wiki page to fully understand the new API.

Here is a conversion example using the 4.0.0-RELEASE version:

File source = new File(...);
File dest = new File(...);

OfficeManager officeManager = null;
try {
  officeManager = new DefaultOfficeManagerBuilder()
    .setPortNumbers(2002, 2003)
    .setTaskExecutionTimeout(60000)
    .setOfficeHome(new File("office path"))
    .build();
  officeManager.start();

  OfficeDocumentConverter converter
    = new OfficeDocumentConverter(officeManager);
  converter.convert(source, dest);

} finally  {
  if (officeManager != null) {
    try {
      officeManager.stop();
    } catch (OfficeException ex) {
      // Log the error...
    }
  }
}

And here is the exact same example, using the new 4.1.0 version:

File source = new File(...);
File dest = new File(...);

OfficeManager officeManager = null;
try {
  officeManager = LocalOfficeManager.builder()
    .portNumbers(2002, 2003)
    .taskExecutionTimeout(60000)
    .officeHome("office path")
    .build();
  officeManager.start();

  LocalConverter.make(officeManager)
    .convert(source)
    .to(dest)
    .execute();

} finally  {
  if (officeManager != null) {
    try {
      officeManager.stop();
    } catch (OfficeException ex) {
      // Log the error...
    }
  }
}

Note that in a WEB application context where an office manager is created and started once when the application starts, the office manager can now be installed and thus it is no longer required to specify which manager is used when converting a document:

// On application start
OfficeManager officeManager = LocalOfficeManager.builder()
  .portNumbers(2002, 2003)
  .taskExecutionTimeout(60000)
  .officeHome("office path")
  .install()
  .build();
officeManager.start();

...

// On document conversion
File source = new File(...);
File dest = new File(...);

LocalConverter.make()
  .convert(source)
  .to(dest)
  .execute();

// Or the shortcut:
JodConverter
  .convert(source)
  .to(dest)
  .execute();
Clone this wiki locally