From 0680553ef77a3cc53ff62a531a1897d085b08bc7 Mon Sep 17 00:00:00 2001 From: Florian Schmaus Date: Thu, 5 Jun 2014 14:49:56 +0200 Subject: [PATCH] Make getMulitipleRecipientServiceAddress() more robust the method should not throw if one of server's items fail to query. --- .../smackx/address/MultipleRecipientManager.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/smack-extensions/src/main/java/org/jivesoftware/smackx/address/MultipleRecipientManager.java b/smack-extensions/src/main/java/org/jivesoftware/smackx/address/MultipleRecipientManager.java index 7597f0493..c16fd9a56 100644 --- a/smack-extensions/src/main/java/org/jivesoftware/smackx/address/MultipleRecipientManager.java +++ b/smack-extensions/src/main/java/org/jivesoftware/smackx/address/MultipleRecipientManager.java @@ -22,6 +22,7 @@ import org.jivesoftware.smack.SmackException.NoResponseException; import org.jivesoftware.smack.SmackException.FeatureNotSupportedException; import org.jivesoftware.smack.SmackException.NotConnectedException; import org.jivesoftware.smack.XMPPConnection; +import org.jivesoftware.smack.XMPPException; import org.jivesoftware.smack.XMPPException.XMPPErrorException; import org.jivesoftware.smack.packet.Message; import org.jivesoftware.smack.packet.Packet; @@ -310,8 +311,14 @@ public class MultipleRecipientManager { DiscoverItems items = ServiceDiscoveryManager.getInstanceFor(connection).discoverItems( serviceName); for (DiscoverItems.Item item : items.getItems()) { - info = ServiceDiscoveryManager.getInstanceFor(connection).discoverInfo( - item.getEntityID(), item.getNode()); + try { + info = ServiceDiscoveryManager.getInstanceFor(connection).discoverInfo( + item.getEntityID(), item.getNode()); + } + catch (XMPPErrorException|NoResponseException e) { + // Don't throw this exceptions if one of the server's items fail + continue; + } if (info.containsFeature("http://jabber.org/protocol/address")) { serviceAddress = serviceName; break;