# Java Jersey Interceptor



## Tru5T (15. Feb 2017)

Hallo,

ich bin gerade dabei eine REST Schnittstelle mit Java EE in Zusammenspiel mit Tomcat zu schreiben. Das funktioniert soweit alles ganz gut. Ich möchte nun einen Interceptor schreiben, der die JSON Response Strings manipuliert und ergänzt. Das Problem, das ich habe, ist, dass mein Interceptor nicht aufgerufen wird und ich nicht genau weiß warum. Ich schreib hier noch meinen bisherigen Source-Code und hoffe auf einige hilfreiche Tipps von euch.

JsonDataInterface.java
@NameBinding
@Retention(RetentionPolicy.RUNTIME)
public @interface JsonDataInterceptor {
}

JsonDataInterfaceImpl.java
@Provider
@JsonDataInterceptor
public class JsonDataInterceptorImpl implements WriterInterceptor {

@Override
public void aroundWriteTo(WriterInterceptorContext context) throws IOException, WebApplicationException {
       OutputStream outputStream = context.getOutputStream();

       String test = "TEST";
       outputStream.write(test.getBytes());

       context.setOutputStream(outputStream);
       context.proceed();
   }
}

In der Klasse, wo ich den Interceptor verwende, habe ich nur noch @JsonDataInterceptor über die Methode geschrieben aber wie gesagt aufgerufen wird leider nichts...

Ich danke euch für eure Hilfe!

Grüße
Tru5T


----------



## Lit-Web (8. Mrz 2017)

Hallo,
also ich weiß nicht ob du schon eine Lösung hast, aber ich denke schon.

Jedenfalls ist dein JsonDataInterceptor eine Annotation, welche allerdings leer ist, also keine Parameterdefinitionen besitzt und somit eh sinnlos ist.

Eine Annotation wird nicht einfach mal so aufgerufen nur weil sie an einer Methode, Klasse oder auch Eigenschaft notiert wurde. Dazu musst du über die Javareflection API gehen und diese dann auswerten.

Was hast du eigentlich genau vor?


----------



## mrBrown (8. Mrz 2017)

Lit-Web hat gesagt.:


> Jedenfalls ist dein JsonDataInterceptor eine Annotation, welche allerdings leer ist, also keine Parameterdefinitionen besitzt und somit eh sinnlos ist.



Nein, Annotations ohne Parameter sind alles andere als Sinnlos, die dienen eben als Marker, nicht immer braucht's dafür Parameter - wie eben in diesem Fall.



Lit-Web hat gesagt.:


> Eine Annotation wird nicht einfach mal so aufgerufen nur weil sie an einer Methode, Klasse oder auch Eigenschaft notiert wurde. Dazu musst du über die Javareflection API gehen und diese dann auswerten.



Darum kümmert sich in diesem Fall das Framework.




Tru5T hat gesagt.:


> Das Problem, das ich habe, ist, dass mein Interceptor nicht aufgerufen wird und ich nicht genau weiß warum.


Obiger Code sieht auf den ersten Blick richtig aus. 
Hast du da mal ein einfaches sout reingesetzt, ums zu testen?


----------



## AndyJ (9. Mrz 2017)

mrBrown hat gesagt.:


> Nein, Annotations ohne Parameter sind alles andere als Sinnlos, die dienen eben als Marker, nicht immer braucht's dafür Parameter - wie eben in diesem Fall.
> Darum kümmert sich in diesem Fall das Framework.
> ...


I schaetze mal an dem fehlenden Framework liegt es. Die Annotation JsonDataInterceptor hat der Autor ja selber erstellt. Damit hat Lit-Web schon Recht, diese Annotation muss auch selbst ausgewertet werden, normalerweise via Reflection.

Cheers,
Andy


----------



## mrBrown (9. Mrz 2017)

AndyJ hat gesagt.:


> I schaetze mal an dem fehlenden Framework liegt es. Die Annotation JsonDataInterceptor hat der Autor ja selber erstellt. Damit hat Lit-Web schon Recht, diese Annotation muss auch selbst ausgewertet werden, normalerweise via Reflection.


Nein. Er verwendet ein Framework - steht im Titel.


----------



## AndyJ (9. Mrz 2017)

Kann schon sein. Das Framework kann eine Customannotation aber auch nicht verarbeiten.


----------



## mrBrown (9. Mrz 2017)

AndyJ hat gesagt.:


> Kann schon sein. Das Framework kann eine Customannotation aber auch nicht verarbeiten.


Doch, kann es.


----------



## stg (10. Mrz 2017)

Tru5T hat gesagt.:


> In der Klasse, wo ich den Interceptor verwende, habe ich nur noch @JsonDataInterceptor über die Methode geschrieben aber wie gesagt aufgerufen wird leider nichts...



Dann zeig den Teil doch auch mal. Ich sehe hier soweit auch keinen Fehler. Außerdem könnte deine web.xml Configuration hilfreich sein.


----------

