2015-01-09 5 views
10

Das ist mein web.xml:Warum hat Jersey kein Fehlerprotokoll, wenn der Status 500 ist?

<servlet> 
    <servlet-name>Jersey REST Service</servlet-name> 
    <servlet-class> 
    org.glassfish.jersey.servlet.ServletContainer 
    </servlet-class> 
    <init-param> 
    <param-name>jersey.config.server.provider.packages</param-name> 
    <param-value>rest</param-value> 
    </init-param> 
    <init-param> 
    <param-name>jersey.config.server.provider.classnames</param-name> 
    <param-value>org.glassfish.jersey.filter.LoggingFilter</param-value> 
    </init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

Und das ist meine Ressourcenklasse:

@Path("/main") 
public class MainResource { 

    @XmlRootElement 
    public class Planet { 
     public int id; 
     public String name; 
     public double radius; 
    } 

    @GET 
    @Produces(MediaType.APPLICATION_XML) 
    public Planet getPlanet() { 
     final Planet planet = new Planet(); 

     planet.id = 1; 
     planet.name = "Earth"; 
     planet.radius = 1.0; 

     return planet; 
    } 
} 

Und wenn ich die Tomcatbediener laufen, ist das Protokoll wie folgt aus:

09-Jan-2015 13:19:10.501 INFO [http-apr-8080-exec-8] org.glassfish.jersey.filter.LoggingFilter.log 1 * Server has received a request on thread http-apr-8080-exec-8 
1 > GET http://localhost:8080/rest/main 
1 > accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8 
1 > accept-encoding: gzip, deflate, sdch 
1 > accept-language: en,zh-CN;q=0.8,zh;q=0.6 
1 > connection: keep-alive 
1 > cookie: JSESSIONID=69F79D567E7ECA27A129C477B91C7758 
1 > host: localhost:8080 
1 > user-agent: Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36 

09-Jan-2015 13:19:10.597 INFO [http-apr-8080-exec-8] org.glassfish.jersey.filter.LoggingFilter.log 1 * Server responded with a response on thread http-apr-8080-exec-8 
1 < 200 
1 < Content-Type: application/xml 

09-Jan-2015 13:19:10.794 INFO [http-apr-8080-exec-8] org.glassfish.jersey.filter.LoggingFilter.log 2 * Server responded with a response on thread http-apr-8080-exec-8 
2 < 500 

Ich frage mich, warum es 500 Fehler zeigt, aber ich kann kein Fehlerprotokoll über den Ausnahme-Stack finden.

Bitte helfen Sie mir.

Antwort

19

Ich habe mein Problem behoben und beantworte jetzt meine eigene Frage.

Erstens, wie kann ich die Protokollierung der Ausnahmeverfolgung aktivieren?

@Provider 
public class ExceptionMapper implements javax.ws.rs.ext.ExceptionMapper<Exception> { 
    @Override 
    public Response toResponse(Exception exception) { 
     exception.printStackTrace(); 
     return Response.status(500).build(); 
    } 
} 

Ja, wir sollten einen ExceptionMapper auf eigene Faust implementieren.

Zweitens, was ist der Fehler meines Codes?

Die Klasse Planet sollte statisch sein.