문제

작은 스프링 응용 프로그램을 개발하고 있습니다. 학생 정보의 세부 사항을 데이터베이스에 저장해야합니다. 하나의 SimpleFormController를 개발했습니다. NetBeans + Hibernate Mapping + Spring을 사용했습니다. 프로젝트를 배포하면 다음 오류가 발생합니다.

Spring-Config-DB-ApplicationContext.xml은 다음과 같습니다.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN"
"http://www.springframework.org/dtd/spring-beans.dtd">
<beans>
<!-- Hibernate session factory -->
  <bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
    <constructor-arg index="0">
        <value>${driverClassName}</value>
    </constructor-arg>
    <constructor-arg index="1">
        <value>${url}</value>
    </constructor-arg>
    <constructor-arg index="2">
        <value>${username}</value>
    </constructor-arg>
    <constructor-arg index="3">
        <value>${password}</value>
    </constructor-arg>
  </bean>


  <bean id="sessionFactory"  class="org.springframework.orm.hibernate3.LocalSessionFactoryBean">
    <property name="dataSource">
        <ref bean="dataSource"/>
    </property>
    <!-- <property name="configLocation">
        <value>WEB-INF/classes/hibernate.cfg.xml</value>
    </property> -->
    <property  name="mappingResources" >
        <list>
            <value>hibernate.cfg.xml</value>
        </list>
    </property>

  <!--  <property  name="configurationClass">
        <value>org.hibernate.cfg.AnnotationConfiguration</value>
    </property> -->

    <property name="hibernateProperties">
        <props>
            <prop key="hibernate.dialect">${dialect}</prop>
            <prop key="hibernate.show_sql">true</prop>
  <!--<prop key="hibernate.hbm2ddl.auto">create</prop>-->
        </props>
    </property>
  </bean>
  <bean id="hibernateTemplate" class="org.springframework.orm.hibernate3.HibernateTemplate">
    <property name="sessionFactory">
        <ref bean="sessionFactory"/>
    </property>
  </bean>
  <bean id="transactionManager"  class="org.springframework.orm.hibernate3.HibernateTransactionManager">
    <property name="sessionFactory">
        <ref bean="sessionFactory"/>
    </property>
  </bean>
</beans>

다음 오류가 발생합니다.

ERROR (org.springframework.web.context.ContextLoader:213) - Context initialization failed
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'sessionFactory' defined in URL [jndi:/localhost/Student/WEB-INF/classes/config/spring-db-applicationContext.xml]: Invocation of init method failed; nested exception is java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter.<init>(I)V
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1395)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:512)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:450)
        at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:289)
        at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
        at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:286)
        at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:188)
        at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:526)
        at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:730)
        at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:387)
        at org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:270)
        at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:197)
        at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:47)
        at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:3843)
        at org.apache.catalina.core.StandardContext.start(StandardContext.java:4342)
        at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:791)
        at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:771)
        at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:525)
        at org.apache.catalina.startup.HostConfig.deployDescriptor(HostConfig.java:627)
        at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:511)
        at org.apache.catalina.startup.HostConfig.check(HostConfig.java:1231)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:597)
        at org.apache.tomcat.util.modeler.BaseModelMBean.invoke(BaseModelMBean.java:297)
        at com.sun.jmx.interceptor.DefaultMBeanServerInterceptor.invoke(DefaultMBeanServerInterceptor.java:836)
        at com.sun.jmx.mbeanserver.JmxMBeanServer.invoke(JmxMBeanServer.java:761)
        at org.apache.catalina.manager.ManagerServlet.check(ManagerServlet.java:1471)
        at org.apache.catalina.manager.ManagerServlet.deploy(ManagerServlet.java:824)
        at org.apache.catalina.manager.ManagerServlet.doGet(ManagerServlet.java:350)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:196)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
        at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:525)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
        at java.lang.Thread.run(Thread.java:619)
Caused by: java.lang.NoSuchMethodError: org.objectweb.asm.ClassWriter.<init>(I)V
        at net.sf.cglib.core.DebuggingClassWriter.<init>(DebuggingClassWriter.java:47)
        at net.sf.cglib.core.DefaultGeneratorStrategy.getClassWriter(DefaultGeneratorStrategy.java:30)
        at net.sf.cglib.core.DefaultGeneratorStrategy.generate(DefaultGeneratorStrategy.java:24)
        at net.sf.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:216)
        at net.sf.cglib.core.KeyFactory$Generator.create(KeyFactory.java:144)
        at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:116)
        at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:108)
        at net.sf.cglib.core.KeyFactory.create(KeyFactory.java:104)
        at net.sf.cglib.proxy.Enhancer.<clinit>(Enhancer.java:69)
        at org.hibernate.proxy.pojo.cglib.CGLIBLazyInitializer.getProxyFactory(CGLIBLazyInitializer.java:117)
        at org.hibernate.proxy.pojo.cglib.CGLIBProxyFactory.postInstantiate(CGLIBProxyFactory.java:43)
        at org.hibernate.tuple.entity.PojoEntityTuplizer.buildProxyFactory(PojoEntityTuplizer.java:162)
        at org.hibernate.tuple.entity.AbstractEntityTuplizer.<init>(AbstractEntityTuplizer.java:135)
        at org.hibernate.tuple.entity.PojoEntityTuplizer.<init>(PojoEntityTuplizer.java:55)
        at org.hibernate.tuple.entity.EntityEntityModeToTuplizerMapping.<init>(EntityEntityModeToTuplizerMapping.java:56)
        at org.hibernate.tuple.entity.EntityMetamodel.<init>(EntityMetamodel.java:302)
        at org.hibernate.persister.entity.AbstractEntityPersister.<init>(AbstractEntityPersister.java:434)
        at org.hibernate.persister.entity.SingleTableEntityPersister.<init>(SingleTableEntityPersister.java:108)
        at org.hibernate.persister.PersisterFactory.createClassPersister(PersisterFactory.java:61)
        at org.hibernate.impl.SessionFactoryImpl.<init>(SessionFactoryImpl.java:238)
        at org.hibernate.cfg.Configuration.buildSessionFactory(Configuration.java:1304)
        at org.springframework.orm.hibernate3.LocalSessionFactoryBean.newSessionFactory(LocalSessionFactoryBean.java:813)
        at org.springframework.orm.hibernate3.LocalSessionFactoryBean.buildSessionFactory(LocalSessionFactoryBean.java:731)
        at org.springframework.orm.hibernate3.AbstractSessionFactoryBean.afterPropertiesSet(AbstractSessionFactoryBean.java:211)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1454)
        at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1392)
        ... 48 more
Mar 12, 2010 5:32:28 PM org.apache.catalina.core.StandardContext start
SEVERE: Error listenerStart
도움이 되었습니까?

해결책

Hibernate가 요구하는 ASM 버전간에 비 호환성이 있습니다 (ASM-1.5.3.jar)) 그리고 봄에 필요한 것. 그러나 실제로, 나는 당신이 왜 당신의 클래스 경로에 ASM-2.2.3.jar를 가지고 있는지 궁금합니다 (ASM은 Spring.jar 및 Spring-Core.jar에 그러한 문제를 피하기 위해 묶여 있습니다). 보다 HHH-2222.

다른 팁

이 문제에 대한 해결책을 여기에서 찾았습니다.http://www.hildeberto.com/2008/05/hibernate-and-jersey-conflict-on.html

그만큼 Nosuchmethoderror Javadoc은 다음과 같이 말합니다.

응용 프로그램이 지정된 클래스 메소드 (정적 또는 인스턴스)를 호출하려고하면 해당 클래스에 해당 메소드의 정의가 없습니다.

일반적 으로이 오류는 컴파일러에 의해 잡혔습니다. 이 오류는 클래스의 정의가 호환되지 않게 변경된 경우에만 실행 시간에 발생할 수 있습니다.

귀하의 경우,이 오류는 a입니다 강력한 표시 WebApp이 잘못된 버전의 JAR을 사용하고 있다고합니다. org.objectweb.asm.* 클래스.

이런 종류의 문제를 해결하려면 종속성 POM에 2 개의 항아리를 추가해야합니다 (Maven을 사용하는 경우).

<dependency>
    <groupId>asm</groupId>
    <artifactId>asm</artifactId>
    <version>3.3.1</version>
</dependency>

<dependency>
    <groupId>cglib</groupId>
    <artifactId>cglib</artifactId>
    <version>3.1</version>
</dependency>

스타트 업에서 스프링을 초기화 할 때 동일한 오류가 있었지만 다른 라이브러리 버전을 사용했지만 클래스 경로 에서이 순서로 내 버전을 얻었을 때 모든 것이 효과가있었습니다 (CP의 다른 라이브러리는 중요하지 않았습니다).

  1. ASM-3.1.jar
  2. cglib-nodep-2.1_3.jar
  3. ASM-ATTRS-1.5.3.jar

나는 내 API를 *로 변경합니다. cglib --- to ---> cglib-nodep-2.2.jar * cglib-asm --- to ---> cglib-asm.jar (즉, 최신 제품)

pom.xml을 업데이트하십시오

<dependency>
  <groupId>asm</groupId>
  <artifactId>asm</artifactId>
  <version>3.1</version>
</dependency>

다른 버전의 CGLIB 와이 주제에 대해 검색 할 수있는 많은 가난한 조언 사이에는 많은 비 호환성이 있습니다 (고대 버전의 CGLIB-NODEB 등). 고대 버전의 Spring (2.5.6)으로 3 일 동안이 말도 안되는 느낌과 씨름 한 후 다음을 발견했습니다.

  • Spring이 cglib 누락 setinterceptduringconstruction (boolean)의 인핸서를 기반으로 Nosuchmethoderror에 대한 예외를 던지는 경우 Maven에서 종속성을 확인하십시오 (종속성 계층 탭은 프로젝트의 모든 버전을 나열해야합니다). 당신은 아마도 2.2 pre-2.2 버전의 cglib를 가져 오는 종속성을 가지고있을 것입니다.이 버전은 스프링 cglib2aopproxy가 인핸서를 잡을 때 프록시를 수행합니다. 종속성에 2.2+ 버전을 추가하지만 이러한 다른 버전을 제외해야합니다. 그렇지 않으면 계속 폭발 할 것입니다.
  • 현재 프로젝트의 Maven 의존성에서 충분한 버전의 CGLIB를 가지고 있는지 확인하십시오. 하지만 버전을 너무 높게 선택하지 않도록 조심하십시오. 대신 호환성이 없기 때문에 대신 호환되지 않기 때문입니다.
  • 문제의 프로젝트에 대한 Maven 업데이트를 수행 한 다음 프로젝트> 기본 설정> Java 빌드 경로> 라이브러리> Maven 의존성을 살펴보면 POM 변경으로 프로젝트에 올바르게 이루어 졌는지 확인하십시오. 거기에 잘못된 cglib 버전이 보이면 POM을 다시 편집 할 시간입니다.

HTTP-Builder를 종속성에 추가했을 때 동일한 오류가 발생했습니다.
제 경우에는 다음과 같은 ASM을 제외하여 해결할 수 있습니다.

compile('org.codehaus.groovy.modules.http-builder:http-builder:0.7'){
    excludes 'xml-apis'
    exclude(group:'xerces', module: 'xercesImpl')
    excludes 'asm'
}
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top