2016-04-07 3 views
0

Я использую mapstruct на некоторое время теперь, но нашел эту проблему при попытке развернуть одну из моих веб-сервисов:Weblogic 12с - Mapstruct - 1.0.0.Final - ClassNotFoundException: Не удается найти реализация

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.

Любые идеи?

Спасибо!

UPDATE: Я просто попытался с версии 1.1.0.Beta1 с теми же результатами

ДОПОЛНЕНО-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(); 

... потому что классLoader.loadClass не плавает d bar.foo.mapper.MyMapperImpl, хотя класс находится рядом с интерфейсом.

ответ

1

Не могли бы вы попытаться создать копию класса Mappers и использовать clazz.getClassLoader() в качестве загрузчика для класса impl? Это должно сделать трюк. Можете ли вы сообщить мне, работает ли это? Если это так, мы изменим его в следующей версии. Благодаря!

+0

Это сделало это! Я изменил 'Thread.currentThread(). GetContextClassLoader()' (привилегированное действие) с 'clazz.getClassLoader()' –