ClassNotFound on sun.security.util.HostnameChecker

While I’m trying to use smack 4.1.7 with jars:

smack-core

smack-tcp

smack-extensions

smack-java7 (this was needed because of the NPE on Base64 class)

I’m getting a class not found exception on a JDK class on JDK 8.

stack trace is:

java.lang.NoClassDefFoundError: sun/security/util/HostnameChecker

at org.jivesoftware.smack.java7.Java7HostnameVerifier.verify(Java7HostnameVerifier .java:47)

at org.jivesoftware.smack.tcp.XMPPTCPConnection.proceedTLSReceived(XMPPTCPConnecti on.java:770)

at org.jivesoftware.smack.tcp.XMPPTCPConnection.access$1000(XMPPTCPConnection.java :140)

at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.parsePackets(XMPPTCPC onnection.java:1018)

at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader.access$300(XMPPTCPCon nection.java:952)

at org.jivesoftware.smack.tcp.XMPPTCPConnection$PacketReader$1.run(XMPPTCPConnecti on.java:967)

at java.lang.Thread.run(Thread.java:745)

Caused by: java.lang.ClassNotFoundException: sun.security.util.HostnameChecker not found by org.igniterealtime.smack.java7 [324]

at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(Bun dleWiringImpl.java:1532)

at org.apache.felix.framework.BundleWiringImpl.access$400(BundleWiringImpl.java:75 )

at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleW iringImpl.java:1955)

at java.lang.ClassLoader.loadClass(ClassLoader.java:357)

… 7 more]]

You don’t want to put in the standalone jars when using Smack. Use a build tools with support for maven artifacts like gradle or maven.

I’m using Maven and integrating Smack with Glassfish for notification mechanism. My dependency list is given below. I also have transitive dependencies that were not listed, like smack-sasl-javax, smack-resolver-javax, smack-im, jxmpp-core, jxmpp-util-cache. I’m using OSGI’ed version of xpp3 since the one coming from smack is not OSGI’ed. One solution for that could be unpacking the xpp3 and packing with an OSGI’ed manifesto. So with this dependencies, I’m still getting ClassNotFound.

org.igniterealtime.smack

smack-java7

4.1.7

org.igniterealtime.smack

smack-core

4.1.7

xpp3

xpp3

org.apache.servicemix.bundles

org.apache.servicemix.bundles.xpp3

1.1.4c_7

org.igniterealtime.smack

smack-tcp

4.1.7

org.igniterealtime.smack

smack-extensions

4.1.7

Ahh you are using OSGi. I can’t really comment on that much, since I don’t use OSGi, but yes, it could be because xpp3 is not an OSGi bundle. You could ask @Jens Offenbach if he could help, AFAIK he uses Smack with OSGi.