I am trying to initialize PulsarClient in spring-boot's configuration class using the following code but getting
Java Details:
<properties>
<java.version>20</java.version>
<pulsar.version>3.0.0</pulsar.version>
<spring.boot.version>3.1.0</spring.boot.version>
</properties>
@Configuration
public class PulsarConfiguration {
@Bean
public PulsarClient pulsarClient() throws PulsarClientException {
return PulsarClient.builder().serviceUrl("pulsar://localhost:6650").build();
}
}
#Error:
Cannot get DNS TTL settings from sun.net.InetAddressCachePolicy class
java.lang.IllegalAccessException: class org.apache.pulsar.common.util.netty.DnsResolverUtil cannot access class sun.net.InetAddressCachePolicy (in module java.base) because module java.base does not export sun.net to unnamed module @6069db50
at java.base/jdk.internal.reflect.Reflection.newIllegalAccessException(Reflection.java:394) ~[na:na]
at java.base/java.lang.reflect.AccessibleObject.checkAccess(AccessibleObject.java:709) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:569) ~[na:na]
at org.apache.pulsar.common.util.netty.DnsResolverUtil.<clinit>(DnsResolverUtil.java:46) ~[pulsar-client-3.0.0.jar:3.0.0]
at org.apache.pulsar.client.impl.ConnectionPool.createAddressResolver(ConnectionPool.java:159) ~[pulsar-client-3.0.0.jar:3.0.0]
at org.apache.pulsar.client.impl.ConnectionPool.lambda$new$1(ConnectionPool.java:126) ~[pulsar-client-3.0.0.jar:3.0.0]
at java.base/java.util.Optional.orElseGet(Optional.java:364) ~[na:na]
at org.apache.pulsar.client.impl.ConnectionPool.<init>(ConnectionPool.java:126) ~[pulsar-client-3.0.0.jar:3.0.0]
at org.apache.pulsar.client.impl.ConnectionPool.<init>(ConnectionPool.java:95) ~[pulsar-client-3.0.0.jar:3.0.0]
at org.apache.pulsar.client.impl.ConnectionPool.<init>(ConnectionPool.java:90) ~[pulsar-client-3.0.0.jar:3.0.0]
at org.apache.pulsar.client.impl.PulsarClientImpl.<init>(PulsarClientImpl.java:196) ~[pulsar-client-3.0.0.jar:3.0.0]
at org.apache.pulsar.client.impl.PulsarClientImpl.<init>(PulsarClientImpl.java:153) ~[pulsar-client-3.0.0.jar:3.0.0]
at org.apache.pulsar.client.impl.ClientBuilderImpl.build(ClientBuilderImpl.java:63) ~[pulsar-client-3.0.0.jar:3.0.0]
at in.silentsudo.springbootmongodbdatagenerator.PulsarConfiguration.pulsarClient(PulsarConfiguration.java:16) ~[classes/:na]
#Ref: Found a thread here https://github.com/apache/pulsar/issues/20282, but I do not wish to downgrade, thank you.
This is unavoidable as of JDK17 and the only way I know to get rid of the warning is to add-opens
at JVM launch time. By the time we are in the Java client there is nothing that can be done (see this article for more info on add-opens
). As such, the only "downgrade" would be to go back to a lower JDK OR set the add-opens
at JVM launch time. Here is an example of where we set it in spring-pulsar.
TIP: It looks like you are constructing the client yourself. I am not sure if you are using spring-pulsar
or not, but when using spring-pulsar
and spring-boot
, the client is automatically configured for you.