ApacheWicket 导致:java.lang.reflect.InaccessibleObjectException:无法使受保护的最终 java.lang.Class java.lang.ClassLoader.defineClas

问题描述 投票:0回答:1

我正在关注 Spring Boot + Apache Wicket 教程:https://udemy.com/course/starting-with-apache-wicket-version-9x/learn/lecture/33750684#overview 并有以下代码。

当我将以下行添加到 HomePage.java 代码时开始出现以下错误

@SpringBean
private MongoDBService mongoDBService;

HomePage.java

import app.services.MongoDBService;
import app.web.pages.BasePage;
import com.giffing.wicket.spring.boot.context.scan.WicketHomePage;
import lombok.extern.slf4j.Slf4j;
import org.apache.wicket.markup.html.basic.Label;
import org.apache.wicket.spring.injection.annot.SpringBean;
import org.wicketstuff.annotation.mount.MountPath;

@WicketHomePage
@MountPath(value = "home", alt = {"home2"})
@Slf4j
public class HomePage extends BasePage {
    @SpringBean
    private MongoDBService mongoDBService;

    public HomePage() {
        Label label = new Label("label", "My custom page title from Wicket! "+mongoDBService.getRepo().count());
        add(label);
    }
}

BasePage.java

public abstract class BasePage extends WebPage {

    public BasePage(PageParameters params){
        super(params);
        Injector.get().inject(this);
        initPage();
    }

    public BasePage(){
        Injector.get().inject(this);
        initPage();
    }

    private void initPage(){
    }


    @Override
    public void renderHead(IHeaderResponse response) {
        super.renderHead(response);

        response.render(JavaScriptHeaderItem.forReference(getApplication().getJavaScriptLibrarySettings().getJQueryReference()));
        response.render(JavaScriptHeaderItem.forReference(getApplication().getJavaScriptLibrarySettings().getWicketAjaxReference()));

        response.render(JavaScriptHeaderItem.forUrl("https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js"));
        response.render(CssHeaderItem.forUrl("https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css"));
    }
}

MongoDBService.java

@Service
@Slf4j
public class MongoDBService {

    @Autowired
    @Getter
    private TodoMongoDBRepository repo;

    @PostConstruct
    void setup() {
        log.info("+++ MongoDB database is starting ...");
        repo.deleteAll();

        for (int i = 1; i <= 8; i++) {
            Todo todo = new Todo();
            todo.setTitle("Todo number " + i);
            todo.setBody("Body number " + i);
            addToItems(todo);
        }
    }

    public List<Todo> getAllItems() {
        return StreamSupport.stream(repo.findAll().spliterator(), false)
                .collect(Collectors.toList());
    }

    public void addToItems(Todo todo) {
        repo.save(todo);
    }

    public void removeItems(List<Todo> items) {
        repo.deleteAll(items);
    }
}

HomePage.java

@WicketHomePage
@MountPath(value = "home", alt = {"home2"})
@Slf4j
public class HomePage extends BasePage {
    @SpringBean
    private MongoDBService mongoDBService;

    public HomePage() {
        Label label = new Label("label", "My custom page title from Wicket! "+mongoDBService.getRepo().count());
        add(label);
    }
}

错误:

Caused by: net.sf.cglib.core.CodeGenerationException: java.lang.reflect.InaccessibleObjectException-->Unable to make protected final java.lang.Class java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain) throws java.lang.ClassFormatError accessible: module java.base does not "opens java.lang" to unnamed module @58c1670b
    at net.sf.cglib.core.ReflectUtils.defineClass(ReflectUtils.java:464) ~[cglib-3.3.0.jar:na]
    at net.sf.cglib.core.AbstractClassGenerator.generate(AbstractClassGenerator.java:339) ~[cglib-3.3.0.jar:na]
    at net.sf.cglib.core.AbstractClassGenerator$ClassLoaderData$3.apply(AbstractClassGenerator.java:96) ~[cglib-3.3.0.jar:na]
    at net.sf.cglib.core.AbstractClassGenerator$ClassLoaderData$3.apply(AbstractClassGenerator.java:94) ~[cglib-3.3.0.jar:na]
    at net.sf.cglib.core.internal.LoadingCache$2.call(LoadingCache.java:54) ~[cglib-3.3.0.jar:na]
    at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264) ~[na:na]
    at net.sf.cglib.core.internal.LoadingCache.createEntry(LoadingCache.java:61) ~[cglib-3.3.0.jar:na]
    at net.sf.cglib.core.internal.LoadingCache.get(LoadingCache.java:34) ~[cglib-3.3.0.jar:na]
    at net.sf.cglib.core.AbstractClassGenerator$ClassLoaderData.get(AbstractClassGenerator.java:119) ~[cglib-3.3.0.jar:na]
    at net.sf.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:294) ~[cglib-3.3.0.jar:na]
    at net.sf.cglib.core.KeyFactory$Generator.create(KeyFactory.java:221) ~[cglib-3.3.0.jar:na]
    at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:174) ~[cglib-3.3.0.jar:na]
    at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:153) ~[cglib-3.3.0.jar:na]
    at net.sf.cglib.proxy.Enhancer.<clinit>(Enhancer.java:73) ~[cglib-3.3.0.jar:na]
    ... 72 common frames omitted
Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make protected final java.lang.Class java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain) throws java.lang.ClassFormatError accessible: module java.base does not "opens java.lang" to unnamed module @58c1670b
    at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:354) ~[na:na]
    at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:297) ~[na:na]
    at java.base/java.lang.reflect.Method.checkCanSetAccessible(Method.java:199) ~[na:na]
    at java.base/java.lang.reflect.Method.setAccessible(Method.java:193) ~[na:na]
    at net.sf.cglib.core.ReflectUtils$1.run(ReflectUtils.java:61) ~[cglib-3.3.0.jar:na]
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:569) ~[na:na]
    at net.sf.cglib.core.ReflectUtils.<clinit>(ReflectUtils.java:52) ~[cglib-3.3.0.jar:na]
    at net.sf.cglib.core.KeyFactory$Generator.generateClass(KeyFactory.java:243) ~[cglib-3.3.0.jar:na]
    at net.sf.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:25) ~[cglib-3.3.0.jar:na]
    at net.sf.cglib.core.AbstractClassGenerator.generate(AbstractClassGenerator.java:332) ~[cglib-3.3.0.jar:na]
    ... 84 common frames omitted
spring spring-boot wicket
1个回答
0
投票

在你

Run configuration
,你需要去
Modify options
并检查
Do not use --module-path option

© www.soinside.com 2019 - 2024. All rights reserved.