eclipse-ee4j / eclipse-ee4j/jersey
NPE in Hk2Helper
- Dominant language
- Java
- Stars
- 730
- Forks
- 382
- PR merge metrics
- No merged PRs in 30d
Description
I very rarely get a NullPointerException as the following:
```
java.lang.NullPointerException
at org.glassfish.jersey.inject.hk2.Hk2Helper.bindBinding(Hk2Helper.java:125)
at org.glassfish.jersey.inject.hk2.Hk2Helper.bind(Hk2Helper.java:88)
at org.glassfish.jersey.inject.hk2.Hk2Helper.bind(Hk2Helper.java:66)
at org.glassfish.jersey.inject.hk2.ImmediateHk2InjectionManager.register(ImmediateHk2InjectionManager.java:58)
at org.glassfish.jersey.model.internal.CommonConfig.configureBinders(CommonConfig.java:661)
at org.glassfish.jersey.model.internal.CommonConfig.configureMetaProviders(CommonConfig.java:640)
at org.glassfish.jersey.client.ClientConfig$State.configureMetaProviders(ClientConfig.java:392)
at org.glassfish.jersey.client.ClientConfig$State.initRuntime(ClientConfig.java:445)
at org.glassfish.jersey.internal.util.collection.Values$LazyValueImpl.get(Values.java:317)
at org.glassfish.jersey.client.ClientConfig.getRuntime(ClientConfig.java:820)
at org.glassfish.jersey.client.ClientRequest.getClientRuntime(ClientRequest.java:176)
at org.glassfish.jersey.client.ClientRequest.getInjectionManager(ClientRequest.java:567)
at org.glassfish.jersey.client.JerseyWebTarget.onBuilder(JerseyWebTarget.java:371)
at org.glassfish.jersey.client.JerseyWebTarget.request(JerseyWebTarget.java:199)
at org.glassfish.jersey.client.JerseyWebTarget.request(JerseyWebTarget.java:38)
at org.glassfish.jersey.client.proxy.WebResourceFactory.invoke(WebResourceFactory.java:298)
at com.sun.proxy.$Proxy5.sayHello(Unknown Source)
at com.github.querqueq.ForceNpeTest.test(ForceNpeTest.java:29)
```
I was never able to reproduce that NPE anywhere where it actually occurs.
The NPE shown above was forced with the following code:
```java
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.core.MediaType;
import org.glassfish.jersey.apache.connector.ApacheConnectorProvider;
import org.glassfish.jersey.client.ClientConfig;
import org.glassfish.jersey.client.proxy.WebResourceFactory;
import org.junit.Test;
public class ForceNpeTest {
@Test
public void test() {
ClientBuilder clientBuilder = ClientBuilder.newBuilder()
.withConfig(new ClientConfig().connectorProvider(new ApacheConnectorProvider()))
.register(new org.glassfish.jersey.internal.inject.AbstractBinder() {
@Override
protected void configure() {
org.glassfish.jersey.internal.inject.Binding b = null;
bind(b);
}
});
Api client = WebResourceFactory.newResource(Api.class, clientBuilder.build().target("http://localhost/"));
client.sayHello();
}
@Path("api/V1")
public interface Api {
@GET
@Produces(MediaType.TEXT_PLAIN)
String sayHello();
}
}
```
Nowhere in my affected services is the method `org.glassfish.jersey.internal.inject.AbstractBinder.bind(Binding)` being used to bind anything.
Does somebody have any pointers on how else `null` could get into `org.glassfish.jersey.internal.inject.AbstractBinder.internalBindings` or is there some other way the above NPE could occur?
Contributor guide
Assessment
This issue has not been assessed yet.