Document the resolver floor in the threat model Installing a resolver no longer removes the hardening: the floor wraps the caller's resolver instead of being replaced. Reflect that across the threat model. Add a "Resolvers" entry under the settings a caller may modify, listing the typed set*Resolver methods, the DefaultHandler passed to SAXParser.parse, and the StAX resolver properties (javax.xml.stream.resolver and the com.ctc.wstx.*Resolver keys), with the caveat that the installed resolver must resolve every resource the caller needs, since the floor denies or ignores whatever it leaves unresolved. Move the Woodstox resolver properties out of the reserved list, correct the reserved-section note that previously called installing a resolver a loosening, and reframe the out-of-scope entry to the remaining caller responsibility: a resolver that resolves an untrusted resource fetches it. The raw Xerces internal entity-resolver property stays reserved, as the typed setter override does not wrap it. Assisted-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Apache Commons XML provides secure-by-default JAXP factory creation, abstracting over implementation-specific XXE hardening differences between the stock JDK and external JAXP implementations (Android, Apache Xalan, Apache Xerces, Woodstox, Saxon-HE).
More information can be found on the Apache Commons XML homepage. The Javadoc can be browsed. Questions related to the usage of Apache Commons XML should be posted to the user mailing list.
You can download source and binaries from our download page.
Alternatively, you can pull it from the central Maven repositories:
<dependency> <groupId>org.apache.commons</groupId> <artifactId>commons-xml</artifactId> <version>0.1.0</version> </dependency>
Building requires a Java JDK and Apache Maven. The required Java version is found in the pom.xml as the maven.compiler.source property.
From a command shell, run mvn without arguments to invoke the default Maven goal to run all tests and checks.
We accept Pull Requests via GitHub. The developer mailing list is the main channel of communication for contributors. There are some guidelines which will make applying PRs easier for us:
mvn.mvn (without arguments). This runs the default goal which contains all build checks.mvn clean site -Dcommons.jacoco.haltOnFailure=false -PjacocoIf you plan to contribute on a regular basis, please consider filing a contributor license agreement. You can learn more about contributing via GitHub in our contribution guidelines.
This code is licensed under the Apache License v2.
See the NOTICE.txt file for required notices and attributions.
You like Apache Commons XML? Then donate back to the ASF to support development.
REPOSITORIES.md: overview of the code repositories and their build status.