Jersey 2.3 Interceptor Beispiel nicht funktioniert

Ich versuche, das Trikot 2.3 Interceptor Beispiel finden Sie hier mit Tomcat 7 und name verbindlich zu arbeiten. Ich habe die folgenden gemäß dem Beispiel in den link...

@NameBinding
@Retention(RetentionPolicy.RUNTIME)
public @interface Compress{}

und

@Compress
public class GZIPWriterInterceptor implements WriterInterceptor {
@Override
public void aroundWriteTo(WriterInterceptorContext context) throws IOException, WebApplicationException {
  final OuputStream outputStream .....  
  ..some logging added here..
}

und

@Path("helloword")
public class HelloWorldResource {

  @GET
  @Path("to-much-data")
  @Compress
  public String getVeryLongString(){
    String str = "a very ...
    ..... large string";
    return str;
  }
}

Ich habe nicht Hinzugefügt nichts extra für die web.xml zum registrieren der Interceptor dies nicht diskutiert, die in der Bedienungsanleitung Dokumentation. Ich beachten Sie, dass dies war die Methode verwendet, in ealier version von Jersey.

Getestet habe ich wenn die Kompression Interceptor arbeitete mit einem client erstellt, aus der jersey-client-api. Ich habe dafür gesorgt, das HttpHeaders.ACCEPT_ENCODING, "gzip" Header Hinzugefügt wird, um die Invocation.Builder vor dem Absenden der Anfrage. Ich habe auch Hinzugefügt die Protokollierung zu GZIPWriterInterceptor. Wenn ich test, um zu sehen, ob die Antwort ist gezippt, kommt es zurück in plain text (Content-Type - text/plain wird in der response header) und ich sehe nicht, das GZIPWriterInterceptor Meldung in den logs.

Hat jemand eine Idee, was ich falsch mache oder was ich versuchen könnte?

BEARBEITEN - ich aktualisiert meine web.xml der Versuch zu registrieren, die GZIPWriterInterceptor Klasse.

......
.
<servlet>
  <servlet-name>Jersey Test Servlet</servlet-name>
  <servlet-value>org.glassfish.jersey.servlet.ServletContainer</servlet-value>
  <init-param>
    <param-name>jersey.config.server.provider.packages</param-name>
    <param-value>com.test.jersey</param-value>
  </init-param>
  <init-param>
    <param-name>com.ws.rs.ext.WriterInterceptor</param-name>
    <param-value>com.test.jersey.GZIPWriterInterceptor</param-value>
  </init-param>
  <load-on-startup>1</load-on-startup>
</servlet>
.
.......

Dieser noch nicht gearbeitet. Registriere ich die GZIPWriterInterceptor mit dem parameter-Namen der WriterInterceptor oder etwas anderes?

UPDATE - ich habe es geschafft die Kompression zu arbeiten, durch die Erweiterung javax.ws.rs.core.Anwendung und registrieren jede Klasse, die ich verlange (HelloWorldResource.class, GZIPWriterInterceptor.class, Compress.class), wie beschrieben in der Bereitstellung Agnostiker Anwendung Modell finden Sie hier.

Registrierte ich meine Klasse in der Anwendung web.xml...

<display-name>JerseyInterceptorTest2</display-name>
  <servlet>
    <servlet-name>Jersey Rest Test</servlet-name>
    <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
    <init-param>
      <param-name>javax.ws.rs.Application</param-name>
      <param-value>com.jersey.test.MyApplication</param-value>
    </init-param>
    <load-on-startup>1</load-on-startup>
  </servlet>
  <servlet-mapping>
     <servlet-name>Jersey Rest Test</servlet-name>
     <url-pattern>/*</url-pattern>
  </servlet-mapping>

Habe ich erfolglos versucht, sich zu registrieren meiner Pakete durch die Erweiterung ResourceConfig gemäß Beispiel 4.2. und von der früheren Methode durch die web.xml

<init-param>
    <param-name>jersey.config.server.provider.packages</param-name>
    <param-value>com.test.jersey</param-value>
</init-param>

Es ist immer noch nicht klar, warum die package-Registrierung funktioniert nicht.

InformationsquelleAutor Jimbo Jambo | 2013-11-01
Schreibe einen Kommentar