これは、RequestHandlerを作成し、実際の HandlersFactory をオーバーライドしてリクエスト ハンドラーを含むリストを返すことにより、部分的にサポートされている方法です。この設定については、こちらで説明しています。このリクエスト ハンドラは、InvokeMethodHandler (最後に呼び出されたリクエスト ハンドラであり、実際にリソース メソッドを呼び出すもの) の直前に、リクエスト処理チェーンに挿入されます。
(実際に JAX/RS リソースを呼び出す) InvokeMethodHandlerのソース コードを読むことに基づいて、次のようにパラメーター、インスタンス、およびメソッド パラメーターを取得できます。
// Get Method Validator from hibernate
MethodValidator validator = Validation.byProvider(HibernateValidator.class).configure()
.buildValidatorFactory().getValidator().unwrap(
MethodValidator.class);
// Extract the method parameters, object instance and method metadata from the JAX/RS internals.
Method javaMethod = null;
Object instance = null;
Object[] parameters = null;
SearchResult searchResult = context.getAttribute(SearchResult.class);
javaMethod = searchResult.getMethod().getMetadata()
.getReflectionMethod();
parameters = searchResult.getInvocationParameters();
instance = searchResult.getResource().getInstance(context);
// Use all this to perform validation...
Set<MethodConstraintViolation<Object>> violations = validator
.validateAllParameters(instance, javaMethod, parameters);
if (!violations.isEmpty()) {
// do something with the violations here
}
インスタンス、パラメーター、およびメタデータを取得するために wink の実装の詳細に依存しているため (私が知る限り文書化されていません)、これはややハックです (この情報にアクセスするためのパブリックな方法が提供されているとよいでしょう)。ただし、プロキシで発生するリフレクションから複数のオーバーヘッドを推測しないため、プロキシを使用するよりも多少望ましいです。