BTW - how many thousands of man years have been lost to erasure?!! What a horrible mistake that decision was.
-JZ On Jul 20, 2013, at 2:24 PM, Jordan Zimmerman <[email protected]> wrote: > OK - I have a workaround. You need to create a wrapper class that acts as the > context resolver: > > @Provider > public class MyResolver implements > ContextResolver<DiscoveryContext<ServicePayload>> > { > private final GenericDiscoveryContext<ServicePayload> context; > > public MyResolver(GenericDiscoveryContext<ServicePayload> context) > { > this.context = context; > } > > @Override > public DiscoveryContext<ServicePayload> getContext(Class<?> type) > { > return context; > } > } > > In the Singletons, instead of adding discoveryContext, add: > > new MyResolver(discoveryContext) > > In my tests, this fixed the problem. > > -Jordan > > On Jul 19, 2013, at 5:01 PM, [email protected] wrote: > >> 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. >> >> _______________________________________________ >> >
