You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@camel.apache.org by "Ben Harris (JIRA)" <ji...@apache.org> on 2015/03/20 01:38:39 UTC

[jira] [Created] (CAMEL-8520) Camel XMPP doesn't use a DNS resolver to look at SRV records

Ben Harris created CAMEL-8520:
---------------------------------

             Summary: Camel XMPP doesn't use a DNS resolver to look at SRV records
                 Key: CAMEL-8520
                 URL: https://issues.apache.org/jira/browse/CAMEL-8520
             Project: Camel
          Issue Type: Bug
          Components: camel-xmpp
    Affects Versions: 2.15.0
            Reporter: Ben Harris


Camel XMPP doesn't use a DNS resolver to look at SRV records, whereas in 2.14.1 it did.

In 2.15.0, ConnectionConfiguration calls {{DNSUtil.resolveXMPPDomain(serviceName)}} which runs this code:

{code:title=DNSUtil.java|borderStyle=solid}
public static List<HostAddress> resolveXMPPDomain(final String domain) {
        if (dnsResolver == null) {
            List<HostAddress> addresses = new ArrayList<HostAddress>(1);
            addresses.add(new HostAddress(domain, 5222));
            return addresses;
        }
        return resolveDomain(domain, 'c');
    }
{code}

dnsResolver is never initialised, so it returns the service name, in my case 'jabberzac.org', instead of the actual XMPP server from the SRV Record, 'xmpp.jabberzac.org', which then causes a timeout.

The dnsResolver is meant to be instantiated in init(), which is meant to be called by SmackConfiguration, but never is.

{code:title=DNSUtil.java|borderStyle=solid}
    /**
     * Initializes DNSUtil. This method is automatically called by SmackConfiguration, you don't
     * have to call it manually.
     */
    public static void init() {
        final String[] RESOLVERS = new String[] { "javax.JavaxResolver", "minidns.MiniDnsResolver",
                        "dnsjava.DNSJavaResolver" };
        for (String resolver :RESOLVERS) {
            DNSResolver availableResolver = null;
            String resolverFull = "org.jivesoftware.smack.util.dns" + resolver;
            try {
                Class<?> resolverClass = Class.forName(resolverFull);
                Method getInstanceMethod = resolverClass.getMethod("getInstance");
                availableResolver = (DNSResolver) getInstanceMethod.invoke(null);
                if (availableResolver != null) {
                    setDNSResolver(availableResolver);
                    break;
                }
            }
            catch (ClassNotFoundException|NoSuchMethodException|SecurityException|IllegalAccessException|IllegalArgumentException|InvocationTargetException e) {
                LOGGER.log(Level.FINE, "Exception on init", e);
            }
        }
    }
{code}

2.14.1 doesn't seem to have this problem as DNSUtil class in 2.14.1 doesn't have an init() function which is meant to be 'automatically called'.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)