[Release] GroupDocs.Assembly for Java 26.10.1

Dear GroupDocs users, we’re pleased to announce GroupDocs.Assembly for Java 26.10.1. This maintenance release fixes a packaging defect that broke the XML processing of applications using versions 26.7 to 26.10. It also lets templates written for GroupDocs.Assembly for .NET work with idiomatic Java data classes, maps and data rows. The bundled Aspose components, the public API and the Java 8 baseline are the same as in 26.10, so no code changes are required.

Maven coordinates:

<dependency>
    <groupId>com.groupdocs</groupId>
    <artifactId>groupdocs-assembly</artifactId>
    <version>26.10.1</version>
</dependency>

Fix — XML processing of the application failed with a StAX ServiceConfigurationError

Versions 26.7 to 26.10 registered their embedded XML parser as the StAX provider of the whole JVM, under a class name the jar does not contain. Every XMLInputFactory.newInstance() of an application with GroupDocs.Assembly on its class path failed, including those made by JAXB, Spring or Jackson XML:

java.util.ServiceConfigurationError: javax.xml.stream.XMLInputFactory:
    Provider com.ctc.wstx.stax.WstxInputFactory not found

Scope.

  • The registration is gone. The application uses its own StAX implementation again: the JDK one, or its own Woodstox.
  • If you stay on 26.7–26.10, either add com.fasterxml.woodstox:woodstox-core to your project, or set the system properties javax.xml.stream.XMLInputFactory, XMLOutputFactory and XMLEventFactory to the JDK implementations (com.sun.xml.internal.stream.XMLInputFactoryImpl, com.sun.xml.internal.stream.XMLOutputFactoryImpl, com.sun.xml.internal.stream.events.XMLEventFactoryImpl).

Feature — .NET-style property syntax on Java objects and maps

Templates written for .NET address data as properties, for example customer.CustomerName, which Java classes expose as getters and maps expose as keys.

Scope.

  • x.Name reads getName(), or isName() for a boolean, when there is no public field of that name.
  • map.Name reads map.get("Name"), including contextual access such as <<[Name]>>.
  • row["column"] and row[0] work on the data rows of JSON, XML and database sources.

Fix — collections, maps and generic types are typed by their content

Java erases type arguments at run time, so the engine typed many values as Object and could not resolve their members.

Scope.

  • A List, Set or Map passed directly as a data source is typed by the class of its items, so <<foreach [in orders]>><<[Price]>> works for a List<Order>.
  • orders.get(1).Price, map.get("a").Price, Optional<Order>.get(), the getter of a generic class of your own and the entries of map.entrySet() are typed by their type arguments.
  • toString() and the other methods of Object can be called on values typed by an interface.

Fix — smaller defects

Scope.

  • A DataTable renamed with setTableName() is found under its new name.
  • A null Boolean counts as false in <<if>>, <<check>>, && and ||, instead of failing with a NullPointerException.
  • BarcodeSettings.setResolution() makes barcodes sharper instead of larger.
  • The “Aspose.Words native libs cannot be loaded” lines are no longer printed to System.err.

Resources