首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Optaplanner Quarkus反射问题

Optaplanner Quarkus反射问题
EN

Stack Overflow用户
提问于 2021-03-25 11:59:26
回答 1查看 124关注 0票数 0

我正在使用内置的XML文件创建一个解决程序工厂

代码语言:javascript
复制
solverFactory = SolverFactory.createFromXmlResource("solverConfig.xml");

在编译成Quarkus本机应用程序之前,这很好,现在我从Optaplanner枚举获得反射问题:

代码语言:javascript
复制
ERROR [io.qua.run.Application] (main) Failed to start application (with profile prod): java.lang.NoSuchFieldError: org.optaplanner.core.api.domain.common.DomainAccessType: REFLECTION
        at com.sun.xml.bind.v2.model.nav.ReflectionNavigator.getEnumConstants(ReflectionNavigator.java:25)
        at com.sun.xml.bind.v2.model.nav.ReflectionNavigator.getEnumConstants(ReflectionNavigator.java:34)
        at com.sun.xml.bind.v2.model.impl.EnumLeafInfoImpl.calcConstants(EnumLeafInfoImpl.java:117)
        at com.sun.xml.bind.v2.model.impl.EnumLeafInfoImpl.getConstants(EnumLeafInfoImpl.java:181)
        at com.sun.xml.bind.v2.model.impl.EnumLeafInfoImpl.link(EnumLeafInfoImpl.java:188)
        at com.sun.xml.bind.v2.model.impl.ModelBuilder.link(ModelBuilder.java:427)
        at com.sun.xml.bind.v2.model.impl.RuntimeModelBuilder.link(RuntimeModelBuilder.java:103)
        at com.sun.xml.bind.v2.runtime.JAXBContextImpl.getTypeInfoSet(JAXBContextImpl.java:439)
        at com.sun.xml.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:273)
        at com.sun.xml.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:109)
        at com.sun.xml.bind.v2.runtime.JAXBContextImpl$JAXBContextBuilder.build(JAXBContextImpl.java:1126)
        at com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:135)
        at java.lang.reflect.Method.invoke(Method.java:566)
        at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:275)
        at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:264)
        at javax.xml.bind.ContextFinder.find(ContextFinder.java:403)
        at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:691)
        at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:632)
        at org.optaplanner.core.impl.io.jaxb.GenericJaxbIO.<init>(GenericJaxbIO.java:89)
        at org.optaplanner.core.impl.io.jaxb.GenericJaxbIO.<init>(GenericJaxbIO.java:81)
        at org.optaplanner.core.impl.io.jaxb.SolverConfigIO.<init>(SolverConfigIO.java:27)
        at org.optaplanner.core.config.solver.SolverConfig.createFromXmlReader(SolverConfig.java:207)
        at org.optaplanner.core.config.solver.SolverConfig.createFromXmlInputStream(SolverConfig.java:182)
        at org.optaplanner.core.config.solver.SolverConfig.createFromXmlResource(SolverConfig.java:122)
        at org.optaplanner.core.config.solver.SolverConfig.createFromXmlResource(SolverConfig.java:97)
        at org.optaplanner.core.api.solver.SolverFactory.createFromXmlResource(SolverFactory.java:55)

我可以通过在调用SolverFactory.createFromXmlResource("solverConfig.xml")的类中添加@RegisterForReflection来解决这些问题,但感觉这些反射注册不应该是手动步骤。目前我在@RegisterForReflection(targets = {EnvironmentMode.class, RandomType.class, DomainAccessType.class}),但我猜会有更多的枚举添加到这个列表中.真的应该这么复杂吗?我使用Quarkus Optaplanner依赖项

代码语言:javascript
复制
<dependency>
  <groupId>org.optaplanner</groupId>
  <artifactId>optaplanner-quarkus</artifactId>
</dependency>
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-03-25 13:36:10

通过另一种方式,我能够解决这个问题。

在我以前名为solverFactory = SolverFactory.createFromXmlResource("solverConfig.xml")的类中,我现在只需注入工厂:

代码语言:javascript
复制
@Inject
SolverFactory<Schedule> solverFactory;

并将XML文件名移到application.properties中:

代码语言:javascript
复制
quarkus.optaplanner.solver-config-xml=solverConfig.xml
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/66799037

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档