diff --git a/smack-core/src/main/java/org/jivesoftware/smack/packet/XmlEnvironment.java b/smack-core/src/main/java/org/jivesoftware/smack/packet/XmlEnvironment.java index 2fdc21333..9bfe18301 100644 --- a/smack-core/src/main/java/org/jivesoftware/smack/packet/XmlEnvironment.java +++ b/smack-core/src/main/java/org/jivesoftware/smack/packet/XmlEnvironment.java @@ -1,6 +1,6 @@ /** * - * Copyright 2019 Florian Schmaus + * Copyright 2019-2021 Florian Schmaus * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -133,7 +133,7 @@ public class XmlEnvironment { } public static XmlEnvironment from(XmlPullParser parser, XmlEnvironment outerXmlEnvironment) { - String namespace = parser.getNamespace(); + String namespace = parser.getDefaultNamespace(); String xmlLang = ParserUtils.getXmlLang(parser); return new XmlEnvironment(namespace, xmlLang, outerXmlEnvironment); } diff --git a/smack-core/src/test/java/org/jivesoftware/smack/xml/XmlPullParserTest.java b/smack-core/src/test/java/org/jivesoftware/smack/xml/XmlPullParserTest.java index ff82064c9..e78962ac2 100644 --- a/smack-core/src/test/java/org/jivesoftware/smack/xml/XmlPullParserTest.java +++ b/smack-core/src/test/java/org/jivesoftware/smack/xml/XmlPullParserTest.java @@ -1,6 +1,6 @@ /** * - * Copyright 2019 Florian Schmaus + * Copyright 2019-2021 Florian Schmaus * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -23,6 +23,9 @@ import static org.junit.jupiter.api.Assertions.assertThrows; import java.io.IOException; import java.io.Reader; import java.io.StringReader; +import java.util.ArrayList; +import java.util.List; +import java.util.function.Function; import java.util.stream.Stream; import javax.xml.XMLConstants; @@ -207,6 +210,34 @@ public class XmlPullParserTest { } } + @ParameterizedTest + @EnumSource(SmackTestUtil.XmlPullParserKind.class) + public void testGetNamespace(SmackTestUtil.XmlPullParserKind parserKind) + throws XmlPullParserException, IOException { + String xml = ""; + XmlPullParser parser = SmackTestUtil.getParserFor(xml, parserKind); + + String parsedName = parser.getName(); + assertEquals("bar", parsedName); + + String parsedPrefix = parser.getPrefix(); + assertEquals("foo", parsedPrefix); + + String parsedPrefixNamespace = parser.getNamespace(parsedPrefix); + assertEquals("foo-namespace", parsedPrefixNamespace); + + String parsedNamespace = parser.getNamespace(); + assertEquals("foo-namespace", parsedNamespace); + + List> defaultNamespaceRetrievers = new ArrayList<>(); + defaultNamespaceRetrievers.add(p -> p.getNamespace(null)); + defaultNamespaceRetrievers.add(p -> p.getDefaultNamespace()); + for (Function defaultNamespaceRetriever : defaultNamespaceRetrievers) { + String defaultNamespace = defaultNamespaceRetriever.apply(parser); + assertEquals("namespace", defaultNamespace); + } + } + private static void assertAttributeHolds(XmlPullParser parser, int attributeIndex, String expectedLocalpart, String expectedPrefix, String expectedNamespace) { QName qname = parser.getAttributeQName(attributeIndex); diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/bob/element/BoBDataExtension.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/bob/element/BoBDataExtension.java index 7b7f81709..1bea87b82 100644 --- a/smack-extensions/src/main/java/org/jivesoftware/smackx/bob/element/BoBDataExtension.java +++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/bob/element/BoBDataExtension.java @@ -1,6 +1,6 @@ /** * - * Copyright 2020 Florian Schmaus + * Copyright 2020-2021 Florian Schmaus * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,7 +17,7 @@ package org.jivesoftware.smackx.bob.element; import org.jivesoftware.smack.packet.ExtensionElement; -import org.jivesoftware.smack.packet.Message; +import org.jivesoftware.smack.packet.StanzaView; import org.jivesoftware.smack.util.Objects; import org.jivesoftware.smack.util.XmlStringBuilder; import org.jivesoftware.smackx.bob.BoBData; @@ -94,8 +94,8 @@ public class BoBDataExtension implements ExtensionElement { return xml; } - public static BoBDataExtension from(Message message) { - return message.getExtension(BoBDataExtension.class); + public static BoBDataExtension from(StanzaView stanza) { + return stanza.getExtension(BoBDataExtension.class); } } diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/xdata/packet/DataForm.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/xdata/packet/DataForm.java index d56214d31..0457e69f3 100644 --- a/smack-extensions/src/main/java/org/jivesoftware/smackx/xdata/packet/DataForm.java +++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/xdata/packet/DataForm.java @@ -494,6 +494,9 @@ public final class DataForm implements ExtensionElement { * @return a reference to this builder. */ public Builder addItem(Item item) { + if (items == null) { + items = new ArrayList<>(); + } items.add(item); return this; } diff --git a/smack-xmlparser/src/main/java/org/jivesoftware/smack/xml/XmlPullParser.java b/smack-xmlparser/src/main/java/org/jivesoftware/smack/xml/XmlPullParser.java index ebb8f07e9..c49ac66ae 100644 --- a/smack-xmlparser/src/main/java/org/jivesoftware/smack/xml/XmlPullParser.java +++ b/smack-xmlparser/src/main/java/org/jivesoftware/smack/xml/XmlPullParser.java @@ -1,6 +1,6 @@ /** * - * Copyright 2019 Florian Schmaus. + * Copyright 2019-2021 Florian Schmaus. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -75,6 +75,10 @@ public interface XmlPullParser { String getNamespace(String prefix); + default String getDefaultNamespace() { + return getNamespace(null); + } + int getDepth(); String getPositionDescription();