finden Ich habe jetzt eine Zeit lang mapstruct worden verwenden, haben aber dieses Problem gefunden, während einer meiner Web Service bereitstellen versuchen:Weblogic 12c - Mapstruct - 1.0.0.Final - ClassNotFoundException: Kann nicht Implementierung
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
Wenn ich den implementierten WAR überprüfe, sind im selben bar.foo.mapper-Ordner MyMapper.class und MyMapperImpl.class wie in anderen Diensten, die korrekt funktionieren.
In der POM, ich habe die Einrichtung wie in der offiziellen doc angegeben gefolgt.
Ich habe bereits gelesen @ Gunnar Antwort here, aber in meinem Fall ist die Implementierung neben der Schnittstelle in der WAR.
Irgendwelche Ideen?
Danke!
UPDATE: Ich mit Version gerade versucht 1.1.0.Beta1 mit den gleichen Ergebnissen
UPDATE-2: Dies ist das Protokoll der Ausnahme geworfen:
Caused By: java.lang.ClassNotFoundException: Cannot find implementation for bar.foo.mapper.MyMapper
at org.mapstruct.factory.Mappers.getMapper(Mappers.java:94)
beim Debuggen , wird die Ausnahme hier geworfen:
T mapper = (T) classLoader.loadClass(clazz.getName() + IMPLEMENTATION_SUFFIX).newInstance();
... weil classLoader.loadClass nicht fin tut d bar.foo.mapper.MyMapperImpl, obwohl die Klasse neben der Schnittstelle ist.
Das hat es geschafft! Ich habe die 'Thread.currentThread(). GetContextClassLoader()' (die privilegierte Aktion) mit 'clazz.getClassLoader()' geändert –