You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2023/12/15 15:18:29 UTC
(camel) 01/02: CAMEL-20241: camel-jbang - Pretty print xml body should not have noisy empty lines
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 <cl...@gmail.com>
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);
+ }
+
}