From b0abfe1bbaa7227c00da09538d1af4b1c1f2d93d Mon Sep 17 00:00:00 2001 From: Florian Schmaus Date: Sun, 18 Apr 2021 17:16:38 +0200 Subject: [PATCH 1/3] [offline] Make OfflineMessageManager.NAMESPACE public --- .../smackx/offline/OfflineMessageManager.java | 10 +++++----- .../smackx/offline/packet/OfflineMessageRequest.java | 3 ++- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/offline/OfflineMessageManager.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/offline/OfflineMessageManager.java index 8021054da..e4973baa2 100644 --- a/smack-extensions/src/main/java/org/jivesoftware/smackx/offline/OfflineMessageManager.java +++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/offline/OfflineMessageManager.java @@ -65,7 +65,7 @@ public final class OfflineMessageManager extends Manager { private static final Logger LOGGER = Logger.getLogger(OfflineMessageManager.class.getName()); - private static final String namespace = "http://jabber.org/protocol/offline"; + public static final String NAMESPACE = "http://jabber.org/protocol/offline"; private static final Map INSTANCES = new WeakHashMap<>(); @@ -100,7 +100,7 @@ public final class OfflineMessageManager extends Manager { * @throws InterruptedException if the calling thread was interrupted. */ public boolean supportsFlexibleRetrieval() throws NoResponseException, XMPPErrorException, NotConnectedException, InterruptedException { - return serviceDiscoveryManager.serverSupportsFeature(namespace); + return serviceDiscoveryManager.serverSupportsFeature(NAMESPACE); } /** @@ -114,8 +114,8 @@ public final class OfflineMessageManager extends Manager { * @throws InterruptedException if the calling thread was interrupted. */ public int getMessageCount() throws NoResponseException, XMPPErrorException, NotConnectedException, InterruptedException { - DiscoverInfo info = serviceDiscoveryManager.discoverInfo(null, namespace); - DataForm dataForm = DataForm.from(info, namespace); + DiscoverInfo info = serviceDiscoveryManager.discoverInfo(null, NAMESPACE); + DataForm dataForm = DataForm.from(info, NAMESPACE); if (dataForm == null) { return 0; } @@ -138,7 +138,7 @@ public final class OfflineMessageManager extends Manager { */ public List getHeaders() throws NoResponseException, XMPPErrorException, NotConnectedException, InterruptedException { List answer = new ArrayList<>(); - DiscoverItems items = serviceDiscoveryManager.discoverItems(null, namespace); + DiscoverItems items = serviceDiscoveryManager.discoverItems(null, NAMESPACE); for (DiscoverItems.Item item : items.getItems()) { answer.add(new OfflineMessageHeader(item)); } diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/offline/packet/OfflineMessageRequest.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/offline/packet/OfflineMessageRequest.java index f534f7d62..d255b74f9 100644 --- a/smack-extensions/src/main/java/org/jivesoftware/smackx/offline/packet/OfflineMessageRequest.java +++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/offline/packet/OfflineMessageRequest.java @@ -27,6 +27,7 @@ import org.jivesoftware.smack.packet.XmlEnvironment; import org.jivesoftware.smack.provider.IQProvider; import org.jivesoftware.smack.xml.XmlPullParser; import org.jivesoftware.smack.xml.XmlPullParserException; +import org.jivesoftware.smackx.offline.OfflineMessageManager; /** * Represents a request to get some or all the offline messages of a user. This class can also @@ -37,7 +38,7 @@ import org.jivesoftware.smack.xml.XmlPullParserException; public class OfflineMessageRequest extends IQ { public static final String ELEMENT = "offline"; - public static final String NAMESPACE = "http://jabber.org/protocol/offline"; + public static final String NAMESPACE = OfflineMessageManager.NAMESPACE; private final List items = new ArrayList<>(); private boolean purge = false; From 36c7521ca2b2873cab64c5d572fb45bef7e8452f Mon Sep 17 00:00:00 2001 From: Florian Schmaus Date: Sun, 18 Apr 2021 17:17:48 +0200 Subject: [PATCH 2/3] [offline] Add OfflineMessageInfo.QNAME field Fixes SMACK-905. --- .../smackx/offline/packet/OfflineMessageInfo.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/offline/packet/OfflineMessageInfo.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/offline/packet/OfflineMessageInfo.java index 8ce910ca1..df4958abd 100644 --- a/smack-extensions/src/main/java/org/jivesoftware/smackx/offline/packet/OfflineMessageInfo.java +++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/offline/packet/OfflineMessageInfo.java @@ -19,11 +19,14 @@ package org.jivesoftware.smackx.offline.packet; import java.io.IOException; +import javax.xml.namespace.QName; + import org.jivesoftware.smack.packet.ExtensionElement; import org.jivesoftware.smack.packet.XmlEnvironment; import org.jivesoftware.smack.provider.ExtensionElementProvider; import org.jivesoftware.smack.xml.XmlPullParser; import org.jivesoftware.smack.xml.XmlPullParserException; +import org.jivesoftware.smackx.offline.OfflineMessageManager; /** * OfflineMessageInfo is an extension included in the retrieved offline messages requested by @@ -35,6 +38,8 @@ import org.jivesoftware.smack.xml.XmlPullParserException; */ public class OfflineMessageInfo implements ExtensionElement { + public static final QName QNAME = new QName(OfflineMessageManager.NAMESPACE, "offline"); + private String node = null; /** @@ -45,7 +50,7 @@ public class OfflineMessageInfo implements ExtensionElement { */ @Override public String getElementName() { - return "offline"; + return QNAME.getLocalPart(); } /** @@ -56,7 +61,7 @@ public class OfflineMessageInfo implements ExtensionElement { */ @Override public String getNamespace() { - return "http://jabber.org/protocol/offline"; + return QNAME.getNamespaceURI(); } /** From 961882ff7fa0f49b26c4a607e8d16022171c5993 Mon Sep 17 00:00:00 2001 From: Florian Schmaus Date: Sun, 18 Apr 2021 17:19:32 +0200 Subject: [PATCH 3/3] Add more QNAME fields to extension element classes --- .../org/jivesoftware/smack/packet/Bind.java | 5 ++++- .../jivesoftware/smack/packet/StanzaError.java | 10 +++++++--- .../smackx/hashes/element/HashElement.java | 18 +++++++++++------- .../smackx/hoxt/packet/Base64BinaryChunk.java | 10 +++++++--- .../element/BlockQuoteElement.java | 5 ++++- .../smackx/muc/packet/MUCUser.java | 5 +++-- .../jivesoftware/smackx/nick/packet/Nick.java | 17 ++++++++++++++--- .../smack/roster/packet/RosterPacket.java | 8 ++++++-- 8 files changed, 56 insertions(+), 22 deletions(-) diff --git a/smack-core/src/main/java/org/jivesoftware/smack/packet/Bind.java b/smack-core/src/main/java/org/jivesoftware/smack/packet/Bind.java index f64a29f65..6849d8231 100644 --- a/smack-core/src/main/java/org/jivesoftware/smack/packet/Bind.java +++ b/smack-core/src/main/java/org/jivesoftware/smack/packet/Bind.java @@ -1,6 +1,6 @@ /** * - * Copyright 2003-2007 Jive Software, 2015-2016 Florian Schmaus. + * Copyright 2003-2007 Jive Software, 2015-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,6 +17,8 @@ package org.jivesoftware.smack.packet; +import javax.xml.namespace.QName; + import org.jxmpp.jid.EntityFullJid; import org.jxmpp.jid.parts.Resourcepart; @@ -73,6 +75,7 @@ public final class Bind extends IQ { public static final class Feature implements ExtensionElement { + public static final QName QNAME = new QName(NAMESPACE, ELEMENT); public static final Feature INSTANCE = new Feature(); private Feature() { diff --git a/smack-core/src/main/java/org/jivesoftware/smack/packet/StanzaError.java b/smack-core/src/main/java/org/jivesoftware/smack/packet/StanzaError.java index 590de8c81..5c595115b 100644 --- a/smack-core/src/main/java/org/jivesoftware/smack/packet/StanzaError.java +++ b/smack-core/src/main/java/org/jivesoftware/smack/packet/StanzaError.java @@ -1,6 +1,6 @@ /** * - * Copyright 2003-2007 Jive Software, 2015-2019 Florian Schmaus + * Copyright 2003-2007 Jive Software, 2015-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. @@ -22,6 +22,8 @@ import java.util.Locale; import java.util.Map; import java.util.logging.Logger; +import javax.xml.namespace.QName; + import org.jivesoftware.smack.util.Objects; import org.jivesoftware.smack.util.StringUtils; import org.jivesoftware.smack.util.XmlStringBuilder; @@ -74,6 +76,8 @@ public class StanzaError extends AbstractError implements ExtensionElement { public static final String ERROR = "error"; + public static final QName QNAME = new QName(StreamOpen.CLIENT_NAMESPACE, ERROR); + private static final Logger LOGGER = Logger.getLogger(StanzaError.class.getName()); static final Map CONDITION_TO_TYPE = new HashMap(); @@ -199,12 +203,12 @@ public class StanzaError extends AbstractError implements ExtensionElement { @Override public String getElementName() { - return ERROR; + return QNAME.getLocalPart(); } @Override public String getNamespace() { - return StreamOpen.CLIENT_NAMESPACE; + return QNAME.getNamespaceURI(); } @Override diff --git a/smack-experimental/src/main/java/org/jivesoftware/smackx/hashes/element/HashElement.java b/smack-experimental/src/main/java/org/jivesoftware/smackx/hashes/element/HashElement.java index 9c8329923..5a63d3f40 100644 --- a/smack-experimental/src/main/java/org/jivesoftware/smackx/hashes/element/HashElement.java +++ b/smack-experimental/src/main/java/org/jivesoftware/smackx/hashes/element/HashElement.java @@ -1,6 +1,6 @@ /** * - * Copyright © 2017 Paul Schaub + * Copyright © 2017 Paul Schaub, 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. @@ -18,6 +18,8 @@ package org.jivesoftware.smackx.hashes.element; import static org.jivesoftware.smack.util.Objects.requireNonNull; +import javax.xml.namespace.QName; + import org.jivesoftware.smack.packet.ExtensionElement; import org.jivesoftware.smack.util.XmlStringBuilder; import org.jivesoftware.smack.util.stringencoder.Base64; @@ -34,6 +36,8 @@ public class HashElement implements ExtensionElement { public static final String ELEMENT = "hash"; public static final String ATTR_ALGO = "algo"; + public static final QName QNAME = new QName(HashManager.NAMESPACE.V2.toString(), ELEMENT); + private final HashManager.ALGORITHM algorithm; private final byte[] hash; private final String hashB64; @@ -89,7 +93,12 @@ public class HashElement implements ExtensionElement { @Override public String getElementName() { - return ELEMENT; + return QNAME.getLocalPart(); + } + + @Override + public String getNamespace() { + return QNAME.getNamespaceURI(); } @Override @@ -102,11 +111,6 @@ public class HashElement implements ExtensionElement { return sb; } - @Override - public String getNamespace() { - return HashManager.NAMESPACE.V2.toString(); - } - @Override public boolean equals(Object other) { if (other == null || !(other instanceof HashElement)) { diff --git a/smack-experimental/src/main/java/org/jivesoftware/smackx/hoxt/packet/Base64BinaryChunk.java b/smack-experimental/src/main/java/org/jivesoftware/smackx/hoxt/packet/Base64BinaryChunk.java index 63393a628..422d1764a 100644 --- a/smack-experimental/src/main/java/org/jivesoftware/smackx/hoxt/packet/Base64BinaryChunk.java +++ b/smack-experimental/src/main/java/org/jivesoftware/smackx/hoxt/packet/Base64BinaryChunk.java @@ -1,6 +1,6 @@ /** * - * Copyright 2014 Andriy Tsykholyas, 2015 Florian Schmaus + * Copyright 2014 Andriy Tsykholyas, 2015-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. @@ -16,6 +16,8 @@ */ package org.jivesoftware.smackx.hoxt.packet; +import javax.xml.namespace.QName; + import org.jivesoftware.smack.packet.ExtensionElement; import org.jivesoftware.smack.util.Objects; import org.jivesoftware.smack.util.XmlStringBuilder; @@ -36,6 +38,8 @@ public class Base64BinaryChunk implements ExtensionElement { public static final String ATTRIBUTE_LAST = "last"; public static final String ATTRIBUTE_NR = "nr"; + public static final QName QNAME = new QName(HOXTManager.NAMESPACE, ELEMENT_CHUNK); + private final String streamId; private final boolean last; private final String text; @@ -108,12 +112,12 @@ public class Base64BinaryChunk implements ExtensionElement { @Override public String getElementName() { - return ELEMENT_CHUNK; + return QNAME.getLocalPart(); } @Override public String getNamespace() { - return HOXTManager.NAMESPACE; + return QNAME.getNamespaceURI(); } @Override diff --git a/smack-experimental/src/main/java/org/jivesoftware/smackx/message_markup/element/BlockQuoteElement.java b/smack-experimental/src/main/java/org/jivesoftware/smackx/message_markup/element/BlockQuoteElement.java index 7d66db83a..b576d7482 100644 --- a/smack-experimental/src/main/java/org/jivesoftware/smackx/message_markup/element/BlockQuoteElement.java +++ b/smack-experimental/src/main/java/org/jivesoftware/smackx/message_markup/element/BlockQuoteElement.java @@ -16,9 +16,12 @@ */ package org.jivesoftware.smackx.message_markup.element; +import javax.xml.namespace.QName; + public class BlockQuoteElement extends MarkupElement.BlockLevelMarkupElement { public static final String ELEMENT = "bquote"; + public static final QName QNAME = new QName(MarkupElement.NAMESPACE, ELEMENT); /** * Create a new Block Quote element. @@ -32,7 +35,7 @@ public class BlockQuoteElement extends MarkupElement.BlockLevelMarkupElement { @Override public String getElementName() { - return ELEMENT; + return QNAME.getLocalPart(); } } diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/muc/packet/MUCUser.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/muc/packet/MUCUser.java index 81eda1319..d93d625da 100644 --- a/smack-extensions/src/main/java/org/jivesoftware/smackx/muc/packet/MUCUser.java +++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/muc/packet/MUCUser.java @@ -328,6 +328,7 @@ public class MUCUser implements ExtensionElement { */ public static class Decline implements ExtensionElement { public static final String ELEMENT = "decline"; + public static final QName QNAME = new QName(NAMESPACE, ELEMENT); private final String reason; private final EntityBareJid from; @@ -384,12 +385,12 @@ public class MUCUser implements ExtensionElement { @Override public String getElementName() { - return ELEMENT; + return QNAME.getLocalPart(); } @Override public String getNamespace() { - return NAMESPACE; + return QNAME.getNamespaceURI(); } } diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/nick/packet/Nick.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/nick/packet/Nick.java index ef95d395d..bc1bd04b4 100644 --- a/smack-extensions/src/main/java/org/jivesoftware/smackx/nick/packet/Nick.java +++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/nick/packet/Nick.java @@ -16,6 +16,8 @@ */ package org.jivesoftware.smackx.nick.packet; +import javax.xml.namespace.QName; + import org.jivesoftware.smack.packet.ExtensionElement; import org.jivesoftware.smack.util.StringUtils; import org.jivesoftware.smack.util.XmlStringBuilder; @@ -30,7 +32,16 @@ public class Nick implements ExtensionElement { public static final String NAMESPACE = "http://jabber.org/protocol/nick"; - public static final String ELEMENT_NAME = "nick"; + public static final QName QNAME = new QName(NAMESPACE, "nick"); + + /** + * Deprected, do not use. + * + * @deprecated use {@link #QNAME} instead. + */ + @Deprecated + // TODO: Remove in Smack 4.6. + public static final String ELEMENT_NAME = QNAME.getLocalPart(); private final String name; @@ -49,12 +60,12 @@ public class Nick implements ExtensionElement { @Override public String getElementName() { - return ELEMENT_NAME; + return QNAME.getLocalPart(); } @Override public String getNamespace() { - return NAMESPACE; + return QNAME.getNamespaceURI(); } @Override diff --git a/smack-im/src/main/java/org/jivesoftware/smack/roster/packet/RosterPacket.java b/smack-im/src/main/java/org/jivesoftware/smack/roster/packet/RosterPacket.java index 2944cf6be..05af37297 100644 --- a/smack-im/src/main/java/org/jivesoftware/smack/roster/packet/RosterPacket.java +++ b/smack-im/src/main/java/org/jivesoftware/smack/roster/packet/RosterPacket.java @@ -24,6 +24,8 @@ import java.util.Locale; import java.util.Set; import java.util.concurrent.CopyOnWriteArraySet; +import javax.xml.namespace.QName; + import org.jivesoftware.smack.packet.ExtensionElement; import org.jivesoftware.smack.packet.IQ; import org.jivesoftware.smack.packet.Stanza; @@ -119,6 +121,8 @@ public final class RosterPacket extends IQ { */ public static final String ELEMENT = Stanza.ITEM; + public static final QName QNAME = new QName(NAMESPACE, ELEMENT); + public static final String GROUP = "group"; private final BareJid jid; @@ -160,12 +164,12 @@ public final class RosterPacket extends IQ { @Override public String getElementName() { - return ELEMENT; + return QNAME.getLocalPart(); } @Override public String getNamespace() { - return NAMESPACE; + return QNAME.getNamespaceURI(); } /**