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 cf4e8f9fd..4b6f76b8b 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-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();