This is an automated email from the ASF dual-hosted git repository. davsclaus pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/camel.git
commit 2726fe92a378508d11ad6e4d53511988f6478b68 Author: Claus Ibsen <[email protected]> AuthorDate: Fri Dec 15 16:03:28 2023 +0100 CAMEL-20241: camel-jbang - Pretty print xml body should not have noisy empty lines --- .../camel/util/xml/pretty/XmlPrettyPrinter.java | 45 ++++++++++++++-------- .../util/xml/pretty/XmlPrettyPrinterTest.java | 36 +++++++++++++++++ 2 files changed, 64 insertions(+), 17 deletions(-) diff --git a/core/camel-xml-jaxp-util/src/main/java/org/apache/camel/util/xml/pretty/XmlPrettyPrinter.java b/core/camel-xml-jaxp-util/src/main/java/org/apache/camel/util/xml/pretty/XmlPrettyPrinter.java index 4e5789e0e67..2d004d3192b 100644 --- a/core/camel-xml-jaxp-util/src/main/java/org/apache/camel/util/xml/pretty/XmlPrettyPrinter.java +++ b/core/camel-xml-jaxp-util/src/main/java/org/apache/camel/util/xml/pretty/XmlPrettyPrinter.java @@ -107,6 +107,7 @@ public final class XmlPrettyPrinter { final StringBuilder sb = new StringBuilder(); final DefaultHandler handler = new DefaultHandler() { int indent; + boolean inElement; @Override public void declaration(String version, String encoding, String standalone) throws SAXException { @@ -132,26 +133,33 @@ public final class XmlPrettyPrinter { @Override public void startElement(String uri, String localName, String qName, Attributes attributes) throws SAXException { + inElement = true; sb.append(XmlPrettyPrinter.padString(indent, blanks)); StringBuilder lb = new StringBuilder(); lb.append("<"); lb.append(qName); + + boolean empty = attributes.getLength() == 0; + if (empty) { + lb.append(">"); + } String value = color.color(ColorPrintElement.ELEMENT, lb.toString()); sb.append(value); - lb.setLength(0); - for (int i = 0; i < attributes.getLength(); i++) { - String k = color.color(ColorPrintElement.ATTRIBUTE_KEY, attributes.getQName(i)); - String v = color.color(ColorPrintElement.ATTRIBUTE_VALUE, attributes.getValue(i)); - String eq = color.color(ColorPrintElement.ATTRIBUTE_EQUAL, "="); - String quote = color.color(ColorPrintElement.ATTRIBUTE_QUOTE, "\""); - lb.append(" ").append(k).append(eq).append(quote).append(v).append(quote); + if (!empty) { + lb.setLength(0); + for (int i = 0; i < attributes.getLength(); i++) { + String k = color.color(ColorPrintElement.ATTRIBUTE_KEY, attributes.getQName(i)); + String v = color.color(ColorPrintElement.ATTRIBUTE_VALUE, attributes.getValue(i)); + String eq = color.color(ColorPrintElement.ATTRIBUTE_EQUAL, "="); + String quote = color.color(ColorPrintElement.ATTRIBUTE_QUOTE, "\""); + lb.append(" ").append(k).append(eq).append(quote).append(v).append(quote); + } + sb.append(lb); + value = color.color(ColorPrintElement.ELEMENT, ">"); + sb.append(value); } - sb.append(lb); - - value = color.color(ColorPrintElement.ELEMENT, ">"); - sb.append(value); sb.append("\n"); indent++; @@ -159,6 +167,7 @@ public final class XmlPrettyPrinter { @Override public void endElement(String uri, String localName, String qName) throws SAXException { + inElement = false; --indent; StringBuilder lb = new StringBuilder(); @@ -176,13 +185,15 @@ public final class XmlPrettyPrinter { @Override public void characters(char[] ch, int start, int length) throws SAXException { - char[] chars = new char[length]; - System.arraycopy(ch, start, chars, 0, length); - String value = color.color(ColorPrintElement.VALUE, new String(chars)); + if (inElement && indent > 1) { + char[] chars = new char[length]; + System.arraycopy(ch, start, chars, 0, length); + String value = color.color(ColorPrintElement.VALUE, new String(chars)); - sb.append(XmlPrettyPrinter.padString(indent, blanks)); - sb.append(value); - sb.append("\n"); + sb.append(XmlPrettyPrinter.padString(indent, blanks)); + sb.append(value); + sb.append("\n"); + } } }; diff --git a/core/camel-xml-jaxp-util/src/test/java/org/apache/camel/util/xml/pretty/XmlPrettyPrinterTest.java b/core/camel-xml-jaxp-util/src/test/java/org/apache/camel/util/xml/pretty/XmlPrettyPrinterTest.java index 1740e3929df..0eb71cf9b61 100644 --- a/core/camel-xml-jaxp-util/src/test/java/org/apache/camel/util/xml/pretty/XmlPrettyPrinterTest.java +++ b/core/camel-xml-jaxp-util/src/test/java/org/apache/camel/util/xml/pretty/XmlPrettyPrinterTest.java @@ -50,4 +50,40 @@ public class XmlPrettyPrinterTest { Assertions.assertEquals(expected, pretty); } + @Test + public void testPrettyPrintColor() throws Exception { + String xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><root><tag><nested>hello</nested></tag></root>"; + String expected = "*<?xml version=\"1.0\" encoding=\"UTF-8\"?>*\n" + + "*<root>*\n" + + " *<tag>*\n" + + " *<nested>*\n" + + " *hello*\n" + + " *</nested>*\n" + + " *</tag>*\n" + + "*</root>*"; + String pretty = XmlPrettyPrinter.colorPrint(xml, 2, true, new XmlPrettyPrinter.ColorPrintElement() { + @Override + public String color(int type, String value) { + return "*" + value + "*"; + } + }); + Assertions.assertEquals(expected, pretty); + } + + @Test + public void testPrettyPrintBeer() throws Exception { + String xml = "<beer alc=\"4.4%\"> <kind>Fosters</kind> <name>Bell Expedition</name> </beer>"; + String expected = """ + <beer alc="4.4%"> + <kind> + Fosters + </kind> + <name> + Bell Expedition + </name> + </beer>"""; + String pretty = XmlPrettyPrinter.pettyPrint(xml, 2, false); + Assertions.assertEquals(expected, pretty); + } + }
