编辑 (11/02/2020)
现在,在我的微服务中,我广泛使用注释中的属性。这是根据文档的属性说明:targets
RegisterForReflection
/**
* Alternative classes that should actually be registered for reflection instead of the current class.
*
* This allows for classes in 3rd party libraries to be registered without modification or writing an
* extension. If this is set then the class it is placed on is not registered for reflection, so this should
* generally just be placed on an empty class that is not otherwise used.
*/
这在基于夸库的项目上工作正常,并且可以在您想要注册少量POJO进行反射时处理基本情况。注释将自行注册 POJO,但不会从 POJO 的方法注册返回类型。RegisterForReflection
更高级的方法是使用注释,如此处所述。我正在将其与Reflections库和定制的实用程序包装器一起使用:ReflectUtils@AutomaticFeature
现在我可以做更复杂的任务:
@AutomaticFeature
@RegisterForReflection(targets = {
com.hotelbeds.hotelapimodel.auto.convert.json.DateSerializer.class,
TimeDeserializer.class,
DateSerializer.class,
TimeSerializer.class,
RateSerializer.class,
})
public class HotelBedsReflection implements Feature {
public static Logger log = Utils.findLogger(Reflections.class);
@Override
public void beforeAnalysis(BeforeAnalysisAccess access) {
ReflectUtils.registerPackage(LanguagesRQ.class.getPackage().getName(), Object.class);
ReflectUtils.registerPackage(AvailabilityRQ.class.getPackage().getName(), Object.class);
ReflectUtils.registerPackage(Occupancy.class.getPackage().getName(), Object.class);
}
}
初步答案
我试图添加Jandex索引,添加bean.xml以及索引其他依赖项,如@emre-işık答案中所述,但是我的第三方类(EpAutomationRs)没有注册在本机模式下进行反射。因此,我最终获得了用于注册它的快速而肮脏的解决方案(见下文)。我创建了一个未使用的 REST JSON 终结点,它返回该类。
/**
* the purpose of this method is to register for reflection EpAutomationRs class
*
* @return
*/
@GET
@Path(GET_EMPTY_RS)
@Produces(MediaType.APPLICATION_JSON)
public EpAutomationRs entry() {
return new EpAutomationRs();
}