2.18. 리소스 메타데이터 수정을 위한 RESTEasy SPI
JBoss EAP는 ResourceBuilder 를 사용하여 생성된 리소스 클래스 메타데이터를 수정하기 위해 RESTEasy 서비스 공급자 인터페이스(SPI)를 제공합니다. Jakarta RESTful Web Services 배포를 처리할 때 RESTEasy는 ResourceBuilder 를 사용하여 각 Jakarta RESTful Web Services 리소스에 대한 메타데이터를 생성합니다. 이러한 메타데이터는 특히 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();
}
RESTEasy는 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 클래스를 사용하여 저장되는 새 프로세서는 일반 Jakarta RESTful Web Services 주석이 있는 공급업체로 해결됩니다. 다음과 같은 다양한 고급 시나리오에 사용할 수 있는 사용자 지정 버전으로 리소스 메타데이터 클래스를 래핑할 수 있습니다.
- 리소스에 리소스 메서드 또는 로케이터 추가.
- HTTP 메서드 수정.
-
@Produces 또는 @Consumes미디어 유형 수정.