diff --git a/build.gradle b/build.gradle index 302b00228..385ab9943 100644 --- a/build.gradle +++ b/build.gradle @@ -200,7 +200,7 @@ subprojects { } } -['smack-extensions', 'smack-experimental', 'smack-legacy'].each { name -> +['smack-resolver-javax', 'smack-extensions', 'smack-experimental', 'smack-legacy'].each { name -> project(":$name") { jar { manifest { diff --git a/smack-core/build.gradle b/smack-core/build.gradle index faa2a514f..128bd81af 100644 --- a/smack-core/build.gradle +++ b/smack-core/build.gradle @@ -29,6 +29,7 @@ task dnsJar(type: Jar) { from sourceSets.main.output include('org/jivesoftware/smack/util/dns/**') include('org/jivesoftware/smack/util/DNSUtil.class') + include('org/jivesoftware/smack/initializer/**') } artifacts { diff --git a/smack-resolver-javax/src/main/java/org/jivesoftware/smack/util/dns/javax/JavaxResolver.java b/smack-resolver-javax/src/main/java/org/jivesoftware/smack/util/dns/javax/JavaxResolver.java index 5b8ac03e4..78d0d4260 100644 --- a/smack-resolver-javax/src/main/java/org/jivesoftware/smack/util/dns/javax/JavaxResolver.java +++ b/smack-resolver-javax/src/main/java/org/jivesoftware/smack/util/dns/javax/JavaxResolver.java @@ -17,6 +17,7 @@ package org.jivesoftware.smack.util.dns.javax; import java.util.ArrayList; +import java.util.Collections; import java.util.Hashtable; import java.util.List; @@ -27,6 +28,7 @@ import javax.naming.directory.Attributes; import javax.naming.directory.DirContext; import javax.naming.directory.InitialDirContext; +import org.jivesoftware.smack.initializer.SmackInitializer; import org.jivesoftware.smack.util.DNSUtil; import org.jivesoftware.smack.util.dns.DNSResolver; import org.jivesoftware.smack.util.dns.SRVRecord; @@ -37,7 +39,7 @@ import org.jivesoftware.smack.util.dns.SRVRecord; * @author Florian Schmaus * */ -public class JavaxResolver implements DNSResolver { +public class JavaxResolver implements DNSResolver, SmackInitializer { private static JavaxResolver instance; private static DirContext dirContext; @@ -52,24 +54,28 @@ public class JavaxResolver implements DNSResolver { } // Try to set this DNS resolver as primary one - DNSUtil.setDNSResolver(getInstance()); + setup(); } - private JavaxResolver() { + public JavaxResolver() { } - - public static DNSResolver getInstance() { + + public static synchronized DNSResolver getInstance() { if (instance == null && isSupported()) { instance = new JavaxResolver(); } return instance; } - + public static boolean isSupported() { return dirContext != null; } + public static void setup() { + DNSUtil.setDNSResolver(getInstance()); + } + @Override public List lookupSRVRecords(String name) throws NamingException { List res = new ArrayList(); @@ -93,4 +99,15 @@ public class JavaxResolver implements DNSResolver { } return res; } + + @Override + public List initialize() { + return initialize(null); + } + + @Override + public List initialize(ClassLoader classLoader) { + setup(); + return Collections.emptyList(); + } } diff --git a/smack-resolver-javax/src/main/resources/org.jivesoftware.smack/smack-resolver-javax-components.xml b/smack-resolver-javax/src/main/resources/org.jivesoftware.smack/smack-resolver-javax-components.xml new file mode 100644 index 000000000..13d9deabd --- /dev/null +++ b/smack-resolver-javax/src/main/resources/org.jivesoftware.smack/smack-resolver-javax-components.xml @@ -0,0 +1,6 @@ + + + + \ No newline at end of file