Skip to content

Commit e39142b

Browse files
authored
[MNG-7830] Switch from plexus-xml to stax / woodstox (#1185)
1 parent 00e1793 commit e39142b

File tree

88 files changed

+3035
-1104
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

88 files changed

+3035
-1104
lines changed
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
Copyright (c) 2008 FasterXML LLC [email protected]
2+
3+
This source code is licensed under standard BSD license, which is compatible with all Free and Open Software (OSS) licenses.

Diff for: apache-maven/src/test/java/org/apache/maven/settings/GlobalSettingsTest.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@
2323
import java.nio.file.Files;
2424

2525
import org.apache.maven.api.settings.InputSource;
26-
import org.apache.maven.settings.v4.SettingsXpp3ReaderEx;
26+
import org.apache.maven.settings.v4.SettingsStaxReader;
2727
import org.junit.jupiter.api.Test;
2828

2929
import static org.junit.jupiter.api.Assertions.assertTrue;
@@ -43,7 +43,7 @@ void testValidGlobalSettings() throws Exception {
4343
assertTrue(globalSettingsFile.isFile(), globalSettingsFile.getAbsolutePath());
4444

4545
try (InputStream is = Files.newInputStream(globalSettingsFile.toPath())) {
46-
new SettingsXpp3ReaderEx().read(is, true, new InputSource(globalSettingsFile.getAbsolutePath()));
46+
new SettingsStaxReader().read(is, true, new InputSource(globalSettingsFile.getAbsolutePath()));
4747
}
4848
}
4949
}

Diff for: maven-bom/pom.xml

+5
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,11 @@ under the License.
147147
<artifactId>maven-slf4j-wrapper</artifactId>
148148
<version>${project.version}</version>
149149
</dependency>
150+
<dependency>
151+
<groupId>org.apache.maven</groupId>
152+
<artifactId>maven-xml-impl</artifactId>
153+
<version>${project.version}</version>
154+
</dependency>
150155
</dependencies>
151156
</dependencyManagement>
152157

Diff for: maven-compat/src/main/java/org/apache/maven/artifact/repository/metadata/AbstractRepositoryMetadata.java

+14-17
Original file line numberDiff line numberDiff line change
@@ -18,20 +18,20 @@
1818
*/
1919
package org.apache.maven.artifact.repository.metadata;
2020

21+
import javax.xml.stream.XMLStreamException;
22+
2123
import java.io.File;
2224
import java.io.IOException;
23-
import java.io.Reader;
24-
import java.io.Writer;
25+
import java.io.InputStream;
26+
import java.io.OutputStream;
27+
import java.nio.file.Files;
2528

2629
import org.apache.maven.artifact.Artifact;
2730
import org.apache.maven.artifact.metadata.ArtifactMetadata;
2831
import org.apache.maven.artifact.repository.ArtifactRepository;
2932
import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
30-
import org.apache.maven.artifact.repository.metadata.io.xpp3.MetadataXpp3Reader;
31-
import org.apache.maven.artifact.repository.metadata.io.xpp3.MetadataXpp3Writer;
32-
import org.codehaus.plexus.util.ReaderFactory;
33-
import org.codehaus.plexus.util.WriterFactory;
34-
import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
33+
import org.apache.maven.artifact.repository.metadata.io.MetadataStaxReader;
34+
import org.apache.maven.artifact.repository.metadata.io.MetadataStaxWriter;
3535

