Hello,

I am using Curator's curator-x-discovery-sever and trying to set it up with 
Jersey and Tomcat.

I created my resource class, injected the class. Also injected those singletons 
mentioned.
(following this page 
http://curator.incubator.apache.org/curator-x-discovery-server/index.html )

However, I am getting NPE when the contextResolver tries to getContext.

The ContextResolver singleton is injected, and it looks like the @Context 
injection isn't happening.

Can someone please help me to see what is wrong with my code?

Thanks.

Here is my code, the highlighted line is where the exception happens:

Resource

@Path("compass")
public class CompassResource extends DiscoveryResource<ServicePayload>
{
    public CompassResource(@Context 
ContextResolver<DiscoveryContext<ServicePayload>> resolver)
    {
        super(resolver.getContext(DiscoveryContext.class));
    }
}

Application

public class DiscoveryServerApplication extends Application
{
    @Override
    public Set<Class<?>> getClasses() {
        Set<Class<?>> s = new HashSet<Class<?>>();
        //s.add(MyResource.class);
        s.add(CompassResource.class);
        return s;
    }

    @Override
    public Set<Object> getSingletons() {
        final Set<Object> singletons = Sets.newHashSet();

        // inject ServiceDiscovery singleton
        CuratorFrameworkFactory.Builder builder = 
CuratorFrameworkFactory.builder()
                
.connectString("localhost:2181").sessionTimeoutMs(300000).connectionTimeoutMs(30000)
                .retryPolicy(new ExponentialBackoffRetry(1000,3));
        CuratorFramework client = builder.build();
        client.start();

        ServiceDiscovery<ServicePayload> serviceDiscovery = 
ServiceDiscoveryBuilder.builder(ServicePayload.class)
                .client(client).basePath("/").build();
        singletons.add(serviceDiscovery);

        // inject DiscoveryContext singleton
        GenericDiscoveryContext<ServicePayload> discoveryContext = new 
GenericDiscoveryContext<ServicePayload>
                (serviceDiscovery, new RandomStrategy<ServicePayload>(), 500, 
ServicePayload.class);
        singletons.add(discoveryContext);

        // inject JsonServiceInstanceMarshaller singleton
        singletons.add(new JsonServiceInstanceMarshaller(discoveryContext));

        // inject JsonServiceInstancesMarshaller singleton
        singletons.add(new JsonServiceInstancesMarshaller(discoveryContext));

        // inject JsonServiceNamesMarshaller
        singletons.add(new JsonServiceNamesMarshaller());

        return singletons;
    }
}
web.xml

    <servlet>
        <servlet-name>Curator Discovery Server</servlet-name>
        
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>javax.ws.rs.Application</param-name>
            
<param-value>com.lb.eqr.discovery.server.DiscoveryServerApplication</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>Curator Discovery Server</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>

===========

Here is the exception:

root cause
java.lang.NullPointerException
        
com.lb.eqr.discovery.server.CompassResource.<init>(CompassResource.java:23)
        sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
        
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
        java.lang.reflect.Constructor.newInstance(Constructor.java:513)
        
org.glassfish.hk2.utilities.reflection.ReflectionHelper.makeMe(ReflectionHelper.java:1091)
        org.jvnet.hk2.internal.ClazzCreator.createMe(ClazzCreator.java:244)
        org.jvnet.hk2.internal.ClazzCreator.create(ClazzCreator.java:319)
        
org.jvnet.hk2.internal.SystemDescriptor.create(SystemDescriptor.java:448)
        
org.glassfish.jersey.process.internal.RequestScope.findOrCreate(RequestScope.java:157)
        org.jvnet.hk2.internal.Utilities.createService(Utilities.java:2203)
        
org.jvnet.hk2.internal.ServiceLocatorImpl.getService(ServiceLocatorImpl.java:579)
        
org.jvnet.hk2.internal.ServiceLocatorImpl.getService(ServiceLocatorImpl.java:566)
        
org.glassfish.jersey.internal.inject.Injections.getOrCreate(Injections.java:172)
        
org.glassfish.jersey.server.model.MethodHandler$ClassBasedMethodHandler.getInstance(MethodHandler.java:185)
        
org.glassfish.jersey.server.internal.routing.PushMethodHandlerRouter.apply(PushMethodHandlerRouter.java:105)
        
org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage.java:118)
        
org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage.java:121)
        
org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage.java:121)
        
org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage.java:121)
        
org.glassfish.jersey.server.internal.routing.RoutingStage._apply(RoutingStage.java:121)
        
org.glassfish.jersey.server.internal.routing.RoutingStage.apply(RoutingStage.java:102)
        
org.glassfish.jersey.server.internal.routing.RoutingStage.apply(RoutingStage.java:62)
        org.glassfish.jersey.process.internal.Stages.process(Stages.java:197)
        org.glassfish.jersey.server.ServerRuntime$1.run(ServerRuntime.java:215)
        org.glassfish.jersey.internal.Errors$1.call(Errors.java:271)
        org.glassfish.jersey.internal.Errors$1.call(Errors.java:267)
        org.glassfish.jersey.internal.Errors.process(Errors.java:315)
        org.glassfish.jersey.internal.Errors.process(Errors.java:297)
        org.glassfish.jersey.internal.Errors.process(Errors.java:267)
        
org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:317)
        
org.glassfish.jersey.server.ServerRuntime.process(ServerRuntime.java:198)
        
org.glassfish.jersey.server.ApplicationHandler.handle(ApplicationHandler.java:946)
        org.glassfish.jersey.servlet.WebComponent.service(WebComponent.java:323)
        
org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:372)
        
org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:335)
        
org.glassfish.jersey.servlet.ServletContainer.service(ServletContainer.java:218)



_______________________________________________

This message is for information purposes only, it is not a recommendation, 
advice, offer or solicitation to buy or sell a product or service nor an 
official confirmation of any transaction. It is directed at persons who are 
professionals and is not intended for retail customer use. Intended for 
recipient only. This message is subject to the terms at: 
www.barclays.com/emaildisclaimer.

For important disclosures, please see: 
www.barclays.com/salesandtradingdisclaimer regarding market commentary from 
Barclays Sales and/or Trading, who are active market participants; and in 
respect of Barclays Research, including disclosures relating to specific 
issuers, please see http://publicresearch.barclays.com.

_______________________________________________

Reply via email to