2015-07-19 24 views
5

Sağlayıcımı, jersey API tarafından sağlanan Exceptionmapper'ı uygulayan formata nasıl programlı olarak kaydederim? @Provider ek açıklamasını kullanmak istemiyorum ve ResourceConfig kullanarak sağlayıcıyı kaydetmek istiyorum, bunu nasıl yapabilirim? ÖrneğinBir hizmet sağlayıcısını programlı olarak istisnai uygulayan jersey içinde kaydetme

:

public class MyProvider implements ExceptionMapper<WebApplicationException> extends ResourceConfig { 

    public MyProvider() { 
     final Resource.Builder resourceBuilder = Resource.builder(); 
     resourceBuilder.path("helloworld"); 

     final ResourceMethod.Builder methodBuilder = resourceBuilder.addMethod("GET"); 
     methodBuilder.produces(MediaType.TEXT_PLAIN_TYPE) 
       .handledBy(new Inflector<ContainerRequestContext, String>() { 

      @Override 
      public String apply(ContainerRequestContext containerRequestContext) { 
       return "Hello World!"; 
      } 
     }); 

     final Resource resource = resourceBuilder.build(); 
     registerResources(resource); 
    } 

    @Override 
    public Response toResponse(WebApplicationException ex) { 
     String trace = Exceptions.getStackTraceAsString(ex); 
     return Response.status(500).entity(trace).type("text/plain").build(); 
    } 
} 

bu bunu yapmak için doğru yolu var mı?

cevap

7

Sanırım, nasıl kullanacağınızdan emin olmadığınız için ResourceConfig numaranız yok. Birincisi, bu gerekli değildir. Eğer kullanıyorsan, kendi ayrı bir sınıf olmalı. Orada haritacıyı kaydedebilirsin.

public class AppConfig extends ResourceConfig { 
    public AppConfig() { 
     register(new MyProvider()); 
    } 
} 

Ama muhtemelen bir web.xml kullanıyor. Bu durumda, farklı dağıtım modelleri hakkında daha fazla bilgi için Application Deployment and Runtime Environments de <init-param>

<servlet> 
    <servlet-name>MyApplication</servlet-name> 
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> 
    <init-param> 
     <param-name>jersey.config.server.provider.classnames</param-name> 
     <param-value> 
      org.foo.providers.MyProvider 
     </param-value> 
    </init-param> 
</servlet> 

mü izleyen bir bakışla, sağlayıcı kaydedebilirsiniz. Uygulamaları dağıtmanın birkaç farklı yolu vardır. Hatta karıştırıp eşleştirebilirsiniz (web.xml ve ResourceConfig).

+0

Neden kayıt (yeni MyProvider()) 've değil (MyProvider.class)' kayıt? –

+0

@ k-den her iki şekilde de iyidir. Eşleştiriciye bir şeyler enjekte etmedikçe, sınıfa kaydolmak daha iyidir. Bu sadece bir örnekti. Bu şekilde seçtiğim _why_ için gerçekten bir sebep yok. Tam olarak nasıl hissettiğimi :-) –

İlgili konular