@PiotrKochański がくれたヒントのおかげで、私が望んでいたものを正確に実装することに成功しました。最大の問題は、Glassfish を使用しなければならないことです。デフォルトでは、Glassfish は Jersey を使用して JAX を処理します。
これを完了するのに 10 時間以上も苦労しました。
まず第一に、Mavenを使用してください。これにより、作業が非常に簡単になります。
2 番目のステップでは、JBoss リポジトリを pom.xml に追加します。
<repositories>
<repository>
<id>jboss-public-repository-group</id>
<name>JBoss Public Maven Repository Group</name>
<url>https://repository.jboss.org/nexus/content/groups/public-jboss/</url>
<layout>default</layout>
<releases>
<enabled>true</enabled>
<updatePolicy>never</updatePolicy>
</releases>
<snapshots>
<enabled>true</enabled>
<updatePolicy>never</updatePolicy>
</snapshots>
</repository>
</repositories>
3 番目のステップでは、依存関係を pom.xml に追加します
<!-- Needed for validator interceptors -->
<dependency>
<groupId>org.jboss.seam.rest</groupId>
<artifactId>seam-rest</artifactId>
<version>3.1.0.Final</version>
</dependency>
<!-- JBoss' RS implementation -->
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-jaxrs</artifactId>
<version>2.3.4.Final</version>
</dependency>
<!-- Because I use JSON I need RESTeasy be able to handle this -->
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-jettison-provider</artifactId>
<version>2.3.4.Final</version>
</dependency>
<!-- This is THE part that integrates validation in RESTeasy -->
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-hibernatevalidator-provider</artifactId>
<version>2.3.4.Final</version>
</dependency>
最後の依存関係にはかなりの時間がかかりました。@PiotrKochańskiが指摘したドキュメントでは、これについて言及されていませんでした。ただし、ドキュメントの別のバージョンでは、次のことがわかりました。
API 実装と RESTEasy の統合は、resteasy-hibernatevalidator-provider コンポーネントを介して行われます。統合するには、resteasy-hibernatevalidator-provider と hibernate-validator をクラスパスに追加する必要があります。Maven では、次の依存関係を含めるだけです。
<dependency>
<groupId>org.jboss.resteasy</groupId>
<artifactId>resteasy-hibernatevalidator-provider</artifactId>
<version>2.3-RC1</version>
</dependency>
4 番目のステップは、これを web.xml に追加することでした。
<context-param>
<param-name>resteasy.scan</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>resteasy.servlet.mapping.prefix</param-name>
<param-value>/rest</param-value>
</context-param>
<listener>
<listener-class>org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap</listener-class>
</listener>
<servlet>
<servlet-name>REST Service</servlet-name>
<servlet-class>org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>REST Service</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
5 番目のステップは、Web サービス クラスを次のように変更することでした。
@javax.ejb.Stateless
@Path("test")
public class testRS
{
@GET
@Path("foobar/{fooBar}")
@Produces(MediaType.APPLICATION_JSON)
@org.jboss.resteasy.spi.validation.ValidateRequest
public String testService(@FooBar @PathParam("fooBar") Long fooBar)
{
return "tested with: " + fooBar;
}
}
6 番目のステップは、 を次のように変更することでした@interface
。
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
@Constraint(validatedBy = FooBarValidator.class)
public @interface FooBarParam
{
String message() default "{constraint.FooBar}";
Class<?>[] groups() default {};
Class<? extends Payload>[] payload() default {};
}
おまけとしても。Emmanuel Bernard による Bean Validation に関するプレゼンテーションに出くわしました。これは多くの興味深いことを説明しているので、共有したいと思いました。