diff --git a/smack-core/src/main/java/org/jivesoftware/smack/util/PacketParserUtils.java b/smack-core/src/main/java/org/jivesoftware/smack/util/PacketParserUtils.java index 67249b559..d5168ba50 100644 --- a/smack-core/src/main/java/org/jivesoftware/smack/util/PacketParserUtils.java +++ b/smack-core/src/main/java/org/jivesoftware/smack/util/PacketParserUtils.java @@ -299,7 +299,7 @@ public class PacketParserUtils { */ public static CharSequence parseContentDepth(XmlPullParser parser, int depth, boolean fullNamespaces) throws XmlPullParserException, IOException { if (parser.supportsRoundtrip()) { - return parseContentDepthWithRoundtrip(parser, depth, fullNamespaces); + return parseContentDepthWithRoundtrip(parser, depth); } else { return parseContentDepthWithoutRoundtrip(parser, depth, fullNamespaces); } @@ -368,8 +368,7 @@ public class PacketParserUtils { return xml; } - @SuppressWarnings("UnusedVariable") - private static CharSequence parseContentDepthWithRoundtrip(XmlPullParser parser, int depth, boolean fullNamespaces) + private static XmlStringBuilder parseContentDepthWithRoundtrip(XmlPullParser parser, int depth) throws XmlPullParserException, IOException { XmlStringBuilder sb = new XmlStringBuilder(); XmlPullParser.Event event = parser.getEventType(); @@ -377,10 +376,9 @@ public class PacketParserUtils { outerloop: while (true) { switch (event) { case START_ELEMENT: - if (startElementJustSeen) { - sb.rightAngleBracket(); - } startElementJustSeen = true; + String openElementTag = parser.getText(); + sb.append(openElementTag); break; case END_ELEMENT: boolean isEmptyElement = false; diff --git a/smack-core/src/test/java/org/jivesoftware/smack/util/PacketParserUtilsTest.java b/smack-core/src/test/java/org/jivesoftware/smack/util/PacketParserUtilsTest.java index 3ac5215d5..f8eacf5cd 100644 --- a/smack-core/src/test/java/org/jivesoftware/smack/util/PacketParserUtilsTest.java +++ b/smack-core/src/test/java/org/jivesoftware/smack/util/PacketParserUtilsTest.java @@ -854,4 +854,40 @@ public class PacketParserUtilsTest { StanzaError error = PacketParserUtils.parseError(parser); assertEquals(text, error.getDescriptiveText()); } + + @ParameterizedTest + @EnumSource(SmackTestUtil.XmlPullParserKind.class) + public void testParseElementSimple(SmackTestUtil.XmlPullParserKind parserKind) throws TransformerException, ParserConfigurationException, FactoryConfigurationError, XmlPullParserException, IOException { + String unknownElement = XMLBuilder.create("unknown-element") + .ns("https://example.org/non-existent") + .e("inner") + .t("test") + .asString(outputProperties); + + XmlPullParser xmlPullParser = SmackTestUtil.getParserFor(unknownElement, parserKind); + + CharSequence unknownElementParsed = PacketParserUtils.parseElement(xmlPullParser); + assertXmlSimilar(unknownElement, unknownElementParsed); + } + + @ParameterizedTest + @EnumSource(SmackTestUtil.XmlPullParserKind.class) + public void testParseElementExtended(SmackTestUtil.XmlPullParserKind parserKind) throws TransformerException, ParserConfigurationException, FactoryConfigurationError, XmlPullParserException, IOException { + String unknownElement = XMLBuilder.create("unknown-element") + .ns("https://example.org/non-existent") + .a("attribute-outer", "foo") + .e("inner") + .a("attribute-inner", "bar") + .a("attribute-inner-2", "baz") + .t("test") + .up() + .e("empty-element") + .up() + .asString(outputProperties); + + XmlPullParser xmlPullParser = SmackTestUtil.getParserFor(unknownElement, parserKind); + + CharSequence unknownElementParsed = PacketParserUtils.parseElement(xmlPullParser); + assertXmlSimilar(unknownElement, unknownElementParsed); + } }