次のようなメソッドを持つ単純な RESTEasy アプリケーションがあります。
@POST
@Path("/stuff")
@Produces({"application/json", "application/xml"})
public MyObject doStuff(MultivaluedMap<String, String> String formParams) {
// do stuff
}
入ってくるメッセージをインターセプトしたいのですが、どういうわけかインターセプターがトリガーされません。ここにあります:
@Provider
@ServerInterceptor
@Precedence("SECURITY")
public class JAXRSInterceptor implements MessageBodyReaderInterceptor {
public Object read(MessageBodyReaderContext context) throws IOException, WebApplicationException {
//do stuff
return context.proceed();
}
}
RESTEasy の依存関係は次のとおりです。
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-jaxrs</artifactId>
<version>2.3.4.Final</version>
</dependency>
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-jaxb-provider</artifactId>
<version>2.3.4.Final</version>
</dependency>
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-jackson-provider</artifactId>
<version>2.3.4.Final</version>
</dependency>
これが web.xml の一部です。
<web-app>
<display-name>My frontend</display-name>
<context-param>
<param-name>resteasy.scan</param-name>
<param-value>true</param-value>
</context-param>
<listener>
<listener-class>org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap</listener-class>
</listener>
<context-param>
<param-name>resteasy.use.builtin.providers</param-name>
<param-value>true</param-value>
</context-param>
<servlet>
<servlet-name>Frontend</servlet-name>
<servlet-class>org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>Frontend</servlet-name>
<url-pattern>/api/*</url-pattern>
</servlet-mapping>
...
REST サービスは完全に機能し、正常に機能するExceptionMapperもあります。
インターセプターはまだ機能しません。Tomcat 6 と 7 を試しました。何が間違っていますか?
https://github.com/henrik242/resteasy-interceptor-demoで問題を示す簡単な例を作成しました。Tomcat でビルドおよびデプロイし、http://localhost:8080/resteasy-interceptor-demo
. テスト #1、#2、および #3 を実行します。
編集:これはバグのようです。https://issues.jboss.org/browse/RESTEASY-797として提出しました