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-coreto your project, or set the system propertiesjavax.xml.stream.XMLInputFactory,XMLOutputFactoryandXMLEventFactoryto 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.NamereadsgetName(), orisName()for a boolean, when there is no public field of that name.map.Namereadsmap.get("Name"), including contextual access such as<<[Name]>>.row["column"]androw[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,SetorMappassed directly as a data source is typed by the class of its items, so<<foreach [in orders]>><<[Price]>>works for aList<Order>. orders.get(1).Price,map.get("a").Price,Optional<Order>.get(), the getter of a generic class of your own and the entries ofmap.entrySet()are typed by their type arguments.toString()and the other methods ofObjectcan be called on values typed by an interface.
Fix — smaller defects
Scope.
- A
DataTablerenamed withsetTableName()is found under its new name. - A
nullBooleancounts as false in<<if>>,<<check>>,&&and||, instead of failing with aNullPointerException. 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