Skip to content

Commit c8fe7a7

Browse files
committed
fix comment. no hardcode
1 parent c5bbb38 commit c8fe7a7

File tree

3 files changed

+57
-55
lines changed

3 files changed

+57
-55
lines changed

impl/maven-support/src/test/java/org/apache/maven/model/v4/MavenStaxReaderNamespaceTest.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@
2121
import javax.xml.stream.XMLStreamException;
2222

2323
import java.io.StringReader;
24+
import java.util.Locale;
2425

2526
import org.apache.maven.api.model.InputSource;
2627
import org.apache.maven.api.model.Model;
@@ -105,6 +106,6 @@ void rejectsUnexpectedPomNamespace() {
105106
XMLStreamException ex = assertThrows(
106107
XMLStreamException.class, () -> reader.read(new StringReader(POM_BAD_NS), true, NO_INPUT_SOURCE));
107108
// sanity check: message mentions unrecognized namespace
108-
assertTrue(ex.getMessage().toLowerCase().contains("unrecognized pom namespace"));
109+
assertTrue(ex.getMessage().toLowerCase(Locale.ROOT).contains("unrecognized pom namespace"));
109110
}
110111
}

impl/maven-support/src/test/java/org/apache/maven/model/v4/MetadataStaxReaderNamespaceTest.java

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -61,21 +61,21 @@ class MetadataStaxReaderNamespaceTest {
6161
@Test
6262
void acceptsMetadata110() throws Exception {
6363
MetadataStaxReader reader = new MetadataStaxReader();
64-
Metadata md = reader.read(new StringReader(META_110), /*strict*/ true);
65-
assertNotNull(md);
66-
assertEquals("com.acme", md.getGroupId());
67-
assertEquals("demo", md.getArtifactId());
68-
assertNotNull(md.getVersioning());
69-
assertEquals("1.0", md.getVersioning().getLatest());
64+
Metadata metadata = reader.read(new StringReader(META_110), /*strict*/ true);
65+
assertNotNull(metadata);
66+
assertEquals("com.acme", metadata.getGroupId());
67+
assertEquals("demo", metadata.getArtifactId());
68+
assertNotNull(metadata.getVersioning());
69+
assertEquals("1.0", metadata.getVersioning().getLatest());
7070
}
7171

7272
@Test
7373
void acceptsMetadataWithoutNamespace() throws Exception {
7474
MetadataStaxReader reader = new MetadataStaxReader();
75-
Metadata md = reader.read(new StringReader(META_NO_NS), true);
76-
assertNotNull(md);
77-
assertEquals("com.acme", md.getGroupId());
78-
assertEquals("demo", md.getArtifactId());
75+
Metadata metadata = reader.read(new StringReader(META_NO_NS), true);
76+
assertNotNull(metadata);
77+
assertEquals("com.acme", metadata.getGroupId());
78+
assertEquals("demo", metadata.getArtifactId());
7979
}
8080

8181
@Test

src/mdo/reader-stax.vm

Lines changed: 45 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -246,21 +246,22 @@ public class ${className} {
246246
#end
247247
} //-- ${root.name} read(InputStream, boolean)
248248

249-
/**
250-
* Method read.
251-
*
252-
* @param parser a parser object.
253-
* @param strict a strict object.
254-
* @throws XMLStreamException XMLStreamException if any.
255-
* @return ${root.name}
256-
*/
249+
/**
250+
* Method read.
251+
*
252+
* @param parser a parser object.
253+
* @param strict a strict object.
254+
* @throws XMLStreamException XMLStreamException if
255+
* any.
256+
* @return ${root.name}
257+
*/
257258
#if ( $locationTracking )
258-
public ${root.name} read(XMLStreamReader parser, boolean strict, InputSource inputSrc) throws XMLStreamException {
259+
public ${root.name} read(XMLStreamReader parser, boolean strict, InputSource inputSrc) throws XMLStreamException {
259260
#else
260-
public ${root.name} read(XMLStreamReader parser, boolean strict) throws XMLStreamException {
261+
public ${root.name} read(XMLStreamReader parser, boolean strict) throws XMLStreamException {
261262
#end
262263
#if ( $needXmlContext )
263-
Deque<Object> context = new ArrayDeque<>();
264+
Deque<Object> context = new ArrayDeque<>();
264265
#end
265266
$rootUcapName $rootLcapName = null;
266267
int eventType = parser.getEventType();
@@ -272,50 +273,50 @@ $rootUcapName $rootLcapName = null;
272273
} else if (parsed) {
273274
throw new XMLStreamException("Duplicated tag: '${rootTag}'", parser.getLocation(), null);
274275
}
275-
276-
// Enforce root namespace per model (strict mode).
277-
String rootNs = parser.getNamespaceURI();
278-
boolean hasNs = rootNs != null && !rootNs.isEmpty();
279-
if (strict && hasNs) {
280-
if ("project".equals("${rootTag}")) {
281-
// Accept any official POM namespace version (e.g., 4.0.0, 4.1.0)
282-
if (!rootNs.startsWith("http://maven.apache.org/POM/")) {
283-
throw new XMLStreamException(
284-
"Unrecognized POM namespace '" + rootNs
285-
+ "'. Expected something like 'http://maven.apache.org/POM/4.x.y' or no namespace.",
286-
parser.getLocation(), null);
287-
}
288-
} else if ("metadata".equals("${rootTag}")) {
289-
// Accept official METADATA namespaces (e.g., 1.1.0)
290-
if (!rootNs.startsWith("http://maven.apache.org/METADATA/")) {
291-
throw new XMLStreamException(
292-
"Unrecognized METADATA namespace '" + rootNs
293-
+ "'. Expected something like 'http://maven.apache.org/METADATA/1.x.y' or no namespace.",
294-
parser.getLocation(), null);
295-
}
296-
} else {
297-
// Other models: do not enforce at root level.
298-
}
276+
// Root namespace policy:
277+
// - POM ('project'): allow no namespace or any http://maven.apache.org/POM/<version>
278+
// - METADATA ('metadata'): allow no namespace or any http://maven.apache.org/METADATA/<version>
279+
// - Other readers: do not enforce root namespace here (child checks still apply when strict)
280+
if (strict) {
281+
final String rootNs = parser.getNamespaceURI();
282+
final boolean hasNs = rootNs != null && !rootNs.isEmpty();
283+
284+
if ("project".equals("${rootTag}")) {
285+
if (hasNs && !rootNs.startsWith("http://maven.apache.org/POM/")) {
286+
throw new XMLStreamException("Unrecognized POM namespace '" + rootNs + "'. Expected something like 'http://maven.apache.org/POM/4.x.y' or no namespace.",
287+
parser.getLocation(), null);
288+
}
289+
} else if ("metadata".equals("${rootTag}")) {
290+
if (hasNs && !rootNs.startsWith("http://maven.apache.org/METADATA/")) {
291+
throw new XMLStreamException("Unrecognized METADATA namespace '" + rootNs + "'. Expected something like 'http://maven.apache.org/METADATA/1.x.y' or no namespace.",
292+
parser.getLocation(), null);
293+
}
294+
} else {
295+
// Other generated models (settings, lifecycles, extensions, plugin, toolchains, …):
296+
// no hard-coded enforcement at the root level.
297+
}
299298
}
300299

301-
#if ( $locationTracking )
302-
$rootLcapName = parse${rootUcapName}(parser, strict, rootNs, inputSrc);
303-
#elseif ( $needXmlContext )
304-
$rootLcapName = parse${rootUcapName}(parser, strict, rootNs, context);
305-
#else
306-
$rootLcapName = parse${rootUcapName}(parser, strict, rootNs);
307-
#end
300+
#if ( $locationTracking )
301+
$rootLcapName = parse${rootUcapName}(parser, strict, parser.getNamespaceURI(), inputSrc);
302+
#elseif ( $needXmlContext )
303+
$rootLcapName = parse${rootUcapName}(parser, strict, parser.getNamespaceURI(), context);
304+
#else
305+
$rootLcapName = parse${rootUcapName}(parser, strict, parser.getNamespaceURI());
306+
#end
308307
parsed = true;
309308
}
310309
eventType = parser.next();
311310
}
311+
312312
if (parsed) {
313313
return $rootLcapName;
314314
}
315-
throw new XMLStreamException("Expected root element '${rootTag}' but found no element at all: invalid XML document", parser.getLocation(), null);
315+
throw new XMLStreamException(
316+
"Expected root element '${rootTag}' but found no element at all: invalid XML document",
317+
parser.getLocation(), null);
316318
} //-- ${root.name} read(XMLStreamReader, boolean)
317319

318-
319320
#foreach ( $class in $model.allClasses )
320321
#if ( $class.name != "InputSource" && $class.name != "InputLocation" )
321322
#set ( $classUcapName = $Helper.capitalise( $class.name ) )

0 commit comments

Comments
 (0)