2016-05-07 62 views
5

Gömülü iskelet Demo project on github ve aşağıdaki temel kod ile basit jersey uygulamasına sahip olduğumu varsayalım.Jersey'deki tüm kayıtlı JAX-RS Varlık Sağlayıcıları nasıl listelenir

Geri jersey1 ile günlerde ben günlük mesajları vardı:

мая 07, 2016 5:05:50 AM com.sun.jersey.api.core.PackagesResourceConfig init 
INFO: Scanning for root resource and provider classes in the packages: 
    ru.varren 
мая 07, 2016 5:05:50 AM com.sun.jersey.api.core.ScanningResourceConfig logClasses 
INFO: Root resource classes found: 
    class ru.varren.MyResource 
мая 07, 2016 5:05:50 AM com.sun.jersey.api.core.ScanningResourceConfig logClasses 
INFO: Provider classes found: 
    class ru.varren.JsonProvider 
мая 07, 2016 5:05:50 AM com.sun.jersey.server.impl.application.WebApplicationImpl _initiate 
INFO: Initiating Jersey application, version 'Jersey: 1.19.1 03/11/2016 02:08 PM' 

Ama şimdi jersey2 çalışmak çalışıyorum ve thiere artık log bilgisi olduğunu. Yani, benim soru kayıtlı tüm JAX-RS Varlık Sağlayıcıları listelemek için nasıl olduğunu. Onları nerede listeleyeceğim umrumda değil. main işlevinde veya bazı @GETMyResource yönteminde. Muhtemelen kurulumumdaki bir şeyi değiştirmem veya kaydediciyi boolean'a koymam gerekiyor ama bulamıyorum.

Bu, yalnızca test amaçlıdır. Tüm servis sağlayıcı sınıflarının basit baskısı benim için yeterli olacaktır. Soğutucu seçeneği, sağlayıcıyı yazdırmak ve @Produces ve @Consumes MediaType'ı kullanmaktır.

MyResource.java

@Path("test") 
public class MyResource { 

    @GET 
    @Produces({ MediaType.APPLICATION_JSON }) 
    public Response getPersons() { 
     return Response.ok("[some data here]").build(); 
    } 

} 

MyApplication.java

public class MyApplication { 

    public static void main(String[] args) throws Exception { 
     URI baseUri = UriBuilder.fromUri("http://localhost/").port(9998).build(); 
     ResourceConfig config = new ResourceConfig(MyResource.class); 
     config.packages("ru.varren"); 
     Server server = JettyHttpContainerFactory.createServer(baseUri, config, true); 
     server.join(); 
    } 

} 

Ve gradle.build

dependencies { 
    compile 'org.glassfish.jersey.containers:jersey-container-servlet:2.22.2' 
    compile 'org.glassfish.jersey.containers:jersey-container-servlet-core:2.22.2' 
    compile 'org.glassfish.jersey.media:jersey-media-json-jackson:2.22.2' 
    compile 'org.glassfish.jersey.containers:jersey-container-jetty-http:2.22.2' 

    compile 'org.eclipse.jetty:jetty-server:9.1.0.M0' 
    compile 'org.eclipse.jetty:jetty-servlet:9.1.0.M0' 
} 
+0

çaprazlayan bir örneğini göstermektedir: // jersey.java.net/apidocs/2.22.2/jersey/org/glassfish/jersey/server/monitoring/ApplicationEvent.html) ve "uygulama başlatıldı" da ['ApplicationEvent'] üzerindeki yöntemleri kullanın (https: // jersey.java.net/apidocs/2 .22.2/jersey/org/glassfish/jersey/server/monitoring/ApplicationEvent.html) kaynakları ve sağlayıcıları almak için –

+0

@peeskillet Evet, tam olarak ne aradığımı. Özel 'ApplicationEventListener' sınıfında 'onEvent' yöntemindeki 'applicationEvent.getProviders() ', ihtiyacım olan tüm bilgileri bana verir. https://i.gyazo.com/7050dccb82d4c2445709b2079817ce00.png Ve işte aynı zamanda güzel doktorlar https://jersey.java.net/documentation/latest/monitoring_tracing.html. Yorumunuzu cevap olarak gönderir misiniz? Kabul Edilen bir cevap olarak işaretleyeceğim – varren

+0

@peeskillet Bunun için herhangi bir satıcı-nötr API var mı? –

cevap

3

Sen Bir ApplicationEventListener kullanabilir ve INITIAILZATION_FINISHED'da ApplicationEvent'dan bir dizi kaynak ve sağlayıcı alabilirsiniz.

@Provider 
public class ProviderLoggingListener implements ApplicationEventListener { 

    @Override 
    public void onEvent(ApplicationEvent event) { 
     switch (event.getType()) { 
      case INITIALIZATION_FINISHED: { 
       Set<Class<?>> providers = event.getProviders(); 
       ResourceConfig immutableConfig = event.getResourceConfig(); 
       ResourceModel resourcesModel = event.getResourceModel(); 
       break; 
      } 
     } 
    } 

    @Override 
    public RequestEventListener onRequest(RequestEvent requestEvent) { 
     return null; 
    } 
} 

bakınız, örneğin: