Skip to content

org.xbill.DNS.spi.DnsjavaInetAddressResolverProvider not found #338

@tzaeschke

Description

@tzaeschke

Problem description

When running my application (Windows, Java 21, dns-java 3.6.1) I get the following Exception:

java.util.ServiceConfigurationError: [java.net](http://java.net/).spi.InetAddressResolverProvider: Provider org.xbill.DNS.spi.DnsjavaInetAddressResolverProvider not found
	at java.base/[java.util.ServiceLoader.fail](http://java.util.serviceloader.fail/)([ServiceLoader.java:589](http://serviceloader.java:589/))
	at java.base/java.util.ServiceLoader$LazyClassPathLookupIterator.nextProviderClass([ServiceLoader.java:1215](http://serviceloader.java:1215/))
	at java.base/java.util.ServiceLoader$LazyClassPathLookupIterator.hasNextService([ServiceLoader.java:1224](http://serviceloader.java:1224/))
	at java.base/java.util.ServiceLoader$LazyClassPathLookupIterator.hasNext([ServiceLoader.java:1269](http://serviceloader.java:1269/))
	at java.base/java.util.ServiceLoader$2.hasNext([ServiceLoader.java:1305](http://serviceloader.java:1305/))
	at java.base/java.util.ServiceLoader$3.hasNext([ServiceLoader.java:1387](http://serviceloader.java:1387/))
	at java.base/java.util.ServiceLoader.findFirst([ServiceLoader.java:1800](http://serviceloader.java:1800/))
	at java.base/[java.net](http://java.net/).InetAddress.loadResolver([InetAddress.java:508](http://inetaddress.java:508/))
	at java.base/[java.net](http://java.net/).InetAddress.resolver([InetAddress.java:488](http://inetaddress.java:488/))
	at java.base/[java.net](http://java.net/).InetAddress.getAddressesFromNameService([InetAddress.java:1814](http://inetaddress.java:1814/))
	at java.base/[java.net](http://java.net/).InetAddress$NameServiceAddresses.get([InetAddress.java:1149](http://inetaddress.java:1149/))
	at java.base/[java.net](http://java.net/).InetAddress.getAllByName0([InetAddress.java:1806](http://inetaddress.java:1806/))
	at java.base/[java.net](http://java.net/).InetAddress.getAllByName([InetAddress.java:1676](http://inetaddress.java:1676/))
	at io.grpc.internal.DnsNameResolver$JdkAddressResolver.resolveAddress([DnsNameResolver.java:632](http://dnsnameresolver.java:632/))
	at io.grpc.internal.DnsNameResolver.resolveAddresses([DnsNameResolver.java:219](http://dnsnameresolver.java:219/))
	at io.grpc.internal.DnsNameResolver.doResolve([DnsNameResolver.java:282](http://dnsnameresolver.java:282/))
	at io.grpc.internal.DnsNameResolver$[Resolve.run](http://resolve.run/)([DnsNameResolver.java:318](http://dnsnameresolver.java:318/))
	...

Problem analysis

DNS Java uses a multi-version Jar. However, while the class org.xbill.DNS.spi.DnsjavaInetAddressResolverProvider is only included when built with Java 18 or later, the service file META-INF/services/java.net.spi.InetAddressResolverProvider is always included.

My theory (not verified): The Maven artifact has probably been built with Java 17 or earlier, hence it contains the service file but not the Java 18 DnsjavaInetAddressResolverProvider. When a Java 18 application uses Java DNS, the service file tries to look up the class and fails.

Workarounds

  • Run application with Java 11 instead of 21
  • Exclude the META-INF/services/java.net.spi.InetAddressResolverProvider from your project

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions