Обновление до Java 8 вызывает сопоставление Orika в unittest java.io.IOException: неверный тип константы: 15 в 142

У меня есть проект, в котором я хочу обновить версию с Java 1.7 до Java 1.8, но при запуске UnitTests все тесты картографа терпят неудачу.

В проекте используется: SpringJUnit4ClassRunner

<dependency>
    <groupId>ma.glasnost.orika</groupId>
    <artifactId>orika-core</artifactId>
    <version>1.4.5</version>
</dependency>

Для этой части исключения: nested exception is ma.glasnost.orika.MappingException: java.lang.RuntimeException: java.io.IOException: invalid constant type: 15 at 142 я нашел это сообщение SO: Reflections - Java 8 - недопустимый тип константы
Но я не уверен, действительно ли это проблема, поскольку у меня нет зависимости от «javassist».

Это связано с той же проблемой? Как я могу преодолеть это?

Более полная StackTrace:

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'com.company.APP.common.mapping.orika.configuration.mappers.user.UserMapperTest': Injection of autowired dependencies failed; nested exception is org.springframework.beans.factory.BeanCreationException: Could not autowire field: protected ma.glasnost.orika.MapperFacade com.company.APP.common.mapping.orika.configuration.mappers.BaseMapperTest.mapper; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mapperFacadeFactoryBean': FactoryBean threw exception on object creation; nested exception is ma.glasnost.orika.MappingException: java.lang.RuntimeException: java.io.IOException: invalid constant type: 15 at 142

    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:334)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1204)
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.autowireBeanProperties(AbstractAutowireCapableBeanFactory.java:385)
    at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.injectDependencies(DependencyInjectionTestExecutionListener.java:117)
    at org.springframework.test.context.support.DependencyInjectionTestExecutionListener.prepareTestInstance(DependencyInjectionTestExecutionListener.java:82)
    at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:212)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:199)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:251)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:253)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:216)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:82)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
    at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:60)
    at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:67)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:162)
    at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
    at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
    at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
Caused by: org.springframework.beans.factory.BeanCreationException: Could not autowire field: protected ma.glasnost.orika.MapperFacade com.company.APP.common.mapping.orika.configuration.mappers.BaseMapperTest.mapper; nested exception is org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'mapperFacadeFactoryBean': FactoryBean threw exception on object creation; nested exception is ma.glasnost.orika.MappingException: java.lang.RuntimeException: java.io.IOException: invalid constant type: 15 at 142
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:555)
    at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:87)
    at org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:331)
    ... 25 more
...
...
...
Caused by: java.io.IOException: invalid constant type: 15 at 142
    at javassist.bytecode.ConstPool.readOne(ConstPool.java:1044)
    at javassist.bytecode.ConstPool.read(ConstPool.java:984)
    at javassist.bytecode.ConstPool.<init>(ConstPool.java:125)
    at javassist.bytecode.ClassFile.read(ClassFile.java:770)
    at javassist.bytecode.ClassFile.<init>(ClassFile.java:114)
    at javassist.CtClassType.getClassFile2(CtClassType.java:191)
    ... 79 more

person m.weiloa    schedule 16.08.2018    source источник
comment
Если бы у вас не было зависимости от javassist, его не было бы в вашем пути к классам. Spring зависит от косвенно (транзитивно). Ссылка, которую вы разместили, верна: вы используете старую версию javassist, и вам нужно обновить ее до более новой версии или остаться на Java 7.   -  person Andreas    schedule 16.08.2018


Ответы (1)


Ваша идея идет в правильном направлении.

java.lang.RuntimeException: java.io.IOException: invalid constant type: 15 at 142 показывает, что у приложения есть проблемы с Java 8 - как объяснено в вашей ссылке.

Маппер ma.glasnost.orika зависит от javassist, как вы можете видеть в трассировке стека. Это переходная зависимость от orika.

Вы можете использовать mvn dependency:tree -verbose для построения дерева зависимостей. Там вы можете посмотреть, какая библиотека зависит, например, от javassist и точной версии.

Чтобы использовать версию javassist, совместимую с Java 8, используйте эту зависимость, чтобы перезаписать неявную зависимость orika:

  <dependency>
    <groupId>org.javassist</groupId>
    <artifactId>javassist</artifactId>
    <version>3.18.2-GA</version>
  </dependency>

Но для этого примера было бы лучше обновить версию orika до 1.4.6, так как эта версия готова для Java 8.

person kkl    schedule 18.08.2018