2016-04-01 19 views
0

Ich habe eine @Provider annotierte Exception Mapper, aber Jersey wird nicht geladen oder registriert.JaxRS Exception Mapper nicht gefunden

In meinem web.xml (abgespeckte):

<servlet> 
    <servlet-name>Jersey</servlet-name> 
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class> 
    <init-param> 
     <param-name>jersey.config.server.provider.packages</param-name> 
     <param-value> 
      com.my.company; 
      com.fasterxml.jackson.jaxrs.json; 
     </param-value> 
    </init-param> 

    <load-on-startup>1</load-on-startup> 
</servlet> 

der Mapper:

package com.my.company.some.package; 

@Provider 
public class MyExceptionMapper implements ExceptionMapper<MyException> { 
    @Override 
    public Response toResponse(MyException exception) { 
     return Response.status(Status.NOT_FOUND).build(); 
    } 
} 

Ich habe @Path kommentierte API-Klassen in der com.my.company.other.package Paket, diejenigen richtig gefunden und ich auf sie zugreifen kann, ohne Probleme. Keiner der @Provider kommentierten Mapper gefunden.

Wenn ich eine Protokollnachricht in den Mapper-Konstruktor und/oder die toResponse-Methode legte, werden diese auch nicht angezeigt. Ich bin zu dem Schluss gezwungen, dass Jersey einfach nicht finden kann oder entscheidet, die Klassen nicht zu laden. Wie bekomme ich das zum Laufen?

+0

Ich sehe nichts falsch mit dem, was Sie zur Verfügung gestellt haben. Vielleicht etwas, das du nicht bereitstellst. Nicht sicher, was es sein könnte. Können Sie ein kleines Github-Projekt erstellen, das das Problem reproduziert? –

Antwort

0

Das Attribut des Providerpakets in Jersey ist nicht rekursiv. Es scannt nur diese Pakete, nicht Pakete, die mit diesem Namen beginnen.

+0

Das rekursive Verhalten ist tatsächlich abhängig von der Eigenschaft ['jersey.config.server.provider.scanning.recursive'] (https://jersey.java.net/apidocs/2.22/jersey/org/glassfish/jersey/server/ ServerProperties.html # PROVIDER_PACKAGES), das ist standardmäßig –

+0

ich überprüft, und die Eigenschaft ist nicht in meiner 'web.xml', so nehme ich an, es wird standardmäßig auf wahr. Dies wird dadurch unterstützt, dass die mit "@ Path" annotierten Klassen in Unterpaketen korrekt geladen werden. – Jorn

+0

und nur wundernd, haben Sie versucht, den Paketnamen explizit hinzuzufügen? –

Verwandte Themen