eclipse-ee4j / eclipse-ee4j/jersey

NPE in Hk2Helper

Open
#4,986 3 comments 0 reactions 0 assignees View on GitHub
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

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.