3636
/**
3737
* Shared methods of the repository metadata handling.
@@ -59,15 +59,13 @@ public void storeInLocalRepository(ArtifactRepository localRepository, ArtifactR
5959
throws RepositoryMetadataStoreException {
6060
try {
6161
updateRepositoryMetadata(localRepository, remoteRepository);
62-
} catch (IOException | XmlPullParserException e) {
62+
} catch (IOException | XMLStreamException e) {
6363
throw new RepositoryMetadataStoreException("Error updating group repository metadata", e);
6464
}
6565
}
6666

6767
protected void updateRepositoryMetadata(ArtifactRepository localRepository, ArtifactRepository remoteRepository)
68-
throws IOException, XmlPullParserException {
69-
MetadataXpp3Reader mappingReader = new MetadataXpp3Reader();
70-
68+
throws IOException, XMLStreamException {
7169
Metadata metadata = null;
7270

7371
File metadataFile = new File(
@@ -85,8 +83,8 @@ protected void updateRepositoryMetadata(ArtifactRepository localRepository, Arti
8583
// to delete on exit
8684
}
8785
} else if (metadataFile.exists()) {
88-
try (Reader reader = ReaderFactory.newXmlReader(metadataFile)) {
89-
metadata = mappingReader.read(reader, false);
86+
try (InputStream input = Files.newInputStream(metadataFile.toPath())) {
87+
metadata = new Metadata(new MetadataStaxReader().read(input, false));
9088
}
9189
}
9290

@@ -110,10 +108,9 @@ protected void updateRepositoryMetadata(ArtifactRepository localRepository, Arti
110108

111109
if (changed || !metadataFile.exists()) {
112110
metadataFile.getParentFile().mkdirs();
113-
try (Writer writer = WriterFactory.newXmlWriter(metadataFile)) {
114-
MetadataXpp3Writer mappingWriter = new MetadataXpp3Writer();
115-
116-
mappingWriter.write(writer, metadata);
111+
try (OutputStream output = Files.newOutputStream(metadataFile.toPath())) {
112+
MetadataStaxWriter mappingWriter = new MetadataStaxWriter();
113+
mappingWriter.write(output, metadata.getDelegate());
117114
}
118115
} else {
119116
metadataFile.setLastModified(System.currentTimeMillis());

Diff for: maven-compat/src/main/java/org/apache/maven/artifact/repository/metadata/DefaultRepositoryMetadataManager.java

+7-9
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import javax.inject.Inject;
2222
import javax.inject.Named;
2323
import javax.inject.Singleton;
24+
import javax.xml.stream.XMLStreamException;
2425

2526
import java.io.File;
2627
import java.io.FileNotFoundException;
@@ -38,14 +39,13 @@
3839
import org.apache.maven.artifact.repository.ArtifactRepositoryPolicy;
3940
import org.apache.maven.artifact.repository.DefaultRepositoryRequest;
4041
import org.apache.maven.artifact.repository.RepositoryRequest;
41-
import org.apache.maven.artifact.repository.metadata.io.xpp3.MetadataXpp3Reader;
42-
import org.apache.maven.artifact.repository.metadata.io.xpp3.MetadataXpp3Writer;
42+
import org.apache.maven.artifact.repository.metadata.io.MetadataStaxReader;
43+
import org.apache.maven.artifact.repository.metadata.io.MetadataStaxWriter;
4344
import org.apache.maven.repository.legacy.UpdateCheckManager;
4445
import org.apache.maven.repository.legacy.WagonManager;
4546
import org.apache.maven.wagon.ResourceDoesNotExistException;
4647
import org.apache.maven.wagon.TransferFailedException;
4748
import org.codehaus.plexus.logging.AbstractLogEnabled;
48-
import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
4949

5050
/**
5151
* @author Jason van Zyl
@@ -270,13 +270,11 @@ private boolean loadMetadata(
270270
*/
271271
protected Metadata readMetadata(File mappingFile) throws RepositoryMetadataReadException {
272272

273-
MetadataXpp3Reader mappingReader = new MetadataXpp3Reader();
274273
try (InputStream in = Files.newInputStream(mappingFile.toPath())) {
275-
Metadata result = mappingReader.read(in, false);
276-
return result;
274+
return new Metadata(new MetadataStaxReader().read(in, false));
277275
} catch (FileNotFoundException e) {
278276
throw new RepositoryMetadataReadException("Cannot read metadata from '" + mappingFile + "'", e);
279-
} catch (IOException | XmlPullParserException e) {
277+
} catch (IOException | XMLStreamException e) {
280278
throw new RepositoryMetadataReadException(
281279
"Cannot read metadata from '" + mappingFile + "': " + e.getMessage(), e);
282280
}
@@ -311,8 +309,8 @@ private void fixTimestamp(File metadataFile, Metadata metadata, Metadata referen
311309
getLogger().debug("Repairing metadata in " + metadataFile);
312310

313311
try (OutputStream out = Files.newOutputStream(metadataFile.toPath())) {
314-
new MetadataXpp3Writer().write(out, metadata);
315-
} catch (IOException e) {
312+
new MetadataStaxWriter().write(out, metadata.getDelegate());
313+
} catch (IOException | XMLStreamException e) {
316314
String msg = "Could not write fixed metadata to " + metadataFile + ": " + e.getMessage();
317315
if (getLogger().isDebugEnabled()) {
318316
getLogger().warn(msg, e);

Diff for: maven-compat/src/main/java/org/apache/maven/project/interpolation/AbstractStringBasedModelInterpolator.java

+9-9
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
package org.apache.maven.project.interpolation;
2020

2121
import javax.inject.Inject;
22+
import javax.xml.stream.XMLStreamException;
2223

2324
import java.io.File;
2425
import java.io.IOException;
@@ -32,8 +33,8 @@
3233
import java.util.Properties;
3334

3435
import org.apache.maven.model.Model;
35-
import org.apache.maven.model.io.xpp3.MavenXpp3Reader;
36-
import org.apache.maven.model.io.xpp3.MavenXpp3Writer;
36+
import org.apache.maven.model.v4.MavenStaxReader;
37+
import org.apache.maven.model.v4.MavenStaxWriter;
3738
import org.apache.maven.project.DefaultProjectBuilderConfiguration;
3839
import org.apache.maven.project.ProjectBuilderConfiguration;
3940
import org.apache.maven.project.path.PathTranslator;
@@ -52,7 +53,6 @@
5253
import org.codehaus.plexus.logging.Logger;
5354
import org.codehaus.plexus.personality.plexus.lifecycle.phase.Initializable;
5455
import org.codehaus.plexus.personality.plexus.lifecycle.phase.InitializationException;
55-
import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
5656

5757
/**
5858
* Use a regular expression search to find and resolve expressions within the POM.
@@ -130,10 +130,10 @@ public Model interpolate(Model model, File projectDir, ProjectBuilderConfigurati
130130
throws ModelInterpolationException {
131131
StringWriter sWriter = new StringWriter(1024);
132132

133-
MavenXpp3Writer writer = new MavenXpp3Writer();
133+
MavenStaxWriter writer = new MavenStaxWriter();
134134
try {
135-
writer.write(sWriter, model);
136-
} catch (IOException e) {
135+
writer.write(sWriter, model.getDelegate());
136+
} catch (IOException | XMLStreamException e) {
137137
throw new ModelInterpolationException("Cannot serialize project model for interpolation.", e);
138138
}
139139

@@ -142,10 +142,10 @@ public Model interpolate(Model model, File projectDir, ProjectBuilderConfigurati
142142

143143
StringReader sReader = new StringReader(serializedModel);
144144

145-
MavenXpp3Reader modelReader = new MavenXpp3Reader();
145+
MavenStaxReader modelReader = new MavenStaxReader();
146146
try {
147-
model = modelReader.read(sReader);
148-
} catch (IOException | XmlPullParserException e) {
147+
model = new Model(modelReader.read(sReader));
148+
} catch (XMLStreamException e) {
149149
throw new ModelInterpolationException(
150150
"Cannot read project model from interpolating filter of serialized version.", e);
151151
}

Diff for: maven-compat/src/main/java/org/apache/maven/toolchain/DefaultToolchainsBuilder.java

+5-5
Original file line numberDiff line numberDiff line change
@@ -22,11 +22,11 @@
2222
import javax.inject.Singleton;
2323

2424
import java.io.File;
25-
import java.io.Reader;
25+
import java.io.InputStream;
26+
import java.nio.file.Files;
2627

2728
import org.apache.maven.toolchain.model.PersistedToolchains;
28-
import org.apache.maven.toolchain.v4.MavenToolchainsXpp3Reader;
29-
import org.codehaus.plexus.util.ReaderFactory;
29+
import org.apache.maven.toolchain.v4.MavenToolchainsStaxReader;
3030
import org.slf4j.Logger;
3131
import org.slf4j.LoggerFactory;
3232

@@ -44,8 +44,8 @@ public PersistedToolchains build(File userToolchainsFile) throws MisconfiguredTo
4444
PersistedToolchains toolchains = null;
4545

4646
if (userToolchainsFile != null && userToolchainsFile.isFile()) {
47-
try (Reader in = ReaderFactory.newXmlReader(userToolchainsFile)) {
48-
toolchains = new PersistedToolchains(new MavenToolchainsXpp3Reader().read(in));
47+
try (InputStream in = Files.newInputStream(userToolchainsFile.toPath())) {
48+
toolchains = new PersistedToolchains(new MavenToolchainsStaxReader().read(in));
4949
} catch (Exception e) {
5050
throw new MisconfiguredToolchainException(
5151
"Cannot read toolchains file at " + userToolchainsFile.getAbsolutePath(), e);

Diff for: maven-core/src/main/java/org/apache/maven/artifact/repository/metadata/io/DefaultMetadataReader.java

+15-8
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,7 @@
2020

2121
import javax.inject.Named;
2222
import javax.inject.Singleton;
23+
import javax.xml.stream.XMLStreamException;
2324

2425
import java.io.File;
2526
import java.io.IOException;
@@ -29,9 +30,7 @@
2930
import java.util.Objects;
3031

3132
import org.apache.maven.artifact.repository.metadata.Metadata;
32-
import org.apache.maven.artifact.repository.metadata.io.xpp3.MetadataXpp3Reader;
3333
import org.codehaus.plexus.util.ReaderFactory;
34-
import org.codehaus.plexus.util.xml.pull.XmlPullParserException;
3534

3635
/**
3736
* Handles deserialization of metadata from some kind of textual format like XML.
@@ -52,19 +51,27 @@ public Metadata read(Reader input, Map<String, ?> options) throws IOException {
5251
Objects.requireNonNull(input, "input cannot be null");
5352

5453
try (Reader in = input) {
55-
return new MetadataXpp3Reader().read(in, isStrict(options));
56-
} catch (XmlPullParserException e) {
57-
throw new MetadataParseException(e.getMessage(), e.getLineNumber(), e.getColumnNumber(), e);
54+
return new Metadata(new MetadataStaxReader().read(in, isStrict(options)));
55+
} catch (XMLStreamException e) {
56+
throw new MetadataParseException(
57+
e.getMessage(),
58+
e.getLocation().getLineNumber(),
59+
e.getLocation().getColumnNumber(),
60+
e);
5861
}
5962
}
6063

6164
public Metadata read(InputStream input, Map<String, ?> options) throws IOException {
6265
Objects.requireNonNull(input, "input cannot be null");
6366

6467
try (InputStream in = input) {
65-
return new MetadataXpp3Reader().read(in, isStrict(options));
66-
} catch (XmlPullParserException e) {
67-
throw new MetadataParseException(e.getMessage(), e.getLineNumber(), e.getColumnNumber(), e);
68+
return new Metadata(new MetadataStaxReader().read(in, isStrict(options)));
69+
} catch (XMLStreamException e) {
70+
throw new MetadataParseException(
71+
e.getMessage(),
72+
e.getLocation().getLineNumber(),
73+
e.getLocation().getColumnNumber(),
74+
e);
6875
}
6976
}
7077

Diff for: maven-core/src/main/java/org/apache/maven/internal/aether/DefaultRepositorySystemSessionFactory.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -236,7 +236,7 @@ public DefaultRepositorySystemSession newRepositorySession(MavenExecutionRequest
236236
authSelector.add(server.getId(), authBuilder.build());
237237

238238
if (server.getConfiguration() != null) {
239-
XmlNode dom = ((org.codehaus.plexus.util.xml.Xpp3Dom) server.getConfiguration()).getDom();
239+
XmlNode dom = server.getDelegate().getConfiguration();
240240
List<XmlNode> children = dom.getChildren().stream()
241241
.filter(c -> !"wagonProvider".equals(c.getName()))
242242
.collect(Collectors.toList());

Diff for: maven-core/src/main/java/org/apache/maven/internal/impl/DefaultModelXmlFactory.java

+18-14
Original file line numberDiff line numberDiff line change
@@ -37,9 +37,8 @@
3737
import org.apache.maven.api.services.xml.XmlReaderRequest;
3838
import org.apache.maven.api.services.xml.XmlWriterException;
3939
import org.apache.maven.api.services.xml.XmlWriterRequest;
40-
import org.apache.maven.model.v4.MavenXpp3ReaderEx;
41-
import org.apache.maven.model.v4.MavenXpp3WriterEx;
42-
import org.codehaus.plexus.util.xml.XmlStreamReader;
40+
import org.apache.maven.model.v4.MavenStaxReader;
41+
import org.apache.maven.model.v4.MavenStaxWriter;
4342

4443
import static org.apache.maven.internal.impl.Utils.nonNull;
4544

@@ -61,16 +60,21 @@ public Model read(@Nonnull XmlReaderRequest request) throws XmlReaderException {
6160
if (request.getModelId() != null || request.getLocation() != null) {
6261
source = new InputSource(request.getModelId(), request.getLocation());
6362
}
64-
MavenXpp3ReaderEx xml = new MavenXpp3ReaderEx();
63+
MavenStaxReader xml = new MavenStaxReader();
6564
xml.setAddDefaultEntities(request.isAddDefaultEntities());
66-
if (path != null) {
67-
reader = new XmlStreamReader(path.toFile());
68-
} else if (url != null) {
69-
reader = new XmlStreamReader(url);
70-
} else if (inputStream != null) {
71-
reader = new XmlStreamReader(inputStream);
65+
if (inputStream != null) {
66+
return xml.read(inputStream, request.isStrict(), source);
67+
} else if (reader != null) {
68+
return xml.read(reader, request.isStrict(), source);
69+
} else if (path != null) {
70+
try (InputStream is = Files.newInputStream(path)) {
71+
return xml.read(is, request.isStrict(), source);
72+
}
73+
} else {
74+
try (InputStream is = url.openStream()) {
75+
return xml.read(is, request.isStrict(), source);
76+
}
7277
}
73-
return xml.read(reader, request.isStrict(), source);
7478
} catch (Exception e) {
7579
throw new XmlReaderException("Unable to read model", e);
7680
}
@@ -88,12 +92,12 @@ public void write(XmlWriterRequest<Model> request) throws XmlWriterException {
8892
}
8993
try {
9094
if (writer != null) {
91-
new MavenXpp3WriterEx().write(writer, content);
95+
new MavenStaxWriter().write(writer, content);
9296
} else if (outputStream != null) {
93-
new MavenXpp3WriterEx().write(outputStream, content);
97+
new MavenStaxWriter().write(outputStream, content);
9498
} else {
9599
try (OutputStream os = Files.newOutputStream(path)) {
96-
new MavenXpp3WriterEx().write(outputStream, content);
100+
new MavenStaxWriter().write(outputStream, content);
97101
}
98102
}
99103
} catch (Exception e) {

Diff for: maven-core/src/main/java/org/apache/maven/internal/impl/DefaultSettingsXmlFactory.java

+5-5
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,8 @@
3535
import org.apache.maven.api.services.xml.XmlWriterRequest;
3636
import org.apache.maven.api.settings.InputSource;
3737
import org.apache.maven.api.settings.Settings;
38-
import org.apache.maven.settings.v4.SettingsXpp3ReaderEx;
39-
import org.apache.maven.settings.v4.SettingsXpp3Writer;
38+
import org.apache.maven.settings.v4.SettingsStaxReader;
39+
import org.apache.maven.settings.v4.SettingsStaxWriter;
4040

4141
@Named
4242
@Singleton
@@ -54,7 +54,7 @@ public Settings read(@Nonnull XmlReaderRequest request) throws XmlReaderExceptio
5454
if (request.getModelId() != null || request.getLocation() != null) {
5555
source = new InputSource(request.getLocation());
5656
}
57-
SettingsXpp3ReaderEx xml = new SettingsXpp3ReaderEx();
57+
SettingsStaxReader xml = new SettingsStaxReader();
5858
xml.setAddDefaultEntities(request.isAddDefaultEntities());
5959
if (reader != null) {
6060
return xml.read(reader, request.isStrict(), source);
@@ -77,9 +77,9 @@ public void write(XmlWriterRequest<Settings> request) throws XmlWriterException
7777
}
7878
try {
7979
if (writer != null) {
80-
new SettingsXpp3Writer().write(writer, content);
80+
new SettingsStaxWriter().write(writer, content);
8181
} else {
82-
new SettingsXpp3Writer().write(outputStream, content);
82+
new SettingsStaxWriter().write(outputStream, content);
8383
}
8484
} catch (Exception e) {
8585
throw new XmlWriterException("Unable to write settings", e);

0 commit comments

Comments
 (0)