【问题标题】:Weblogic 12c - Mapstruct - 1.0.0.Final - ClassNotFoundException: Cannot find implementationWeblogic 12c - Mapstruct - 1.0.0.Final - ClassNotFoundException:找不到实现
【发布时间】:2017-09-11 03:52:30
【问题描述】:

我使用 mapstruct 已经有一段时间了,但是在尝试部署我的一个 web 服务时发现了这个问题:

Target state: deploy failed on Server my_server
java.lang.ClassNotFoundException: Cannot find implementation for bar.foo.mapper.MyMapper

at weblogic.deploy.api.tools.deployer.Jsr88Operation.report(Jsr88Operation.java:547)
at weblogic.deploy.api.tools.deployer.Deployer.perform(Deployer.java:140)
at weblogic.deploy.api.tools.deployer.Deployer.runBody(Deployer.java:88)
at weblogic.utils.compiler.Tool.run(Tool.java:158)
at weblogic.utils.compiler.Tool.run(Tool.java:115)
at weblogic.Deployer.run(Deployer.java:74)
... 15 more

当我检查正在部署的 WAR 时,在同一个 bar.foo.mapper 文件夹中有 MyMapper.class 和 MyMapperImpl.class,就像在其他正常工作的服务中一样。

在 POM 中,我按照官方doc 中所述的设置进行了操作。

我已经阅读了@gunnar 的答案here,但在我的情况下,实现位于 WAR 接口旁边。

有什么想法吗?

谢谢!

更新:我刚刚尝试了 1.1.0.Beta1 版本,结果相同

UPDATE-2:这是抛出异常的日志:

Caused By: java.lang.ClassNotFoundException: Cannot find implementation for bar.foo.mapper.MyMapper
        at org.mapstruct.factory.Mappers.getMapper(Mappers.java:94)

调试时,这里抛出异常:

T mapper = (T) classLoader.loadClass( clazz.getName() + IMPLEMENTATION_SUFFIX ).newInstance();

...因为 classLoader.loadClass 没有找到 bar.foo.mapper.MyMapperImpl,即使该类在接口旁边。

【问题讨论】:

    标签: java weblogic12c mapstruct


    【解决方案1】:

    您能否尝试创建Mappers 类的副本,并使用clazz.getClassLoader() 作为 impl 类的加载器?这应该可以解决问题。你能告诉我这是否有效吗?如果是这样,我们将在下一个版本中对其进行更改。谢谢!

    【讨论】:

    • 做到了!我将Thread.currentThread().getContextClassLoader()(特权操作)更改为clazz.getClassLoader()
    猜你喜欢
    • 1970-01-01
    • 2020-08-25
    • 2021-03-06
    • 2015-07-03
    • 1970-01-01
    • 2022-11-07
    • 2012-05-12
    • 2020-05-15
    • 2021-04-15
    相关资源
    最近更新 更多