2015-07-19 14 views
5

Come registro il mio fornitore a livello di programmazione in jersey che implementa l'Exceptionmapper fornito dall'API jersey? Non voglio usare l'annotazione @Provider e voglio registrare il provider usando ResourceConfig, come posso farlo?Registrazione di un fornitore in modo programmatico in jersey che implementa exceptionmapper

Ad esempio:

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(); 
    } 
} 

È questo il modo corretto di fare questo?

risposta

7

Suppongo che tu non abbia un ResourceConfig, dal momento che sembra non essere sicuro di come utilizzarlo. Per uno, non è richiesto. Se si utilizza do, dovrebbe essere la sua classe separata. Lì puoi registrare il mappatore.

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

Ma probabilmente stai usando un web.xml. In questo caso, è possibile registrare il provider, con il seguente <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> 

dare un'occhiata a Application Deployment and Runtime Environments per maggiori informazioni sui diversi modelli di distribuzione. Esistono diversi modi per distribuire le applicazioni. Puoi persino mescolare e abbinare (web.xml e ResourceConfig).

+0

Perché 'register (new MyProvider())' e non 'register (MyProvider.class)'? –

+0

@ k-den in entrambi i casi va bene. A meno che non si voglia iniettare cose nel mapper, meglio registrarsi per classe. Questo era solo un esempio. Non c'è davvero una ragione per cui ho scelto questo modo. Proprio come mi sentivo in quel momento :-) –