2.18. リソースメタデータを変更する RESTEasy SPI
JBoss EAP は、ResourceBuilder
を使用して作成されるリソースクラスメタデータを編集するための RESTEasy サービスプロバイダーインターフェイス (SPI) を提供します。JAX-RS デプロイメントを処理する場合、RESTEasy は ResourceBuilder
を使用して各 JAX-RS リソースのメタデータを作成します。このようなメタデータは、特に ResourceClass
インターフェイスで org.jboss.resteasy.spi.metadata
パッケージのメタデータ SPI を使用して定義されます。
package org.jboss.resteasy.spi.metadata; public interface ResourceClass { String getPath(); Class<?> getClazz(); ResourceConstructor getConstructor(); FieldParameter[] getFields(); SetterParameter[] getSetters(); ResourceMethod[] getResourceMethods(); ResourceLocator[] getResourceLocators(); }
RESTasy では、ResourceClassProcessor
インターフェイスの実装によって、メタデータ生成のカスタマイズが可能になります。以下の例は、この SPI の使用例を示しています。
package org.jboss.resteasy.test.core.spi.resource; import org.jboss.logging.Logger; import org.jboss.resteasy.spi.metadata.ResourceClass; import org.jboss.resteasy.spi.metadata.ResourceClassProcessor; import javax.ws.rs.ext.Provider; @Provider public class ResourceClassProcessorImplementation implements ResourceClassProcessor { protected static final Logger logger = Logger.getLogger(ResourceClassProcessorImplementation.class.getName()); @Override public ResourceClass process(ResourceClass clazz) { logger.info(String.format("ResourceClassProcessorImplementation#process method called on class %s", clazz.getClazz().getSimpleName())); String clazzName = clazz.getClazz().getSimpleName(); if (clazzName.startsWith("ResourceClassProcessorEndPoint") || clazzName.equals("ResourceClassProcessorProxy") || clazzName.equals("ResourceClassProcessorProxyEndPoint")) { return new ResourceClassProcessorClass(clazz); } return clazz; }
ResteasyProviderFactory
クラスを使用して保存される新しいプロセッサーは、通常の JAX-RS アノテーション付きプロバイダーとして解決されます。これにより、リソースメタデータクラスを、以下のようなさまざまな高度なシナリオに使用できるカスタムバージョンでラップできます。
- 追加リソースメソッドまたはロケーターをリソースに追加。
- HTTP メソッドの変更
-
@Produces
または@Consumes
メディアタイプの変更。