[
https://issues.apache.org/jira/browse/ARCHETYPE-584?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17008264#comment-17008264
]
Ruwen Reddig edited comment on ARCHETYPE-584 at 1/5/20 7:35 AM:
----------------------------------------------------------------
Stumpled over the same problem yesterday. Please have a look at my PR. I added
some explanation in the github comment.
Here is a minimal, reproducible example of the problem + fix
{code:java}
import org.w3c.dom.Document;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import javax.xml.XMLConstants;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import java.io.StringReader;
import java.io.StringWriter;
import java.net.MalformedURLException;
import java.net.URI;
public class ReadWriteXmlTest {
public static void main(String[] args) throws Exception {
String dummyPom =
"<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 " +
"http://maven.apache.org/xsd/maven-4.0.0.xsd\">\n" +
" <modelVersion>4.0.0</modelVersion>\n" +
" <packaging>pom</packaging>\n" +
"</project>";
InputSource inputSource = new InputSource();
inputSource.setCharacterStream( new StringReader(dummyPom) );
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
// uncomment the following line to see the fix
//dbf.setIgnoringElementContentWhitespace(true);
dbf.setNamespaceAware(true);
dbf.setSchema( getSchema() );
Document document = dbf.newDocumentBuilder().parse( inputSource );
Transformer tr = TransformerFactory.newInstance().newTransformer();
tr.setOutputProperty( OutputKeys.INDENT, "yes" );
// comment this line and output still looks okay?!!
tr.setOutputProperty( "{http://xml.apache.org/xslt}indent-amount", "2"
);
StringWriter fileWriter = new StringWriter();
tr.transform( new DOMSource( document ), new StreamResult( fileWriter )
);
System.out.println(fileWriter.toString());
}
private static Schema getSchema() throws SAXException,
MalformedURLException {
URI uri = URI.create("https://maven.apache.org/xsd/maven-4.0.0.xsd");
return SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI)
.newSchema(uri.toURL());
}
}
{code}
was (Author: newur):
Stumpled over the same problem yesterday. Please have a look at my PR. I added
some explanation in the github comment.
Here is a minimal, reproducible example of the problem + fix
{code:java}
import org.w3c.dom.Document;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
import javax.xml.XMLConstants;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import java.io.StringReader;
import java.io.StringWriter;
import java.net.MalformedURLException;
import java.net.URI;
public class ReadWriteXmlTest {
public static void main(String[] args) throws Exception {
String dummyPom =
"<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 " +
"http://maven.apache.org/xsd/maven-4.0.0.xsd\">\n" +
" <modelVersion>4.0.0</modelVersion>\n" +
" <packaging>pom</packaging>\n" +
"</project>";
InputSource inputSource = new InputSource();
inputSource.setCharacterStream( new StringReader(dummyPom) );
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
// comment any of the following 3 lines to see the problem
//dbf.setIgnoringElementContentWhitespace(true);
dbf.setNamespaceAware(true);
dbf.setSchema( getSchema() );
Document document = dbf.newDocumentBuilder().parse( inputSource );
Transformer tr = TransformerFactory.newInstance().newTransformer();
tr.setOutputProperty( OutputKeys.INDENT, "yes" );
// comment this line and output still looks okay?!!
tr.setOutputProperty( "{http://xml.apache.org/xslt}indent-amount", "2"
);
StringWriter fileWriter = new StringWriter();
tr.transform( new DOMSource( document ), new StreamResult( fileWriter )
);
System.out.println(fileWriter.toString());
}
private static Schema getSchema() throws SAXException,
MalformedURLException {
URI uri = URI.create("https://maven.apache.org/xsd/maven-4.0.0.xsd");
return SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI)
.newSchema(uri.toURL());
}
}
{code}
> Resulting root pom.xml from archetype generation has bad indentation
> --------------------------------------------------------------------
>
> Key: ARCHETYPE-584
> URL: https://issues.apache.org/jira/browse/ARCHETYPE-584
> Project: Maven Archetype
> Issue Type: Bug
> Components: Archetypes
> Affects Versions: 3.1.1, 3.1.2
> Reporter: Andre Prata
> Priority: Major
> Time Spent: 10m
> Remaining Estimate: 0h
>
> This issue does not apply to version 3.1.0, it was introduced in version
> 3.1.0.
>
> In our project, we have the default configuration of the root pom.xml that
> contains lines such as this:
> {code:java}
> <properties>
> <java.version>11</java.version>
> <spring-cloud.version>Greenwich.RELEASE</spring-cloud.version>
> </properties>
> {code}
> These lines are still in good shape when added to the jar artifact. However,
> upon generating the project from the archetype, we get the following (note
> also the whitespace on the blank lines hinting at some indentation attempts,
> not just the unexpected line breaks)
> {code:java}
> <properties>
>
>
> <java.version>11</java.version>
>
>
> <spring-cloud.version>Greenwich.RELEASE</spring-cloud.version>
>
> </properties>
>
> {code}
> This issue does *not* occur in in child module pom.xml files.
--
This message was sent by Atlassian Jira
(v8.3.4#803005)