This is an automated email from the ASF dual-hosted git repository. ppkarwasz pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/commons-xml.git
commit 5cdc5b1504410d915a1a2df33e3141c664b7d3ee Author: Piotr P. Karwasz <[email protected]> AuthorDate: Sat Jun 20 22:07:23 2026 +0200 Repackage as org.apache.commons:commons-xml Revert the Copernik rebrand and restore the project as an Apache Commons (Sandbox) component. Code and coordinates: - Rename the package eu.copernik.xml.factory to org.apache.commons.xml (collapsing the .factory segment to match commons.module.name and the OSGi export), including the AndroidProvider class-name string literal. - Set name "Apache Commons XML", url, and the description; fix the SCM url that still pointed at commons-configuration. Licensing and ASF scaffolding: - Replace the SPDX/Copernik file headers with the standard ASF license header across all sources and config. - Restore LICENSE.txt (renamed back from LICENSE) and add NOTICE.txt. - Add .asf.yaml, .gitattributes, src/changes/changes.xml, src/site/site.xml, and the .github files (pull_request_template.md, GH-ROBOTS.txt, dependency-review.yml, scorecards-analysis.yml). - Add a Sandbox warning to the README and the site index. Build and release model: - Bump commons-parent from 99 to 102. - Set commons.jira.id=COMMONSXML and use JIRA (issueManagement, ciManagement, and dist-staging now inherit from the parent); keep only commons.scmPubUrl explicit for the sandbox site path. - Remove the Sonatype Central publishing setup (central.publishing.version, cyclonedx.skipNotDeployed, assembly.skipAssembly, flatten-maven-plugin) and revert to the standard ASF release flow. Assisted-By: Claude Opus 4.8 (1M context) <[email protected]> --- .asf.yaml | 30 ++++ .gitattributes | 24 +++ .github/GH-ROBOTS.txt | 19 +++ .github/dependabot.yml | 16 +- .github/pull_request_template.md | 30 ++++ .github/workflows/codeql-analysis.yml | 16 +- .github/workflows/dependency-review.yml | 31 ++++ .github/workflows/maven.yml | 16 +- .github/workflows/scorecards-analysis.yml | 69 +++++++++ AGENTS.md | 18 ++- LICENSE => LICENSE.txt | 0 NOTICE.txt | 5 + README.md | 45 ++++-- android-tests/README.md | 18 ++- android-tests/build.gradle.kts | 18 ++- android-tests/gradle.properties | 16 +- .../gradle/wrapper/gradle-wrapper.properties | 16 +- android-tests/settings.gradle.kts | 18 ++- android-tests/src/main/AndroidManifest.xml | 18 ++- pom.xml | 166 +++++---------------- src/changes/changes.xml | 41 +++++ .../copernik/xml/factory/DelegatingTemplates.java | 34 ----- .../apache/commons/xml}/AndroidProvider.java | 18 ++- .../xml}/DelegatingDocumentBuilderFactory.java | 18 ++- .../apache/commons/xml}/DelegatingSAXParser.java | 18 ++- .../commons/xml}/DelegatingSAXParserFactory.java | 18 ++- .../commons/xml}/DelegatingSchemaFactory.java | 18 ++- .../apache/commons/xml/DelegatingTemplates.java | 46 ++++++ .../apache/commons/xml}/DelegatingTransformer.java | 18 ++- .../commons/xml}/DelegatingTransformerFactory.java | 18 ++- .../apache/commons/xml}/DelegatingXMLReader.java | 18 ++- .../apache/commons/xml}/HardeningException.java | 18 ++- .../commons/xml}/HardeningSAXParserFactory.java | 18 ++- .../apache/commons/xml}/HardeningSchema.java | 18 ++- .../commons/xml}/HardeningSchemaFactory.java | 18 ++- .../apache/commons/xml}/HardeningTemplates.java | 18 ++- .../apache/commons/xml}/HardeningTransformer.java | 18 ++- .../commons/xml}/HardeningTransformerFactory.java | 18 ++- .../apache/commons/xml}/HardeningValidator.java | 18 ++- .../apache/commons/xml}/JaxpSetters.java | 18 ++- .../factory => org/apache/commons/xml}/Limits.java | 22 ++- .../apache/commons/xml}/Resolvers.java | 18 ++- .../apache/commons/xml}/SaxonProvider.java | 18 ++- .../apache/commons/xml}/StockJdkProvider.java | 24 ++- .../apache/commons/xml}/WoodstoxProvider.java | 18 ++- .../apache/commons/xml}/XalanProvider.java | 20 ++- .../apache/commons/xml}/XercesProvider.java | 20 ++- .../apache/commons/xml}/XmlFactories.java | 20 ++- src/site/markdown/index.md | 42 ++++-- src/site/resources/profile.japicmp | 16 +- src/site/site.xml | 29 ++++ .../eu/copernik/xml/factory/SchemaImportTest.java | 29 ---- .../eu/copernik/xml/factory/SchemaIncludeTest.java | 29 ---- .../copernik/xml/factory/SchemaRedefineTest.java | 29 ---- .../copernik/xml/factory/TemplatesImportTest.java | 22 --- .../copernik/xml/factory/TemplatesIncludeTest.java | 22 --- .../xml/factory/TransformerDocumentTest.java | 22 --- .../apache/commons/xml}/AttackTestSupport.java | 2 +- .../apache/commons/xml}/BillionLaughsTest.java | 18 ++- .../apache/commons/xml}/DoctypeOnlyTest.java | 18 ++- .../apache/commons/xml}/ExternalDtdTest.java | 18 ++- .../commons/xml}/ExternalGeneralEntityTest.java | 18 ++- .../commons/xml}/ExternalParameterEntityTest.java | 18 ++- .../apache/commons/xml}/NoDoctypeTest.java | 18 ++- .../commons/xml}/SaxonXPathExternalCallsTest.java | 18 ++- .../org/apache/commons/xml/SchemaImportTest.java | 41 +++++ .../org/apache/commons/xml/SchemaIncludeTest.java | 41 +++++ .../org/apache/commons/xml/SchemaRedefineTest.java | 41 +++++ .../apache/commons/xml/TemplatesImportTest.java | 34 +++++ .../apache/commons/xml/TemplatesIncludeTest.java | 34 +++++ .../commons/xml/TransformerDocumentTest.java | 34 +++++ .../xml}/UnsupportedXmlImplementationTest.java | 18 ++- .../apache/commons/xml}/XmlFactoriesTest.java | 18 ++- .../apache/commons/xml}/DescriptorIT.java | 18 ++- 74 files changed, 1342 insertions(+), 481 deletions(-) diff --git a/.asf.yaml b/.asf.yaml new file mode 100644 index 0000000..c06ba11 --- /dev/null +++ b/.asf.yaml @@ -0,0 +1,30 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +github: + description: "Apache Commons XML" + homepage: https://commons.apache.org/sandbox/commons-xml/ + +notifications: + commits: [email protected] + issues: [email protected] + pullrequests: [email protected] + jira_options: link label + jobs: [email protected] + # commits_bot_dependabot: [email protected] + issues_bot_dependabot: [email protected] + pullrequests_bot_dependabot: [email protected] + issues_bot_codecov-commenter: [email protected] + pullrequests_bot_codecov-commenter: [email protected] diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..715c926 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,24 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +# Auto detect text files and perform LF normalization +* text=auto + +*.java text diff=java +*.html text diff=html +*.css text +*.js text +*.sql text diff --git a/.github/GH-ROBOTS.txt b/.github/GH-ROBOTS.txt new file mode 100644 index 0000000..64a8867 --- /dev/null +++ b/.github/GH-ROBOTS.txt @@ -0,0 +1,19 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. + +# Keeps on creating FUD PRs in test code +# Does not follow Apache disclosure policies +User-agent: JLLeitschuh/security-research +Disallow: * diff --git a/.github/dependabot.yml b/.github/dependabot.yml index 42685f2..7125dd4 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -1,5 +1,17 @@ -# SPDX-FileCopyrightText: 2026 Piotr P. Karwasz <[email protected]> -# SPDX-License-Identifier: Apache-2.0 +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. version: 2 updates: diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md new file mode 100644 index 0000000..9ff35c8 --- /dev/null +++ b/.github/pull_request_template.md @@ -0,0 +1,30 @@ +<!-- + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. +--> + +Thanks for your contribution to [Apache Commons](https://commons.apache.org/)! Your help is appreciated! + +Before you push a pull request, review this list: + +- [ ] Read the [contribution guidelines](CONTRIBUTING.md) for this project. +- [ ] Read the [ASF Generative Tooling Guidance](https://www.apache.org/legal/generative-tooling.html) if you use Artificial Intelligence (AI). +- [ ] I used AI to create any part of, or all of, this pull request. Which AI tool was used to create this pull request, and to what extent did it contribute? +- [ ] Run a successful build using the default [Maven](https://maven.apache.org/) goal with `mvn`; that's `mvn` on the command line by itself. +- [ ] Write unit tests that match behavioral changes, where the tests fail if the changes to the runtime are not applied. This may not always be possible, but it is a best practice. +- [ ] Write a pull request description that is detailed enough to understand what the pull request does, how, and why. +- [ ] Each commit in the pull request should have a meaningful subject line and body. Note that a maintainer may squash commits during the merge process. diff --git a/.github/workflows/codeql-analysis.yml b/.github/workflows/codeql-analysis.yml index e4ff2b7..fff0865 100644 --- a/.github/workflows/codeql-analysis.yml +++ b/.github/workflows/codeql-analysis.yml @@ -1,5 +1,17 @@ -# SPDX-FileCopyrightText: 2026 Piotr P. Karwasz <[email protected]> -# SPDX-License-Identifier: Apache-2.0 +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. name: CodeQL diff --git a/.github/workflows/dependency-review.yml b/.github/workflows/dependency-review.yml new file mode 100644 index 0000000..f0d8ca9 --- /dev/null +++ b/.github/workflows/dependency-review.yml @@ -0,0 +1,31 @@ +# Licensed to the Apache Software Foundation (ASF) under one +# or more contributor license agreements. See the NOTICE file +# distributed with this work for additional information +# regarding copyright ownership. The ASF licenses this file +# to you under the Apache License, Version 2.0 (the +# "License"); you may not use this file except in compliance +# with the License. You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, +# software distributed under the License is distributed on an +# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY +# KIND, either express or implied. See the License for the +# specific language governing permissions and limitations +# under the License. + +name: 'Dependency Review' +on: [pull_request] + +permissions: + contents: read + +jobs: + dependency-review: + runs-on: ubuntu-latest + steps: + - name: 'Checkout Repository' + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2 + - name: 'Dependency Review PR' + uses: actions/dependency-review-action@2031cfc080254a8a887f58cffee85186f0e49e48 # v4.9.0 diff --git a/.github/workflows/maven.yml b/.github/workflows/maven.yml index 34a3f7a..f757817 100644 --- a/.github/workflows/maven.yml +++ b/.github/workflows/maven.yml @@ -1,5 +1,17 @@ -# SPDX-FileCopyrightText: 2026 Piotr P. Karwasz <[email protected]> -# SPDX-License-Identifier: Apache-2.0 +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. name: Java CI diff --git a/.github/workflows/scorecards-analysis.yml b/.github/workflows/scorecards-analysis.yml new file mode 100644 index 0000000..90aea06 --- /dev/null +++ b/.github/workflows/scorecards-analysis.yml @@ -0,0 +1,69 @@ +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache license, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the license for the specific language governing permissions and +# limitations under the license. + +name: "Scorecards supply-chain security" + +on: + branch_protection_rule: + schedule: + - cron: "30 1 * * 6" # Weekly on Saturdays + push: + branches: [ "main" ] + +permissions: read-all + +jobs: + + analysis: + + name: "Scorecards analysis" + runs-on: ubuntu-latest + permissions: + # Needed to upload the results to the code-scanning dashboard. + security-events: write + actions: read + id-token: write # This is required for requesting the JWT + contents: read # This is required for actions/checkout + + steps: + + - name: "Checkout code" + uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # 6.0.2 + with: + persist-credentials: false + + - name: "Run analysis" + uses: ossf/scorecard-action@4eaacf0543bb3f2c246792bd56e8cdeffafb205a # 2.4.3 + with: + results_file: results.sarif + results_format: sarif + # A read-only PAT token, which is sufficient for the action to function. + # The relevant discussion: https://github.com/ossf/scorecard-action/issues/188 + repo_token: ${{ secrets.GITHUB_TOKEN }} + # Publish the results for public repositories to enable scorecard badges. + # For more details: https://github.com/ossf/scorecard-action#publishing-results + publish_results: true + + - name: "Upload artifact" + uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1 + with: + name: SARIF file + path: results.sarif + retention-days: 5 + + - name: "Upload to code-scanning" + uses: github/codeql-action/upload-sarif@95e58e9a2cdfd71adc6e0353d5c52f41a045d225 # v4.35.2 + with: + sarif_file: results.sarif diff --git a/AGENTS.md b/AGENTS.md index 474a7e1..c0b0db0 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -1,7 +1,19 @@ <!-- - ~ SPDX-FileCopyrightText: 2026 Piotr P. Karwasz <[email protected]> - ~ SPDX-License-Identifier: Apache-2.0 - --> +Licensed to the Apache Software Foundation (ASF) under one or more +contributor license agreements. See the NOTICE file distributed with +this work for additional information regarding copyright ownership. +The ASF licenses this file to You under the Apache License, Version 2.0 +(the "License"); you may not use this file except in compliance with +the License. You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +--> # AGENTS.md diff --git a/LICENSE b/LICENSE.txt similarity index 100% rename from LICENSE rename to LICENSE.txt diff --git a/NOTICE.txt b/NOTICE.txt new file mode 100644 index 0000000..9365449 --- /dev/null +++ b/NOTICE.txt @@ -0,0 +1,5 @@ +Apache Commons XML +Copyright 2026 The Apache Software Foundation + +This product includes software developed at +The Apache Software Foundation (https://www.apache.org/). diff --git a/README.md b/README.md index e3befe6..40d0807 100644 --- a/README.md +++ b/README.md @@ -1,9 +1,26 @@ <!-- - ~ SPDX-FileCopyrightText: 2026 Piotr P. Karwasz <[email protected]> - ~ SPDX-License-Identifier: Apache-2.0 - --> +Licensed to the Apache Software Foundation (ASF) under one or more +contributor license agreements. See the NOTICE file distributed with +this work for additional information regarding copyright ownership. +The ASF licenses this file to You under the Apache License, Version 2.0 +(the "License"); you may not use this file except in compliance with +the License. You may obtain a copy of the License at -# Copernik XML Factory + https://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +--> + +# Apache Commons XML + +> [!WARNING] +> **Sandbox component.** Apache Commons XML is part of the +> [Apache Commons Sandbox](https://commons.apache.org/sandbox/). It is a work in progress, has not been formally +> released, and its API, coordinates, and behaviour may change without notice. Do not rely on it in production. Secure-by-default JAXP factory creation for Java. A single method call returns a hardened JAXP factory that can be used to **safely** parse XML files. @@ -33,9 +50,9 @@ Add the library to your build: ```xml <dependency> - <groupId>eu.copernik</groupId> - <artifactId>copernik-xml-factory</artifactId> - <version>0.1.0</version> + <groupId>org.apache.commons</groupId> + <artifactId>commons-xml</artifactId> + <version>0.1.0-SNAPSHOT</version> </dependency> ``` @@ -44,7 +61,7 @@ other configuration is required. On hardened factories any attempt to resolve an stylesheet) is blocked, and DOCTYPE input is rejected wherever the underlying implementation allows it. Each method is documented in the -[`XmlFactories` Javadoc](https://javadoc.io/doc/eu.copernik/copernik-xml-factory/latest/eu/copernik/xml/factory/XmlFactories.html), +[`XmlFactories` Javadoc](https://javadoc.io/doc/org.apache.commons/commons-xml/latest/org/apache/commons/xml/XmlFactories.html), hosted on javadoc.io. ### Supported implementations @@ -66,7 +83,7 @@ requires a code change to this library. ```java import org.w3c.dom.Document; -import eu.copernik.xml.factory.XmlFactories; +import org.apache.commons.xml.XmlFactories; Document doc = XmlFactories.newDocumentBuilderFactory().newDocumentBuilder().parse(inputStream); ``` @@ -74,7 +91,7 @@ Document doc = XmlFactories.newDocumentBuilderFactory().newDocumentBuilder().par **SAX parsing** via `SAXParserFactory`: ```java -import eu.copernik.xml.factory.XmlFactories; +import org.apache.commons.xml.XmlFactories; XmlFactories.newSAXParserFactory().newSAXParser().parse(inputStream, myDefaultHandler); ``` @@ -83,7 +100,7 @@ XmlFactories.newSAXParserFactory().newSAXParser().parse(inputStream, myDefaultHa ```java import javax.xml.stream.XMLStreamReader; -import eu.copernik.xml.factory.XmlFactories; +import org.apache.commons.xml.XmlFactories; XMLStreamReader reader = XmlFactories.newXMLInputFactory().createXMLStreamReader(inputStream); ``` @@ -92,7 +109,7 @@ XMLStreamReader reader = XmlFactories.newXMLInputFactory().createXMLStreamReader ```java import javax.xml.transform.stream.StreamSource; -import eu.copernik.xml.factory.XmlFactories; +import org.apache.commons.xml.XmlFactories; XmlFactories.newTransformerFactory() .newTransformer(new StreamSource(stylesheet)) .transform(new StreamSource(inputStream), new StreamResult(outputStream)); @@ -103,7 +120,7 @@ XmlFactories.newTransformerFactory() ```java import javax.xml.xpath.XPathConstants; import org.w3c.dom.NodeList; -import eu.copernik.xml.factory.XmlFactories; +import org.apache.commons.xml.XmlFactories; NodeList hits = (NodeList) XmlFactories.newXPathFactory() .newXPath() @@ -114,7 +131,7 @@ NodeList hits = (NodeList) XmlFactories.newXPathFactory() ```java import javax.xml.transform.stream.StreamSource; -import eu.copernik.xml.factory.XmlFactories; +import org.apache.commons.xml.XmlFactories; XmlFactories.newSchemaFactory() .newSchema(new StreamSource(xsdStream)) diff --git a/android-tests/README.md b/android-tests/README.md index dbf0267..729af19 100644 --- a/android-tests/README.md +++ b/android-tests/README.md @@ -1,7 +1,19 @@ <!-- - ~ SPDX-FileCopyrightText: 2026 Piotr P. Karwasz <[email protected]> - ~ SPDX-License-Identifier: Apache-2.0 - --> +Licensed to the Apache Software Foundation (ASF) under one or more +contributor license agreements. See the NOTICE file distributed with +this work for additional information regarding copyright ownership. +The ASF licenses this file to You under the Apache License, Version 2.0 +(the "License"); you may not use this file except in compliance with +the License. You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +--> # Android instrumented tests diff --git a/android-tests/build.gradle.kts b/android-tests/build.gradle.kts index f76d3a1..d827047 100644 --- a/android-tests/build.gradle.kts +++ b/android-tests/build.gradle.kts @@ -1,6 +1,18 @@ /* - * SPDX-FileCopyrightText: 2026 Piotr P. Karwasz <[email protected]> - * SPDX-License-Identifier: Apache-2.0 + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. */ import com.android.build.api.dsl.ManagedVirtualDevice @@ -14,7 +26,7 @@ val libraryVersion = "0.2.0-SNAPSHOT" val libraryJar = rootProject.file("../target/copernik-xml-factory-${libraryVersion}.jar") android { - namespace = "eu.copernik.xml.factory.androidtests" + namespace = "org.apache.commons.xml.androidtests" compileSdk = 34 defaultConfig { diff --git a/android-tests/gradle.properties b/android-tests/gradle.properties index 9bd491b..69bbe55 100644 --- a/android-tests/gradle.properties +++ b/android-tests/gradle.properties @@ -1,5 +1,17 @@ -# SPDX-FileCopyrightText: 2026 Piotr P. Karwasz <[email protected]> -# SPDX-License-Identifier: Apache-2.0 +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8 android.useAndroidX=true diff --git a/android-tests/gradle/wrapper/gradle-wrapper.properties b/android-tests/gradle/wrapper/gradle-wrapper.properties index 2d1208e..f238904 100644 --- a/android-tests/gradle/wrapper/gradle-wrapper.properties +++ b/android-tests/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,17 @@ -# SPDX-FileCopyrightText: 2026 Piotr P. Karwasz <[email protected]> -# SPDX-License-Identifier: Apache-2.0 +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists diff --git a/android-tests/settings.gradle.kts b/android-tests/settings.gradle.kts index 6fef1d6..b3bef23 100644 --- a/android-tests/settings.gradle.kts +++ b/android-tests/settings.gradle.kts @@ -1,6 +1,18 @@ /* - * SPDX-FileCopyrightText: 2026 Piotr P. Karwasz <[email protected]> - * SPDX-License-Identifier: Apache-2.0 + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. */ pluginManagement { @@ -19,4 +31,4 @@ dependencyResolutionManagement { } } -rootProject.name = "copernik-xml-factory-android-tests" +rootProject.name = "commons-xml-android-tests" diff --git a/android-tests/src/main/AndroidManifest.xml b/android-tests/src/main/AndroidManifest.xml index a10945c..8ab83bd 100644 --- a/android-tests/src/main/AndroidManifest.xml +++ b/android-tests/src/main/AndroidManifest.xml @@ -1,7 +1,19 @@ <?xml version="1.0" encoding="utf-8"?> <!-- - ~ SPDX-FileCopyrightText: 2026 Piotr P. Karwasz <[email protected]> - ~ SPDX-License-Identifier: Apache-2.0 - --> +Licensed to the Apache Software Foundation (ASF) under one or more +contributor license agreements. See the NOTICE file distributed with +this work for additional information regarding copyright ownership. +The ASF licenses this file to You under the Apache License, Version 2.0 +(the "License"); you may not use this file except in compliance with +the License. You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +--> <manifest /> diff --git a/pom.xml b/pom.xml index eb7a2db..caea7d8 100644 --- a/pom.xml +++ b/pom.xml @@ -1,91 +1,71 @@ <?xml version="1.0" encoding="UTF-8"?> <!-- - ~ SPDX-FileCopyrightText: 2026 Piotr P. Karwasz <[email protected]> - ~ SPDX-License-Identifier: Apache-2.0 - --> +Licensed to the Apache Software Foundation (ASF) under one or more +contributor license agreements. See the NOTICE file distributed with +this work for additional information regarding copyright ownership. +The ASF licenses this file to You under the Apache License, Version 2.0 +(the "License"); you may not use this file except in compliance with +the License. You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +--> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/maven-v4_0_0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.apache.commons</groupId> <artifactId>commons-parent</artifactId> - <version>99</version> + <version>102</version> </parent> - <groupId>eu.copernik</groupId> - <artifactId>copernik-xml-factory</artifactId> - <version>0.2.0-SNAPSHOT</version> - <name>Copernik XML Factory</name> - <url>https://github.com/copernik-eu/copernik-xml-factory/</url> + <artifactId>commons-xml</artifactId> + <version>0.1.0-SNAPSHOT</version> + <name>Apache Commons XML</name> + <url>https://commons.apache.org/sandbox/commons-xml/</url> <inceptionYear>2026</inceptionYear> - <description>XML Factory provides secure-by-default JAXP factory creation, abstracting over + <description>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).</description> - <organization> - <name>Copernik</name> - <url>https://oss.copernik.eu</url> - </organization> - <developers> <developer> <id>ppkarwasz</id> <name>Piotr P. Karwasz</name> - <email>[email protected]</email> - <organization>Copernik</organization> - <organizationUrl>https://oss.copernik.eu</organizationUrl> + <email>[email protected]</email> </developer> </developers> <scm> - <connection>scm:git:https://github.com/copernik-eu/copernik-xml-factory.git</connection> - <developerConnection>scm:git:[email protected]:copernik-eu/copernik-xml-factory.git</developerConnection> - <url>https://github.com/copernik-eu/copernik-xml-factory</url> - <tag>v${project.version}</tag> + <connection>scm:git:https://gitbox.apache.org/repos/asf/commons-xml.git</connection> + <developerConnection>scm:git:https://gitbox.apache.org/repos/asf/commons-xml.git</developerConnection> + <url>https://gitbox.apache.org/repos/asf?p=commons-xml.git</url> + <tag>rel/commons-xml-${project.version}</tag> </scm> - <issueManagement> - <system>GitHub Issues</system> - <url>https://github.com/copernik-eu/copernik-xml-factory/issues</url> - </issueManagement> - - <ciManagement> - <system>GitHub Actions</system> - <url>https://github.com/copernik-eu/copernik-xml-factory/actions</url> - </ciManagement> - - <!-- Issue tracking and discussion happen on GitHub. --> - <mailingLists> - <mailingList/> - </mailingLists> - - <distributionManagement> - <repository> - <id>central</id> - <url>https://central.sonatype.com</url> - </repository> - <snapshotRepository> - <id>central</id> - <url>https://central.sonatype.com/repository/maven-snapshots/</url> - </snapshotRepository> - </distributionManagement> - <properties> <!-- Release-related properties --> <commons.release.version>0.1.1</commons.release.version> <commons.release.desc>(Java 8+)</commons.release.desc> <commons.rc.version>RC1</commons.rc.version> - <!-- japicmp baseline: compare the API against the previous release. --> - <commons.bc.version>0.1.1</commons.bc.version> + <!-- japicmp baseline: disable for first release + <commons.bc.version>0.1.1</commons.bc.version> --> + <japicmp.skip>true</japicmp.skip> <commons.release.next>0.1.2</commons.release.next> - <commons.componentid>copernik-xml-factory</commons.componentid> - <commons.packageId>xml.factory</commons.packageId> - <commons.module.name>eu.copernik.xml.factory</commons.module.name> - <commons.distSvnStagingUrl/> - <commons.scmPubUrl/> + <commons.componentid>xml</commons.componentid> + <commons.packageId>xml</commons.packageId> + <commons.module.name>org.apache.commons.xml</commons.module.name> + <commons.jira.id>COMMONSXML</commons.jira.id> + <!-- Sandbox component: publish the site under the sandbox tree (the parent defaults to proper/). --> + <commons.scmPubUrl>https://svn.apache.org/repos/infra/websites/production/commons/content/sandbox/commons-xml</commons.scmPubUrl> <!-- OSGi bundle metadata: override commons-parent's org.apache.commons.* defaults. --> - <commons.osgi.symbolicName>eu.copernik.xml.factory</commons.osgi.symbolicName> - <commons.osgi.export>eu.copernik.xml.factory.*;version=${project.version};-noimport:=true</commons.osgi.export> + <commons.osgi.symbolicName>org.apache.commons.xml</commons.osgi.symbolicName> + <commons.osgi.export>org.apache.commons.xml.*;version=${project.version};-noimport:=true</commons.osgi.export> <commons.osgi.import> net.sf.saxon.*;resolution:=optional, org.apache.xerces.*;resolution:=optional, @@ -93,9 +73,6 @@ </commons.osgi.import> <project.build.outputTimestamp>2026-04-22T00:00:00Z</project.build.outputTimestamp> - <!-- No JIRA: tracked in GitHub Issues. --> - <changes.jira.skip>true</changes.jira.skip> - <!-- Java baseline --> <maven.compiler.source>1.8</maven.compiler.source> <maven.compiler.target>1.8</maven.compiler.target> @@ -105,27 +82,13 @@ <commons.woodstox.version>7.1.1</commons.woodstox.version> <commons.xalan.version>2.7.3</commons.xalan.version> <commons.xerces.version>2.12.2</commons.xerces.version> - - <!-- Sonatype Central Publishing --> - <central.publishing.version>0.10.0</central.publishing.version> - <!-- We use Central and the `deploy` goal auto-detection does not currently work with it --> - <cyclonedx.skipNotDeployed>false</cyclonedx.skipNotDeployed> - - <!-- - Skip the source-release assembly inherited from the release profile: it expects the ASF - src/assembly/src.xml descriptor, and we publish to Central rather than cutting an ASF release. - --> - <assembly.skipAssembly>true</assembly.skipAssembly> - - <!-- Flatten Maven plugin: produces a consumer POM at deploy time. --> - <flatten-maven-plugin.version>1.7.3</flatten-maven-plugin.version> </properties> <dependencies> <!-- Saxon-HE supplies types we reference at compile time (the Saxon provider). It is not part of the consumer - contract: callers who want Saxon-HE for XSLT/XPath bring it themselves, and the flatten plugin drops every - provided-scope dependency from the published POM. + contract: it is declared in provided scope, so callers who want Saxon-HE for XSLT/XPath bring it themselves + and it is never pulled in transitively. --> <dependency> <groupId>net.sf.saxon</groupId> @@ -325,7 +288,7 @@ <!-- commons-parent's create-source-jar execution attaches both the main sources (jar-no-fork) and the test sources (test-jar-no-fork) in one execution. Disable it and re-bind a main-sources-only execution, so the - published artifact keeps the Central-required sources jar but drops the test-sources jar. + published artifact keeps the required sources jar but drops the test-sources jar. --> <plugin> <groupId>org.apache.maven.plugins</groupId> @@ -366,55 +329,6 @@ </executions> </plugin> - <!-- Publish to the new Sonatype Central API. --> - <plugin> - <groupId>org.sonatype.central</groupId> - <artifactId>central-publishing-maven-plugin</artifactId> - <version>${central.publishing.version}</version> - <extensions>true</extensions> - <configuration> - <publishingServerId>central</publishingServerId> - <autoPublish>false</autoPublish> - </configuration> - </plugin> - - <!-- - Flatten the POM at install/deploy time so the published artifact carries only the metadata Maven Central - requires (groupId, artifactId, version, name, description, url, license, scm, developers, dependencies) - and drops everything inherited from commons-parent that is not relevant to a consumer (mailing lists, - ciManagement, distribution properties, plugin management, etc.). - --> - <plugin> - <groupId>org.codehaus.mojo</groupId> - <artifactId>flatten-maven-plugin</artifactId> - <version>${flatten-maven-plugin.version}</version> - <configuration> - <flattenMode>oss</flattenMode> - <pomElements> - <!-- Placeholder kept locally only to override commons-parent's mailing lists; not consumer-relevant. --> - <mailingLists>remove</mailingLists> - <!-- Where the artifact is published is not consumer-relevant. --> - <distributionManagement>remove</distributionManagement> - </pomElements> - </configuration> - <executions> - <execution> - <id>flatten</id> - <phase>process-resources</phase> - <goals> - <goal>flatten</goal> - </goals> - </execution> - <execution> - <id>flatten-clean</id> - <phase>clean</phase> - <goals> - <goal>clean</goal> - </goals> - </execution> - </executions> - </plugin> - </plugins> </build> diff --git a/src/changes/changes.xml b/src/changes/changes.xml new file mode 100644 index 0000000..2f0a67e --- /dev/null +++ b/src/changes/changes.xml @@ -0,0 +1,41 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + --> + +<!-- +This file is used by the maven-changes-plugin to generate the release notes. +To generate the release notes from this file: + +mvn changes:announcement-generate -Prelease-notes [-Dchanges.version=nnn] + +The <action> type attribute can be add, update, fix, or remove. +--> +<document xmlns="http://maven.apache.org/changes/2.0.0" + xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" + xsi:schemaLocation="http://maven.apache.org/changes/2.0.0 https://maven.apache.org/xsd/changes-2.0.0.xsd"> + <properties> + <title>Apache Commons XML - Changes</title> + </properties> + <body> + <release version="0.1.0" date="YYYY-MM-DD" description="First release."> + <action type="add" dev="ppkarwasz"> + Secure-by-default JAXP factory creation via XmlFactories, with implementation-specific hardening recipes for the + stock JDK, Android, Apache Xalan, Apache Xerces, Woodstox, and Saxon-HE. + </action> + </release> + </body> +</document> diff --git a/src/main/java/eu/copernik/xml/factory/DelegatingTemplates.java b/src/main/java/eu/copernik/xml/factory/DelegatingTemplates.java deleted file mode 100644 index 6197d79..0000000 --- a/src/main/java/eu/copernik/xml/factory/DelegatingTemplates.java +++ /dev/null @@ -1,34 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2026 Piotr P. Karwasz <[email protected]> - * SPDX-License-Identifier: Apache-2.0 - */ - -package eu.copernik.xml.factory; - -import java.util.Properties; - -import javax.xml.transform.Templates; -import javax.xml.transform.Transformer; -import javax.xml.transform.TransformerConfigurationException; - -/** - * {@link Templates} wrapper that forwards every method to a wrapped delegate. - */ -class DelegatingTemplates implements Templates { - - private final Templates delegate; - - DelegatingTemplates(final Templates delegate) { - this.delegate = delegate; - } - - @Override - public Properties getOutputProperties() { - return delegate.getOutputProperties(); - } - - @Override - public Transformer newTransformer() throws TransformerConfigurationException { - return delegate.newTransformer(); - } -} diff --git a/src/main/java/eu/copernik/xml/factory/AndroidProvider.java b/src/main/java/org/apache/commons/xml/AndroidProvider.java similarity index 90% rename from src/main/java/eu/copernik/xml/factory/AndroidProvider.java rename to src/main/java/org/apache/commons/xml/AndroidProvider.java index 88a336b..34abb5d 100644 --- a/src/main/java/eu/copernik/xml/factory/AndroidProvider.java +++ b/src/main/java/org/apache/commons/xml/AndroidProvider.java @@ -1,9 +1,21 @@ /* - * SPDX-FileCopyrightText: 2026 Piotr P. Karwasz <[email protected]> - * SPDX-License-Identifier: Apache-2.0 + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. */ -package eu.copernik.xml.factory; +package org.apache.commons.xml; import java.util.Objects; diff --git a/src/main/java/eu/copernik/xml/factory/DelegatingDocumentBuilderFactory.java b/src/main/java/org/apache/commons/xml/DelegatingDocumentBuilderFactory.java similarity index 79% rename from src/main/java/eu/copernik/xml/factory/DelegatingDocumentBuilderFactory.java rename to src/main/java/org/apache/commons/xml/DelegatingDocumentBuilderFactory.java index ae2a8ff..d641f87 100644 --- a/src/main/java/eu/copernik/xml/factory/DelegatingDocumentBuilderFactory.java +++ b/src/main/java/org/apache/commons/xml/DelegatingDocumentBuilderFactory.java @@ -1,9 +1,21 @@ /* - * SPDX-FileCopyrightText: 2026 Piotr P. Karwasz <[email protected]> - * SPDX-License-Identifier: Apache-2.0 + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. */ -package eu.copernik.xml.factory; +package org.apache.commons.xml; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; diff --git a/src/main/java/eu/copernik/xml/factory/DelegatingSAXParser.java b/src/main/java/org/apache/commons/xml/DelegatingSAXParser.java similarity index 69% rename from src/main/java/eu/copernik/xml/factory/DelegatingSAXParser.java rename to src/main/java/org/apache/commons/xml/DelegatingSAXParser.java index e3fa908..26dc125 100644 --- a/src/main/java/eu/copernik/xml/factory/DelegatingSAXParser.java +++ b/src/main/java/org/apache/commons/xml/DelegatingSAXParser.java @@ -1,9 +1,21 @@ /* - * SPDX-FileCopyrightText: 2026 Piotr P. Karwasz <[email protected]> - * SPDX-License-Identifier: Apache-2.0 + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. */ -package eu.copernik.xml.factory; +package org.apache.commons.xml; import javax.xml.parsers.SAXParser; import javax.xml.validation.Schema; diff --git a/src/main/java/eu/copernik/xml/factory/DelegatingSAXParserFactory.java b/src/main/java/org/apache/commons/xml/DelegatingSAXParserFactory.java similarity index 71% rename from src/main/java/eu/copernik/xml/factory/DelegatingSAXParserFactory.java rename to src/main/java/org/apache/commons/xml/DelegatingSAXParserFactory.java index b1fe7ee..bb5323f 100644 --- a/src/main/java/eu/copernik/xml/factory/DelegatingSAXParserFactory.java +++ b/src/main/java/org/apache/commons/xml/DelegatingSAXParserFactory.java @@ -1,9 +1,21 @@ /* - * SPDX-FileCopyrightText: 2026 Piotr P. Karwasz <[email protected]> - * SPDX-License-Identifier: Apache-2.0 + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. */ -package eu.copernik.xml.factory; +package org.apache.commons.xml; import javax.xml.parsers.ParserConfigurationException; import javax.xml.parsers.SAXParser; diff --git a/src/main/java/eu/copernik/xml/factory/DelegatingSchemaFactory.java b/src/main/java/org/apache/commons/xml/DelegatingSchemaFactory.java similarity index 73% rename from src/main/java/eu/copernik/xml/factory/DelegatingSchemaFactory.java rename to src/main/java/org/apache/commons/xml/DelegatingSchemaFactory.java index 14a18fb..797d8ce 100644 --- a/src/main/java/eu/copernik/xml/factory/DelegatingSchemaFactory.java +++ b/src/main/java/org/apache/commons/xml/DelegatingSchemaFactory.java @@ -1,9 +1,21 @@ /* - * SPDX-FileCopyrightText: 2026 Piotr P. Karwasz <[email protected]> - * SPDX-License-Identifier: Apache-2.0 + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. */ -package eu.copernik.xml.factory; +package org.apache.commons.xml; import javax.xml.transform.Source; import javax.xml.validation.Schema; diff --git a/src/main/java/org/apache/commons/xml/DelegatingTemplates.java b/src/main/java/org/apache/commons/xml/DelegatingTemplates.java new file mode 100644 index 0000000..f20d5a9 --- /dev/null +++ b/src/main/java/org/apache/commons/xml/DelegatingTemplates.java @@ -0,0 +1,46 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.commons.xml; + +import java.util.Properties; + +import javax.xml.transform.Templates; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerConfigurationException; + +/** + * {@link Templates} wrapper that forwards every method to a wrapped delegate. + */ +class DelegatingTemplates implements Templates { + + private final Templates delegate; + + DelegatingTemplates(final Templates delegate) { + this.delegate = delegate; + } + + @Override + public Properties getOutputProperties() { + return delegate.getOutputProperties(); + } + + @Override + public Transformer newTransformer() throws TransformerConfigurationException { + return delegate.newTransformer(); + } +} diff --git a/src/main/java/eu/copernik/xml/factory/DelegatingTransformer.java b/src/main/java/org/apache/commons/xml/DelegatingTransformer.java similarity index 72% rename from src/main/java/eu/copernik/xml/factory/DelegatingTransformer.java rename to src/main/java/org/apache/commons/xml/DelegatingTransformer.java index d47a03b..189f3b0 100644 --- a/src/main/java/eu/copernik/xml/factory/DelegatingTransformer.java +++ b/src/main/java/org/apache/commons/xml/DelegatingTransformer.java @@ -1,9 +1,21 @@ /* - * SPDX-FileCopyrightText: 2026 Piotr P. Karwasz <[email protected]> - * SPDX-License-Identifier: Apache-2.0 + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. */ -package eu.copernik.xml.factory; +package org.apache.commons.xml; import java.util.Properties; diff --git a/src/main/java/eu/copernik/xml/factory/DelegatingTransformerFactory.java b/src/main/java/org/apache/commons/xml/DelegatingTransformerFactory.java similarity index 81% rename from src/main/java/eu/copernik/xml/factory/DelegatingTransformerFactory.java rename to src/main/java/org/apache/commons/xml/DelegatingTransformerFactory.java index 88d5f44..e3069b4 100644 --- a/src/main/java/eu/copernik/xml/factory/DelegatingTransformerFactory.java +++ b/src/main/java/org/apache/commons/xml/DelegatingTransformerFactory.java @@ -1,9 +1,21 @@ /* - * SPDX-FileCopyrightText: 2026 Piotr P. Karwasz <[email protected]> - * SPDX-License-Identifier: Apache-2.0 + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. */ -package eu.copernik.xml.factory; +package org.apache.commons.xml; import javax.xml.transform.ErrorListener; import javax.xml.transform.Source; diff --git a/src/main/java/eu/copernik/xml/factory/DelegatingXMLReader.java b/src/main/java/org/apache/commons/xml/DelegatingXMLReader.java similarity index 75% rename from src/main/java/eu/copernik/xml/factory/DelegatingXMLReader.java rename to src/main/java/org/apache/commons/xml/DelegatingXMLReader.java index fe9aed4..9b50614 100644 --- a/src/main/java/eu/copernik/xml/factory/DelegatingXMLReader.java +++ b/src/main/java/org/apache/commons/xml/DelegatingXMLReader.java @@ -1,9 +1,21 @@ /* - * SPDX-FileCopyrightText: 2026 Piotr P. Karwasz <[email protected]> - * SPDX-License-Identifier: Apache-2.0 + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. */ -package eu.copernik.xml.factory; +package org.apache.commons.xml; import java.io.IOException; diff --git a/src/main/java/eu/copernik/xml/factory/HardeningException.java b/src/main/java/org/apache/commons/xml/HardeningException.java similarity index 53% rename from src/main/java/eu/copernik/xml/factory/HardeningException.java rename to src/main/java/org/apache/commons/xml/HardeningException.java index 8690016..c549428 100644 --- a/src/main/java/eu/copernik/xml/factory/HardeningException.java +++ b/src/main/java/org/apache/commons/xml/HardeningException.java @@ -1,9 +1,21 @@ /* - * SPDX-FileCopyrightText: 2026 Piotr P. Karwasz <[email protected]> - * SPDX-License-Identifier: Apache-2.0 + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. */ -package eu.copernik.xml.factory; +package org.apache.commons.xml; /** * Thrown when a factory cannot be hardened. diff --git a/src/main/java/eu/copernik/xml/factory/HardeningSAXParserFactory.java b/src/main/java/org/apache/commons/xml/HardeningSAXParserFactory.java similarity index 56% rename from src/main/java/eu/copernik/xml/factory/HardeningSAXParserFactory.java rename to src/main/java/org/apache/commons/xml/HardeningSAXParserFactory.java index b8dee07..a096c04 100644 --- a/src/main/java/eu/copernik/xml/factory/HardeningSAXParserFactory.java +++ b/src/main/java/org/apache/commons/xml/HardeningSAXParserFactory.java @@ -1,9 +1,21 @@ /* - * SPDX-FileCopyrightText: 2026 Piotr P. Karwasz <[email protected]> - * SPDX-License-Identifier: Apache-2.0 + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. */ -package eu.copernik.xml.factory; +package org.apache.commons.xml; import java.util.function.UnaryOperator; diff --git a/src/main/java/eu/copernik/xml/factory/HardeningSchema.java b/src/main/java/org/apache/commons/xml/HardeningSchema.java similarity index 61% rename from src/main/java/eu/copernik/xml/factory/HardeningSchema.java rename to src/main/java/org/apache/commons/xml/HardeningSchema.java index 3064642..3dcc109 100644 --- a/src/main/java/eu/copernik/xml/factory/HardeningSchema.java +++ b/src/main/java/org/apache/commons/xml/HardeningSchema.java @@ -1,9 +1,21 @@ /* - * SPDX-FileCopyrightText: 2026 Piotr P. Karwasz <[email protected]> - * SPDX-License-Identifier: Apache-2.0 + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. */ -package eu.copernik.xml.factory; +package org.apache.commons.xml; import java.util.function.UnaryOperator; diff --git a/src/main/java/eu/copernik/xml/factory/HardeningSchemaFactory.java b/src/main/java/org/apache/commons/xml/HardeningSchemaFactory.java similarity index 76% rename from src/main/java/eu/copernik/xml/factory/HardeningSchemaFactory.java rename to src/main/java/org/apache/commons/xml/HardeningSchemaFactory.java index da37d07..ece9494 100644 --- a/src/main/java/eu/copernik/xml/factory/HardeningSchemaFactory.java +++ b/src/main/java/org/apache/commons/xml/HardeningSchemaFactory.java @@ -1,9 +1,21 @@ /* - * SPDX-FileCopyrightText: 2026 Piotr P. Karwasz <[email protected]> - * SPDX-License-Identifier: Apache-2.0 + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. */ -package eu.copernik.xml.factory; +package org.apache.commons.xml; import java.util.function.UnaryOperator; diff --git a/src/main/java/eu/copernik/xml/factory/HardeningTemplates.java b/src/main/java/org/apache/commons/xml/HardeningTemplates.java similarity index 66% rename from src/main/java/eu/copernik/xml/factory/HardeningTemplates.java rename to src/main/java/org/apache/commons/xml/HardeningTemplates.java index 5b058a3..f7b947d 100644 --- a/src/main/java/eu/copernik/xml/factory/HardeningTemplates.java +++ b/src/main/java/org/apache/commons/xml/HardeningTemplates.java @@ -1,9 +1,21 @@ /* - * SPDX-FileCopyrightText: 2026 Piotr P. Karwasz <[email protected]> - * SPDX-License-Identifier: Apache-2.0 + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. */ -package eu.copernik.xml.factory; +package org.apache.commons.xml; import javax.xml.transform.Templates; import javax.xml.transform.Transformer; diff --git a/src/main/java/eu/copernik/xml/factory/HardeningTransformer.java b/src/main/java/org/apache/commons/xml/HardeningTransformer.java similarity index 52% rename from src/main/java/eu/copernik/xml/factory/HardeningTransformer.java rename to src/main/java/org/apache/commons/xml/HardeningTransformer.java index cee653d..7e77f2e 100644 --- a/src/main/java/eu/copernik/xml/factory/HardeningTransformer.java +++ b/src/main/java/org/apache/commons/xml/HardeningTransformer.java @@ -1,9 +1,21 @@ /* - * SPDX-FileCopyrightText: 2026 Piotr P. Karwasz <[email protected]> - * SPDX-License-Identifier: Apache-2.0 + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. */ -package eu.copernik.xml.factory; +package org.apache.commons.xml; import javax.xml.transform.Result; import javax.xml.transform.Source; diff --git a/src/main/java/eu/copernik/xml/factory/HardeningTransformerFactory.java b/src/main/java/org/apache/commons/xml/HardeningTransformerFactory.java similarity index 82% rename from src/main/java/eu/copernik/xml/factory/HardeningTransformerFactory.java rename to src/main/java/org/apache/commons/xml/HardeningTransformerFactory.java index 86b0b86..2e54465 100644 --- a/src/main/java/eu/copernik/xml/factory/HardeningTransformerFactory.java +++ b/src/main/java/org/apache/commons/xml/HardeningTransformerFactory.java @@ -1,9 +1,21 @@ /* - * SPDX-FileCopyrightText: 2026 Piotr P. Karwasz <[email protected]> - * SPDX-License-Identifier: Apache-2.0 + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. */ -package eu.copernik.xml.factory; +package org.apache.commons.xml; import javax.xml.transform.Source; import javax.xml.transform.Templates; diff --git a/src/main/java/eu/copernik/xml/factory/HardeningValidator.java b/src/main/java/org/apache/commons/xml/HardeningValidator.java similarity index 75% rename from src/main/java/eu/copernik/xml/factory/HardeningValidator.java rename to src/main/java/org/apache/commons/xml/HardeningValidator.java index e8400a8..3df9596 100644 --- a/src/main/java/eu/copernik/xml/factory/HardeningValidator.java +++ b/src/main/java/org/apache/commons/xml/HardeningValidator.java @@ -1,9 +1,21 @@ /* - * SPDX-FileCopyrightText: 2026 Piotr P. Karwasz <[email protected]> - * SPDX-License-Identifier: Apache-2.0 + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. */ -package eu.copernik.xml.factory; +package org.apache.commons.xml; import java.io.IOException; diff --git a/src/main/java/eu/copernik/xml/factory/JaxpSetters.java b/src/main/java/org/apache/commons/xml/JaxpSetters.java similarity index 84% rename from src/main/java/eu/copernik/xml/factory/JaxpSetters.java rename to src/main/java/org/apache/commons/xml/JaxpSetters.java index f9e4101..55c7f62 100644 --- a/src/main/java/eu/copernik/xml/factory/JaxpSetters.java +++ b/src/main/java/org/apache/commons/xml/JaxpSetters.java @@ -1,9 +1,21 @@ /* - * SPDX-FileCopyrightText: 2026 Piotr P. Karwasz <[email protected]> - * SPDX-License-Identifier: Apache-2.0 + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. */ -package eu.copernik.xml.factory; +package org.apache.commons.xml; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.SAXParser; diff --git a/src/main/java/eu/copernik/xml/factory/Limits.java b/src/main/java/org/apache/commons/xml/Limits.java similarity index 94% rename from src/main/java/eu/copernik/xml/factory/Limits.java rename to src/main/java/org/apache/commons/xml/Limits.java index a83d1f4..9760b32 100644 --- a/src/main/java/eu/copernik/xml/factory/Limits.java +++ b/src/main/java/org/apache/commons/xml/Limits.java @@ -1,11 +1,23 @@ /* - * SPDX-FileCopyrightText: 2026 Piotr P. Karwasz <[email protected]> - * SPDX-License-Identifier: Apache-2.0 + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. */ -package eu.copernik.xml.factory; +package org.apache.commons.xml; -import static eu.copernik.xml.factory.JaxpSetters.setAttribute; -import static eu.copernik.xml.factory.JaxpSetters.setProperty; +import static org.apache.commons.xml.JaxpSetters.setAttribute; +import static org.apache.commons.xml.JaxpSetters.setProperty; import java.util.Collections; import java.util.LinkedHashMap; diff --git a/src/main/java/eu/copernik/xml/factory/Resolvers.java b/src/main/java/org/apache/commons/xml/Resolvers.java similarity index 87% rename from src/main/java/eu/copernik/xml/factory/Resolvers.java rename to src/main/java/org/apache/commons/xml/Resolvers.java index 85d8ef7..33867df 100644 --- a/src/main/java/eu/copernik/xml/factory/Resolvers.java +++ b/src/main/java/org/apache/commons/xml/Resolvers.java @@ -1,9 +1,21 @@ /* - * SPDX-FileCopyrightText: 2026 Piotr P. Karwasz <[email protected]> - * SPDX-License-Identifier: Apache-2.0 + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. */ -package eu.copernik.xml.factory; +package org.apache.commons.xml; import java.io.ByteArrayInputStream; import java.io.InputStream; diff --git a/src/main/java/eu/copernik/xml/factory/SaxonProvider.java b/src/main/java/org/apache/commons/xml/SaxonProvider.java similarity index 83% rename from src/main/java/eu/copernik/xml/factory/SaxonProvider.java rename to src/main/java/org/apache/commons/xml/SaxonProvider.java index a825d22..2a5d98b 100644 --- a/src/main/java/eu/copernik/xml/factory/SaxonProvider.java +++ b/src/main/java/org/apache/commons/xml/SaxonProvider.java @@ -1,9 +1,21 @@ /* - * SPDX-FileCopyrightText: 2026 Piotr P. Karwasz <[email protected]> - * SPDX-License-Identifier: Apache-2.0 + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. */ -package eu.copernik.xml.factory; +package org.apache.commons.xml; import javax.xml.transform.TransformerFactory; import javax.xml.transform.TransformerFactoryConfigurationError; diff --git a/src/main/java/eu/copernik/xml/factory/StockJdkProvider.java b/src/main/java/org/apache/commons/xml/StockJdkProvider.java similarity index 89% rename from src/main/java/eu/copernik/xml/factory/StockJdkProvider.java rename to src/main/java/org/apache/commons/xml/StockJdkProvider.java index 05a237d..fa31557 100644 --- a/src/main/java/eu/copernik/xml/factory/StockJdkProvider.java +++ b/src/main/java/org/apache/commons/xml/StockJdkProvider.java @@ -1,13 +1,25 @@ /* - * SPDX-FileCopyrightText: 2026 Piotr P. Karwasz <[email protected]> - * SPDX-License-Identifier: Apache-2.0 + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. */ -package eu.copernik.xml.factory; +package org.apache.commons.xml; -import static eu.copernik.xml.factory.JaxpSetters.setAttribute; -import static eu.copernik.xml.factory.JaxpSetters.setFeature; -import static eu.copernik.xml.factory.JaxpSetters.setProperty; +import static org.apache.commons.xml.JaxpSetters.setAttribute; +import static org.apache.commons.xml.JaxpSetters.setFeature; +import static org.apache.commons.xml.JaxpSetters.setProperty; import javax.xml.XMLConstants; import javax.xml.parsers.DocumentBuilderFactory; diff --git a/src/main/java/eu/copernik/xml/factory/WoodstoxProvider.java b/src/main/java/org/apache/commons/xml/WoodstoxProvider.java similarity index 83% rename from src/main/java/eu/copernik/xml/factory/WoodstoxProvider.java rename to src/main/java/org/apache/commons/xml/WoodstoxProvider.java index 7b3206f..c843615 100644 --- a/src/main/java/eu/copernik/xml/factory/WoodstoxProvider.java +++ b/src/main/java/org/apache/commons/xml/WoodstoxProvider.java @@ -1,9 +1,21 @@ /* - * SPDX-FileCopyrightText: 2026 Piotr P. Karwasz <[email protected]> - * SPDX-License-Identifier: Apache-2.0 + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. */ -package eu.copernik.xml.factory; +package org.apache.commons.xml; import javax.xml.stream.XMLInputFactory; import javax.xml.stream.XMLResolver; diff --git a/src/main/java/eu/copernik/xml/factory/XalanProvider.java b/src/main/java/org/apache/commons/xml/XalanProvider.java similarity index 78% rename from src/main/java/eu/copernik/xml/factory/XalanProvider.java rename to src/main/java/org/apache/commons/xml/XalanProvider.java index 403a5e6..21a3f7c 100644 --- a/src/main/java/eu/copernik/xml/factory/XalanProvider.java +++ b/src/main/java/org/apache/commons/xml/XalanProvider.java @@ -1,11 +1,23 @@ /* - * SPDX-FileCopyrightText: 2026 Piotr P. Karwasz <[email protected]> - * SPDX-License-Identifier: Apache-2.0 + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. */ -package eu.copernik.xml.factory; +package org.apache.commons.xml; -import static eu.copernik.xml.factory.JaxpSetters.setFeature; +import static org.apache.commons.xml.JaxpSetters.setFeature; import javax.xml.XMLConstants; import javax.xml.transform.TransformerFactory; diff --git a/src/main/java/eu/copernik/xml/factory/XercesProvider.java b/src/main/java/org/apache/commons/xml/XercesProvider.java similarity index 91% rename from src/main/java/eu/copernik/xml/factory/XercesProvider.java rename to src/main/java/org/apache/commons/xml/XercesProvider.java index 78c1620..7b89be1 100644 --- a/src/main/java/eu/copernik/xml/factory/XercesProvider.java +++ b/src/main/java/org/apache/commons/xml/XercesProvider.java @@ -1,11 +1,23 @@ /* - * SPDX-FileCopyrightText: 2026 Piotr P. Karwasz <[email protected]> - * SPDX-License-Identifier: Apache-2.0 + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. */ -package eu.copernik.xml.factory; +package org.apache.commons.xml; -import static eu.copernik.xml.factory.JaxpSetters.setFeature; +import static org.apache.commons.xml.JaxpSetters.setFeature; import javax.xml.XMLConstants; import javax.xml.parsers.DocumentBuilder; diff --git a/src/main/java/eu/copernik/xml/factory/XmlFactories.java b/src/main/java/org/apache/commons/xml/XmlFactories.java similarity index 93% rename from src/main/java/eu/copernik/xml/factory/XmlFactories.java rename to src/main/java/org/apache/commons/xml/XmlFactories.java index 74b18ea..b97c59f 100644 --- a/src/main/java/eu/copernik/xml/factory/XmlFactories.java +++ b/src/main/java/org/apache/commons/xml/XmlFactories.java @@ -1,9 +1,21 @@ /* - * SPDX-FileCopyrightText: 2026 Piotr P. Karwasz <[email protected]> - * SPDX-License-Identifier: Apache-2.0 + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. */ -package eu.copernik.xml.factory; +package org.apache.commons.xml; import javax.xml.XMLConstants; import javax.xml.parsers.DocumentBuilderFactory; @@ -173,7 +185,7 @@ public static XMLReader harden(final XMLReader reader) { case "com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser": return StockJdkProvider.configure(reader); case "org.apache.harmony.xml.ExpatReader": - case "eu.copernik.xml.factory.AndroidProvider$GuardedXMLReader": + case "org.apache.commons.xml.AndroidProvider$GuardedXMLReader": return AndroidProvider.configure(reader); case "org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser": return XercesProvider.configure(reader); diff --git a/src/site/markdown/index.md b/src/site/markdown/index.md index 749e520..16a4518 100644 --- a/src/site/markdown/index.md +++ b/src/site/markdown/index.md @@ -1,11 +1,27 @@ <!-- - ~ SPDX-FileCopyrightText: 2026 Piotr P. Karwasz <[email protected]> - ~ SPDX-License-Identifier: Apache-2.0 - --> +Licensed to the Apache Software Foundation (ASF) under one or more +contributor license agreements. See the NOTICE file distributed with +this work for additional information regarding copyright ownership. +The ASF licenses this file to You under the Apache License, Version 2.0 +(the "License"); you may not use this file except in compliance with +the License. You may obtain a copy of the License at -# Copernik XML Factory + https://www.apache.org/licenses/LICENSE-2.0 -Copernik XML Factory provides secure-by-default JAXP factory creation, +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +--> + +# Apache Commons XML + +**Sandbox component.** Apache Commons XML is part of the +[Apache Commons Sandbox](https://commons.apache.org/sandbox/). It is a work in progress, has not been formally +released, and its API, coordinates, and behaviour may change without notice. Do not rely on it in production. + +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. @@ -35,8 +51,8 @@ Add the library to your build: ```xml <dependency> - <groupId>eu.copernik</groupId> - <artifactId>copernik-xml-factory</artifactId> + <groupId>org.apache.commons</groupId> + <artifactId>commons-xml</artifactId> <version>${commons.release.version}</version> </dependency> ``` @@ -56,7 +72,7 @@ requires a code change to this library. ```java import org.w3c.dom.Document; -import eu.copernik.xml.factory.XmlFactories; +import org.apache.commons.xml.XmlFactories; Document doc = XmlFactories.newDocumentBuilderFactory().newDocumentBuilder().parse(inputStream); ``` @@ -64,7 +80,7 @@ Document doc = XmlFactories.newDocumentBuilderFactory().newDocumentBuilder().par **SAX parsing** via `SAXParserFactory`: ```java -import eu.copernik.xml.factory.XmlFactories; +import org.apache.commons.xml.XmlFactories; XmlFactories.newSAXParserFactory().newSAXParser().parse(inputStream, myDefaultHandler); ``` @@ -73,7 +89,7 @@ XmlFactories.newSAXParserFactory().newSAXParser().parse(inputStream, myDefaultHa ```java import javax.xml.stream.XMLStreamReader; -import eu.copernik.xml.factory.XmlFactories; +import org.apache.commons.xml.XmlFactories; XMLStreamReader reader = XmlFactories.newXMLInputFactory().createXMLStreamReader(inputStream); ``` @@ -83,7 +99,7 @@ XMLStreamReader reader = XmlFactories.newXMLInputFactory().createXMLStreamReader ```java import javax.xml.transform.stream.StreamSource; import javax.xml.transform.stream.StreamResult; -import eu.copernik.xml.factory.XmlFactories; +import org.apache.commons.xml.XmlFactories; XmlFactories.newTransformerFactory() .newTransformer(new StreamSource(stylesheet)) @@ -95,7 +111,7 @@ XmlFactories.newTransformerFactory() ```java import javax.xml.xpath.XPathConstants; import org.w3c.dom.NodeList; -import eu.copernik.xml.factory.XmlFactories; +import org.apache.commons.xml.XmlFactories; NodeList hits = (NodeList) XmlFactories.newXPathFactory() .newXPath() @@ -106,7 +122,7 @@ NodeList hits = (NodeList) XmlFactories.newXPathFactory() ```java import javax.xml.transform.stream.StreamSource; -import eu.copernik.xml.factory.XmlFactories; +import org.apache.commons.xml.XmlFactories; XmlFactories.newSchemaFactory() .newSchema(new StreamSource(xsdStream)) diff --git a/src/site/resources/profile.japicmp b/src/site/resources/profile.japicmp index 88dc53f..a33244d 100644 --- a/src/site/resources/profile.japicmp +++ b/src/site/resources/profile.japicmp @@ -1,2 +1,14 @@ -SPDX-FileCopyrightText: 2026 Piotr P. Karwasz <[email protected]> -SPDX-License-Identifier: Apache-2.0 +# Licensed to the Apache Software Foundation (ASF) under one or more +# contributor license agreements. See the NOTICE file distributed with +# this work for additional information regarding copyright ownership. +# The ASF licenses this file to You under the Apache License, Version 2.0 +# (the "License"); you may not use this file except in compliance with +# the License. You may obtain a copy of the License at +# +# https://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. diff --git a/src/site/site.xml b/src/site/site.xml new file mode 100644 index 0000000..0e5d775 --- /dev/null +++ b/src/site/site.xml @@ -0,0 +1,29 @@ +<?xml version="1.0" encoding="UTF-8"?> +<!-- + Licensed to the Apache Software Foundation (ASF) under one or more + contributor license agreements. See the NOTICE file distributed with + this work for additional information regarding copyright ownership. + The ASF licenses this file to You under the Apache License, Version 2.0 + (the "License"); you may not use this file except in compliance with + the License. You may obtain a copy of the License at + + https://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + --> +<project name="Apache Commons XML"> + <body> + <menu name="Apache Commons XML"> + <item name="Overview" href="/index.html"/> + <item name="Javadoc" href="/apidocs/index.html"/> + <item name="Security" href="/security.html"/> + <item name="Issue Tracking" href="/issue-tracking.html"/> + <item name="Mailing Lists" href="/mail-lists.html"/> + </menu> + <menu ref="reports"/> + </body> +</project> diff --git a/src/test/java/eu/copernik/xml/factory/SchemaImportTest.java b/src/test/java/eu/copernik/xml/factory/SchemaImportTest.java deleted file mode 100644 index f11299a..0000000 --- a/src/test/java/eu/copernik/xml/factory/SchemaImportTest.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2026 Piotr P. Karwasz <[email protected]> - * SPDX-License-Identifier: Apache-2.0 - */ - -package eu.copernik.xml.factory; - -import org.junit.jupiter.api.Tag; -import org.junit.jupiter.api.Test; - -/** - * Checks whether {@code xs:import namespace="..." schemaLocation="included.xsd"} of a sibling schema in a different target namespace is resolved at compile - * time. The wrapper references an element defined only in the imported schema, so compilation cannot succeed unless the schemaLocation is fetched. - */ -@Tag("schema") -class SchemaImportTest { - - private static final String RESOURCE = "with-import.xsd"; - - @Test - void hardenedSchemaBlocks() { - AttackTestSupport.assertSchemaBlocks(AttackTestSupport.resourceSource(RESOURCE)); - } - - @Test - void unconfiguredSchemaCompiles() { - AttackTestSupport.assertPermissiveSchemaCompiles(AttackTestSupport.resourceSource(RESOURCE)); - } -} diff --git a/src/test/java/eu/copernik/xml/factory/SchemaIncludeTest.java b/src/test/java/eu/copernik/xml/factory/SchemaIncludeTest.java deleted file mode 100644 index de66232..0000000 --- a/src/test/java/eu/copernik/xml/factory/SchemaIncludeTest.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2026 Piotr P. Karwasz <[email protected]> - * SPDX-License-Identifier: Apache-2.0 - */ - -package eu.copernik.xml.factory; - -import org.junit.jupiter.api.Tag; -import org.junit.jupiter.api.Test; - -/** - * Checks whether {@code xs:include schemaLocation="included.xsd"} of a sibling schema sharing the wrapper's target namespace is resolved at compile time. The - * wrapper references an element defined only in the included schema, so compilation cannot succeed unless the schemaLocation is fetched. - */ -@Tag("schema") -class SchemaIncludeTest { - - private static final String RESOURCE = "with-include.xsd"; - - @Test - void hardenedSchemaBlocks() { - AttackTestSupport.assertSchemaBlocks(AttackTestSupport.resourceSource(RESOURCE)); - } - - @Test - void unconfiguredSchemaCompiles() { - AttackTestSupport.assertPermissiveSchemaCompiles(AttackTestSupport.resourceSource(RESOURCE)); - } -} diff --git a/src/test/java/eu/copernik/xml/factory/SchemaRedefineTest.java b/src/test/java/eu/copernik/xml/factory/SchemaRedefineTest.java deleted file mode 100644 index 9b5d201..0000000 --- a/src/test/java/eu/copernik/xml/factory/SchemaRedefineTest.java +++ /dev/null @@ -1,29 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2026 Piotr P. Karwasz <[email protected]> - * SPDX-License-Identifier: Apache-2.0 - */ - -package eu.copernik.xml.factory; - -import org.junit.jupiter.api.Tag; -import org.junit.jupiter.api.Test; - -/** - * Checks whether {@code xs:redefine schemaLocation="included.xsd"} that extends a complex type from a sibling schema is resolved at compile time. The wrapper - * cannot compile unless the redefined type is fetched from the sibling schema. - */ -@Tag("schema") -class SchemaRedefineTest { - - private static final String RESOURCE = "with-redefine.xsd"; - - @Test - void hardenedSchemaBlocks() { - AttackTestSupport.assertSchemaBlocks(AttackTestSupport.resourceSource(RESOURCE)); - } - - @Test - void unconfiguredSchemaCompiles() { - AttackTestSupport.assertPermissiveSchemaCompiles(AttackTestSupport.resourceSource(RESOURCE)); - } -} diff --git a/src/test/java/eu/copernik/xml/factory/TemplatesImportTest.java b/src/test/java/eu/copernik/xml/factory/TemplatesImportTest.java deleted file mode 100644 index e97103f..0000000 --- a/src/test/java/eu/copernik/xml/factory/TemplatesImportTest.java +++ /dev/null @@ -1,22 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2026 Piotr P. Karwasz <[email protected]> - * SPDX-License-Identifier: Apache-2.0 - */ - -package eu.copernik.xml.factory; - -import org.junit.jupiter.api.Tag; -import org.junit.jupiter.api.Test; - -/** - * Checks whether {@code xsl:import} of a sibling stylesheet is resolved at compile time. The wrapper imports a sibling that, if fetched, contributes a - * template emitting the leaked marker into the transform output. - */ -@Tag("trax") -class TemplatesImportTest { - - @Test - void hardenedTemplatesBlocks() { - AttackTestSupport.assertTemplatesBlocks(AttackTestSupport.resourceSource("with-import.xsl")); - } -} diff --git a/src/test/java/eu/copernik/xml/factory/TemplatesIncludeTest.java b/src/test/java/eu/copernik/xml/factory/TemplatesIncludeTest.java deleted file mode 100644 index cccf3ec..0000000 --- a/src/test/java/eu/copernik/xml/factory/TemplatesIncludeTest.java +++ /dev/null @@ -1,22 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2026 Piotr P. Karwasz <[email protected]> - * SPDX-License-Identifier: Apache-2.0 - */ - -package eu.copernik.xml.factory; - -import org.junit.jupiter.api.Tag; -import org.junit.jupiter.api.Test; - -/** - * Checks whether {@code xsl:include} of a sibling stylesheet is resolved at compile time. The wrapper includes a sibling that, if fetched, contributes a - * template emitting the leaked marker into the transform output. - */ -@Tag("trax") -class TemplatesIncludeTest { - - @Test - void hardenedTemplatesBlocks() { - AttackTestSupport.assertTemplatesBlocks(AttackTestSupport.resourceSource("with-include.xsl")); - } -} diff --git a/src/test/java/eu/copernik/xml/factory/TransformerDocumentTest.java b/src/test/java/eu/copernik/xml/factory/TransformerDocumentTest.java deleted file mode 100644 index 45fad0f..0000000 --- a/src/test/java/eu/copernik/xml/factory/TransformerDocumentTest.java +++ /dev/null @@ -1,22 +0,0 @@ -/* - * SPDX-FileCopyrightText: 2026 Piotr P. Karwasz <[email protected]> - * SPDX-License-Identifier: Apache-2.0 - */ - -package eu.copernik.xml.factory; - -import org.junit.jupiter.api.Tag; -import org.junit.jupiter.api.Test; - -/** - * Checks whether the XSLT {@code document()} function is resolved at transform time. Compilation succeeds (the function call is just XPath); the leak vector - * fires only when {@code Transformer.transform} is called and the function evaluates its URI argument. - */ -@Tag("trax") -class TransformerDocumentTest { - - @Test - void hardenedTransformerBlocks() { - AttackTestSupport.assertTemplatesBlocks(AttackTestSupport.resourceSource("with-document.xsl")); - } -} diff --git a/src/test/java/eu/copernik/xml/factory/AttackTestSupport.java b/src/test/java/org/apache/commons/xml/AttackTestSupport.java similarity index 99% rename from src/test/java/eu/copernik/xml/factory/AttackTestSupport.java rename to src/test/java/org/apache/commons/xml/AttackTestSupport.java index 37ce3cb..b02dc06 100644 --- a/src/test/java/eu/copernik/xml/factory/AttackTestSupport.java +++ b/src/test/java/org/apache/commons/xml/AttackTestSupport.java @@ -2,7 +2,7 @@ * SPDX-FileCopyrightText: 2026 Piotr P. Karwasz * SPDX-License-Identifier: Apache-2.0 */ -package eu.copernik.xml.factory; +package org.apache.commons.xml; import static org.junit.jupiter.api.Assertions.assertDoesNotThrow; import static org.junit.jupiter.api.Assertions.assertFalse; diff --git a/src/test/java/eu/copernik/xml/factory/BillionLaughsTest.java b/src/test/java/org/apache/commons/xml/BillionLaughsTest.java similarity index 92% rename from src/test/java/eu/copernik/xml/factory/BillionLaughsTest.java rename to src/test/java/org/apache/commons/xml/BillionLaughsTest.java index 51e8745..eb18e72 100644 --- a/src/test/java/eu/copernik/xml/factory/BillionLaughsTest.java +++ b/src/test/java/org/apache/commons/xml/BillionLaughsTest.java @@ -1,9 +1,21 @@ /* - * SPDX-FileCopyrightText: 2026 Piotr P. Karwasz <[email protected]> - * SPDX-License-Identifier: Apache-2.0 + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. */ -package eu.copernik.xml.factory; +package org.apache.commons.xml; import org.junit.jupiter.api.Assumptions; import org.junit.jupiter.api.Tag; diff --git a/src/test/java/eu/copernik/xml/factory/DoctypeOnlyTest.java b/src/test/java/org/apache/commons/xml/DoctypeOnlyTest.java similarity index 77% rename from src/test/java/eu/copernik/xml/factory/DoctypeOnlyTest.java rename to src/test/java/org/apache/commons/xml/DoctypeOnlyTest.java index fd93429..1c78212 100644 --- a/src/test/java/eu/copernik/xml/factory/DoctypeOnlyTest.java +++ b/src/test/java/org/apache/commons/xml/DoctypeOnlyTest.java @@ -1,9 +1,21 @@ /* - * SPDX-FileCopyrightText: 2026 Piotr P. Karwasz <[email protected]> - * SPDX-License-Identifier: Apache-2.0 + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. */ -package eu.copernik.xml.factory; +package org.apache.commons.xml; import org.junit.jupiter.api.Assumptions; import org.junit.jupiter.api.Tag; diff --git a/src/test/java/eu/copernik/xml/factory/ExternalDtdTest.java b/src/test/java/org/apache/commons/xml/ExternalDtdTest.java similarity index 84% rename from src/test/java/eu/copernik/xml/factory/ExternalDtdTest.java rename to src/test/java/org/apache/commons/xml/ExternalDtdTest.java index e334d29..da8184c 100644 --- a/src/test/java/eu/copernik/xml/factory/ExternalDtdTest.java +++ b/src/test/java/org/apache/commons/xml/ExternalDtdTest.java @@ -1,9 +1,21 @@ /* - * SPDX-FileCopyrightText: 2026 Piotr P. Karwasz <[email protected]> - * SPDX-License-Identifier: Apache-2.0 + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. */ -package eu.copernik.xml.factory; +package org.apache.commons.xml; import org.junit.jupiter.api.Assumptions; import org.junit.jupiter.api.Tag; diff --git a/src/test/java/eu/copernik/xml/factory/ExternalGeneralEntityTest.java b/src/test/java/org/apache/commons/xml/ExternalGeneralEntityTest.java similarity index 84% rename from src/test/java/eu/copernik/xml/factory/ExternalGeneralEntityTest.java rename to src/test/java/org/apache/commons/xml/ExternalGeneralEntityTest.java index e8a4aee..6bcb89e 100644 --- a/src/test/java/eu/copernik/xml/factory/ExternalGeneralEntityTest.java +++ b/src/test/java/org/apache/commons/xml/ExternalGeneralEntityTest.java @@ -1,9 +1,21 @@ /* - * SPDX-FileCopyrightText: 2026 Piotr P. Karwasz <[email protected]> - * SPDX-License-Identifier: Apache-2.0 + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. */ -package eu.copernik.xml.factory; +package org.apache.commons.xml; import org.junit.jupiter.api.Assumptions; import org.junit.jupiter.api.Tag; diff --git a/src/test/java/eu/copernik/xml/factory/ExternalParameterEntityTest.java b/src/test/java/org/apache/commons/xml/ExternalParameterEntityTest.java similarity index 91% rename from src/test/java/eu/copernik/xml/factory/ExternalParameterEntityTest.java rename to src/test/java/org/apache/commons/xml/ExternalParameterEntityTest.java index 45cfa78..4b9a0de 100644 --- a/src/test/java/eu/copernik/xml/factory/ExternalParameterEntityTest.java +++ b/src/test/java/org/apache/commons/xml/ExternalParameterEntityTest.java @@ -1,9 +1,21 @@ /* - * SPDX-FileCopyrightText: 2026 Piotr P. Karwasz <[email protected]> - * SPDX-License-Identifier: Apache-2.0 + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. */ -package eu.copernik.xml.factory; +package org.apache.commons.xml; import java.io.StringReader; import java.util.concurrent.atomic.AtomicBoolean; diff --git a/src/test/java/eu/copernik/xml/factory/NoDoctypeTest.java b/src/test/java/org/apache/commons/xml/NoDoctypeTest.java similarity index 71% rename from src/test/java/eu/copernik/xml/factory/NoDoctypeTest.java rename to src/test/java/org/apache/commons/xml/NoDoctypeTest.java index 9c0aa27..a6536e0 100644 --- a/src/test/java/eu/copernik/xml/factory/NoDoctypeTest.java +++ b/src/test/java/org/apache/commons/xml/NoDoctypeTest.java @@ -1,9 +1,21 @@ /* - * SPDX-FileCopyrightText: 2026 Piotr P. Karwasz <[email protected]> - * SPDX-License-Identifier: Apache-2.0 + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. */ -package eu.copernik.xml.factory; +package org.apache.commons.xml; import org.junit.jupiter.api.Tag; import org.junit.jupiter.api.Test; diff --git a/src/test/java/eu/copernik/xml/factory/SaxonXPathExternalCallsTest.java b/src/test/java/org/apache/commons/xml/SaxonXPathExternalCallsTest.java similarity index 86% rename from src/test/java/eu/copernik/xml/factory/SaxonXPathExternalCallsTest.java rename to src/test/java/org/apache/commons/xml/SaxonXPathExternalCallsTest.java index d76e475..aa6feac 100644 --- a/src/test/java/eu/copernik/xml/factory/SaxonXPathExternalCallsTest.java +++ b/src/test/java/org/apache/commons/xml/SaxonXPathExternalCallsTest.java @@ -1,9 +1,21 @@ /* - * SPDX-FileCopyrightText: 2026 Piotr P. Karwasz <[email protected]> - * SPDX-License-Identifier: Apache-2.0 + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. */ -package eu.copernik.xml.factory; +package org.apache.commons.xml; import static org.junit.jupiter.api.Assertions.assertFalse; import static org.junit.jupiter.api.Assertions.assertTrue; diff --git a/src/test/java/org/apache/commons/xml/SchemaImportTest.java b/src/test/java/org/apache/commons/xml/SchemaImportTest.java new file mode 100644 index 0000000..a75a739 --- /dev/null +++ b/src/test/java/org/apache/commons/xml/SchemaImportTest.java @@ -0,0 +1,41 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.commons.xml; + +import org.junit.jupiter.api.Tag; +import org.junit.jupiter.api.Test; + +/** + * Checks whether {@code xs:import namespace="..." schemaLocation="included.xsd"} of a sibling schema in a different target namespace is resolved at compile + * time. The wrapper references an element defined only in the imported schema, so compilation cannot succeed unless the schemaLocation is fetched. + */ +@Tag("schema") +class SchemaImportTest { + + private static final String RESOURCE = "with-import.xsd"; + + @Test + void hardenedSchemaBlocks() { + AttackTestSupport.assertSchemaBlocks(AttackTestSupport.resourceSource(RESOURCE)); + } + + @Test + void unconfiguredSchemaCompiles() { + AttackTestSupport.assertPermissiveSchemaCompiles(AttackTestSupport.resourceSource(RESOURCE)); + } +} diff --git a/src/test/java/org/apache/commons/xml/SchemaIncludeTest.java b/src/test/java/org/apache/commons/xml/SchemaIncludeTest.java new file mode 100644 index 0000000..2bc358f --- /dev/null +++ b/src/test/java/org/apache/commons/xml/SchemaIncludeTest.java @@ -0,0 +1,41 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.commons.xml; + +import org.junit.jupiter.api.Tag; +import org.junit.jupiter.api.Test; + +/** + * Checks whether {@code xs:include schemaLocation="included.xsd"} of a sibling schema sharing the wrapper's target namespace is resolved at compile time. The + * wrapper references an element defined only in the included schema, so compilation cannot succeed unless the schemaLocation is fetched. + */ +@Tag("schema") +class SchemaIncludeTest { + + private static final String RESOURCE = "with-include.xsd"; + + @Test + void hardenedSchemaBlocks() { + AttackTestSupport.assertSchemaBlocks(AttackTestSupport.resourceSource(RESOURCE)); + } + + @Test + void unconfiguredSchemaCompiles() { + AttackTestSupport.assertPermissiveSchemaCompiles(AttackTestSupport.resourceSource(RESOURCE)); + } +} diff --git a/src/test/java/org/apache/commons/xml/SchemaRedefineTest.java b/src/test/java/org/apache/commons/xml/SchemaRedefineTest.java new file mode 100644 index 0000000..f76858e --- /dev/null +++ b/src/test/java/org/apache/commons/xml/SchemaRedefineTest.java @@ -0,0 +1,41 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.commons.xml; + +import org.junit.jupiter.api.Tag; +import org.junit.jupiter.api.Test; + +/** + * Checks whether {@code xs:redefine schemaLocation="included.xsd"} that extends a complex type from a sibling schema is resolved at compile time. The wrapper + * cannot compile unless the redefined type is fetched from the sibling schema. + */ +@Tag("schema") +class SchemaRedefineTest { + + private static final String RESOURCE = "with-redefine.xsd"; + + @Test + void hardenedSchemaBlocks() { + AttackTestSupport.assertSchemaBlocks(AttackTestSupport.resourceSource(RESOURCE)); + } + + @Test + void unconfiguredSchemaCompiles() { + AttackTestSupport.assertPermissiveSchemaCompiles(AttackTestSupport.resourceSource(RESOURCE)); + } +} diff --git a/src/test/java/org/apache/commons/xml/TemplatesImportTest.java b/src/test/java/org/apache/commons/xml/TemplatesImportTest.java new file mode 100644 index 0000000..28d5395 --- /dev/null +++ b/src/test/java/org/apache/commons/xml/TemplatesImportTest.java @@ -0,0 +1,34 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.commons.xml; + +import org.junit.jupiter.api.Tag; +import org.junit.jupiter.api.Test; + +/** + * Checks whether {@code xsl:import} of a sibling stylesheet is resolved at compile time. The wrapper imports a sibling that, if fetched, contributes a + * template emitting the leaked marker into the transform output. + */ +@Tag("trax") +class TemplatesImportTest { + + @Test + void hardenedTemplatesBlocks() { + AttackTestSupport.assertTemplatesBlocks(AttackTestSupport.resourceSource("with-import.xsl")); + } +} diff --git a/src/test/java/org/apache/commons/xml/TemplatesIncludeTest.java b/src/test/java/org/apache/commons/xml/TemplatesIncludeTest.java new file mode 100644 index 0000000..425110c --- /dev/null +++ b/src/test/java/org/apache/commons/xml/TemplatesIncludeTest.java @@ -0,0 +1,34 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.commons.xml; + +import org.junit.jupiter.api.Tag; +import org.junit.jupiter.api.Test; + +/** + * Checks whether {@code xsl:include} of a sibling stylesheet is resolved at compile time. The wrapper includes a sibling that, if fetched, contributes a + * template emitting the leaked marker into the transform output. + */ +@Tag("trax") +class TemplatesIncludeTest { + + @Test + void hardenedTemplatesBlocks() { + AttackTestSupport.assertTemplatesBlocks(AttackTestSupport.resourceSource("with-include.xsl")); + } +} diff --git a/src/test/java/org/apache/commons/xml/TransformerDocumentTest.java b/src/test/java/org/apache/commons/xml/TransformerDocumentTest.java new file mode 100644 index 0000000..549f789 --- /dev/null +++ b/src/test/java/org/apache/commons/xml/TransformerDocumentTest.java @@ -0,0 +1,34 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package org.apache.commons.xml; + +import org.junit.jupiter.api.Tag; +import org.junit.jupiter.api.Test; + +/** + * Checks whether the XSLT {@code document()} function is resolved at transform time. Compilation succeeds (the function call is just XPath); the leak vector + * fires only when {@code Transformer.transform} is called and the function evaluates its URI argument. + */ +@Tag("trax") +class TransformerDocumentTest { + + @Test + void hardenedTransformerBlocks() { + AttackTestSupport.assertTemplatesBlocks(AttackTestSupport.resourceSource("with-document.xsl")); + } +} diff --git a/src/test/java/eu/copernik/xml/factory/UnsupportedXmlImplementationTest.java b/src/test/java/org/apache/commons/xml/UnsupportedXmlImplementationTest.java similarity index 68% rename from src/test/java/eu/copernik/xml/factory/UnsupportedXmlImplementationTest.java rename to src/test/java/org/apache/commons/xml/UnsupportedXmlImplementationTest.java index 93cb2a4..c0f304a 100644 --- a/src/test/java/eu/copernik/xml/factory/UnsupportedXmlImplementationTest.java +++ b/src/test/java/org/apache/commons/xml/UnsupportedXmlImplementationTest.java @@ -1,9 +1,21 @@ /* - * SPDX-FileCopyrightText: 2026 Piotr P. Karwasz <[email protected]> - * SPDX-License-Identifier: Apache-2.0 + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. */ -package eu.copernik.xml.factory; +package org.apache.commons.xml; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertThrows; diff --git a/src/test/java/eu/copernik/xml/factory/XmlFactoriesTest.java b/src/test/java/org/apache/commons/xml/XmlFactoriesTest.java similarity index 82% rename from src/test/java/eu/copernik/xml/factory/XmlFactoriesTest.java rename to src/test/java/org/apache/commons/xml/XmlFactoriesTest.java index b2685cd..8665e1c 100644 --- a/src/test/java/eu/copernik/xml/factory/XmlFactoriesTest.java +++ b/src/test/java/org/apache/commons/xml/XmlFactoriesTest.java @@ -1,9 +1,21 @@ /* - * SPDX-FileCopyrightText: 2026 Piotr P. Karwasz <[email protected]> - * SPDX-License-Identifier: Apache-2.0 + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. */ -package eu.copernik.xml.factory; +package org.apache.commons.xml; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertFalse; diff --git a/src/test/java11/eu/copernik/xml/factory/DescriptorIT.java b/src/test/java11/org/apache/commons/xml/DescriptorIT.java similarity index 88% rename from src/test/java11/eu/copernik/xml/factory/DescriptorIT.java rename to src/test/java11/org/apache/commons/xml/DescriptorIT.java index e242c18..f275018 100644 --- a/src/test/java11/eu/copernik/xml/factory/DescriptorIT.java +++ b/src/test/java11/org/apache/commons/xml/DescriptorIT.java @@ -1,9 +1,21 @@ /* - * SPDX-FileCopyrightText: 2026 Piotr P. Karwasz <[email protected]> - * SPDX-License-Identifier: Apache-2.0 + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * https://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. */ -package eu.copernik.xml.factory; +package org.apache.commons.xml; import static org.junit.jupiter.api.Assertions.assertNotNull; import static org.junit.jupiter.api.Assertions.assertTrue;
