cxf upgrade throw NoSuchFieldError: REFLECTION

11,368

I have found the reason , I would have had an com.sun.xml.bind:jaxb-impl 2.0.5 then cxf-rt-frontend-jaxws provided a com.sun.xml.bind:jaxb-impl 2.2.11.And there is a conflict between them. After I removed the vesion 2.0.5 ,It works well

Share:
11,368

Related videos on Youtube

追胖子的梦
Author by

追胖子的梦

Updated on June 04, 2022

Comments

  • 追胖子的梦
    追胖子的梦 about 2 years

    I want to upgrade my Spring from 2.5.6 to 4.X , then I have to upgrade my cxf also. after I upgraded them together , I have this problem

    org.springframework.beans.factory.BeanDefinitionStoreException: Unexpected exception parsing XML document from class path resource [applicationContext.xml]; nested exception is java.lang.NoSuchFieldError: REFLECTION
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:414)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:336)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.loadBeanDefinitions(XmlBeanDefinitionReader.java:304)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:181)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:217)
    at org.springframework.beans.factory.support.AbstractBeanDefinitionReader.loadBeanDefinitions(AbstractBeanDefinitionReader.java:188)
    at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:125)
    at org.springframework.web.context.support.XmlWebApplicationContext.loadBeanDefinitions(XmlWebApplicationContext.java:94)
    at org.springframework.context.support.AbstractRefreshableApplicationContext.refreshBeanFactory(AbstractRefreshableApplicationContext.java:129)
    at org.springframework.context.support.AbstractApplicationContext.obtainFreshBeanFactory(AbstractApplicationContext.java:537)
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:452)
    at org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:434)
    at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:306)
    at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:106)
    at com.caucho.server.webapp.WebApp.start(WebApp.java:1866)
    at com.caucho.server.deploy.DeployController.startImpl(DeployController.java:667)
    at com.caucho.server.deploy.StartAutoRedeployManualStrategy.startOnInit(StartAutoRedeployManualStrategy.java:74)
    at com.caucho.server.deploy.DeployController.startOnInit(DeployController.java:549)
    at com.caucho.server.deploy.DeployContainer.start(DeployContainer.java:160)
    at com.caucho.server.webapp.WebAppContainer.start(WebAppContainer.java:659)
    at com.caucho.server.host.Host.start(Host.java:450)
    at com.caucho.server.deploy.DeployController.startImpl(DeployController.java:667)
    at com.caucho.server.deploy.StartAutoRedeployAutoStrategy.startOnInit(StartAutoRedeployAutoStrategy.java:72)
    at com.caucho.server.deploy.DeployController.startOnInit(DeployController.java:549)
    at com.caucho.server.deploy.DeployContainer.start(DeployContainer.java:160)
    at com.caucho.server.host.HostContainer.start(HostContainer.java:484)
    at com.caucho.server.cluster.Server.start(Server.java:1319)
    at com.caucho.server.cluster.Cluster.startServer(Cluster.java:710)
    at com.caucho.server.cluster.ClusterServer.startServer(ClusterServer.java:542)
    at com.caucho.server.resin.Resin.start(Resin.java:703)
    at com.caucho.server.resin.Resin.initMain(Resin.java:1162)
    at com.caucho.server.resin.Resin.main(Resin.java:1365)
    Caused by: java.lang.NoSuchFieldError: REFLECTION
    at com.sun.xml.bind.v2.model.impl.RuntimeModelBuilder.<init>(RuntimeModelBuilder.java:49)
    at com.sun.xml.bind.v2.runtime.JAXBContextImpl.getTypeInfoSet(JAXBContextImpl.java:372)
    at com.sun.xml.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:236)
    at com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:76)
    at com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:55)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
    at java.lang.reflect.Method.invoke(Unknown Source)
    at javax.xml.bind.ContextFinder.newInstance(Unknown Source)
    at javax.xml.bind.ContextFinder.newInstance(Unknown Source)
    at javax.xml.bind.ContextFinder.find(Unknown Source)
    at javax.xml.bind.JAXBContext.newInstance(Unknown Source)
    at org.apache.cxf.common.jaxb.JAXBContextCache$2.run(JAXBContextCache.java:347)
    at org.apache.cxf.common.jaxb.JAXBContextCache$2.run(JAXBContextCache.java:345)
    at java.security.AccessController.doPrivileged(Native Method)
    at org.apache.cxf.common.jaxb.JAXBContextCache.createContext(JAXBContextCache.java:345)
    at org.apache.cxf.common.jaxb.JAXBContextCache.getCachedContextAndSchemas(JAXBContextCache.java:246)
    at org.apache.cxf.configuration.spring.AbstractBeanDefinitionParser.getContext(AbstractBeanDefinitionParser.java:322)
    at org.apache.cxf.configuration.spring.AbstractBeanDefinitionParser.mapElementToJaxbProperty(AbstractBeanDefinitionParser.java:349)
    at org.apache.cxf.configuration.spring.AbstractBeanDefinitionParser.mapElementToJaxbProperty(AbstractBeanDefinitionParser.java:295)
    at org.apache.cxf.transport.http.spring.HttpConduitBeanDefinitionParser.doParse(HttpConduitBeanDefinitionParser.java:58)
    at org.springframework.beans.factory.xml.AbstractSingleBeanDefinitionParser.parseInternal(AbstractSingleBeanDefinitionParser.java:85)
    at org.springframework.beans.factory.xml.AbstractBeanDefinitionParser.parse(AbstractBeanDefinitionParser.java:61)
    at org.springframework.beans.factory.xml.NamespaceHandlerSupport.parse(NamespaceHandlerSupport.java:74)
    at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1427)
    at org.springframework.beans.factory.xml.BeanDefinitionParserDelegate.parseCustomElement(BeanDefinitionParserDelegate.java:1417)
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.parseBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:174)
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.doRegisterBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:144)
    at org.springframework.beans.factory.xml.DefaultBeanDefinitionDocumentReader.registerBeanDefinitions(DefaultBeanDefinitionDocumentReader.java:100)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.registerBeanDefinitions(XmlBeanDefinitionReader.java:510)
    at org.springframework.beans.factory.xml.XmlBeanDefinitionReader.doLoadBeanDefinitions(XmlBeanDefinitionReader.java:392)
    

    my maven dependenties are as follows

    <dependency>  
        <groupId>org.apache.cxf</groupId>  
        <artifactId>cxf-rt-frontend-jaxws</artifactId>  
        <version>3.0.6</version>
    </dependency>  
    <dependency>  
        <groupId>org.apache.cxf</groupId>  
        <artifactId>cxf-rt-transports-http</artifactId> 
        <version>3.0.6</version>
    </dependency>   
    

    I don't know whether I need other cxf dependeny or other causes this problem

    my applicationContext.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:jaxws="http://cxf.apache.org/jaxws"
    xmlns:jee="http://www.springframework.org/schema/jee" xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:aop="http://www.springframework.org/schema/aop"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:http-conf="http://cxf.apache.org/transports/http/configuration" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.5.xsd http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.5.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-2.5.xsd http://cxf.apache.org/jaxws 
    http://cxf.apache.org/schemas/jaxws.xsd http://cxf.apache.org/transports/http/configuration http://cxf.apache.org/schemas/configuration/http-conf.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd">
    <description>Spring公共配置文件</description>
    <aop:aspectj-autoproxy proxy-target-class="true"/>
    <bean id="configProperties" class="org.springframework.beans.factory.config.PropertiesFactoryBean">
        <property name="locations">
            <list>
                <value>classpath:config.properties</value>
                <value>classpath:common.properties</value>
            </list>
        </property>
    </bean>
    <bean
        class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
        <property name="systemPropertiesModeName" value="SYSTEM_PROPERTIES_MODE_OVERRIDE" />
        <property name="ignoreResourceNotFound" value="false" />
        <property name="properties" ref="configProperties" />
    </bean>
    
    <http-conf:conduit name="http://risk.epay.163.com/.*">
        <http-conf:client ConnectionTimeout="3000" ReceiveTimeout="6000" AllowChunking="false"/>
    </http-conf:conduit>
    <http-conf:conduit name="*.http-conduit">  
        <http-conf:client ConnectionTimeout="3000" ReceiveTimeout="6000"/>
    </http-conf:conduit>  
    
    <!-- Web Service Setting start -->
    <import resource="classpath:META-INF/cxf/cxf.xml"/>
    <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml"/>
    <import resource="classpath:META-INF/cxf/cxf-servlet.xml"/>
    
    
    <jaxws:client id="blackAccountService"
        address="${XX}" 
        serviceClass="XXXX" >
    </jaxws:client>
    
    <jaxws:server id="XXXX" serviceClass="XXXX
        address="XX" endpointName="XX" >
        <jaxws:serviceBean>
            <bean class="XXXX"></bean>
        </jaxws:serviceBean>
    </jaxws:server>
    
    
    <!-- annotation way configuration -->
    <context:component-scan base-package="XX" />
    <bean id="propertiesInjector" class="XX"></bean>
    
    
    <bean id="dataSource" class="org.logicalcobwebs.proxool.ProxoolDataSource"
        destroy-method="close">
        <property name="driver">
            <value>${jdbc-1.proxool.driver-class}</value>
        </property>
        <property name="driverUrl">
            <value>${jdbc-1.proxool.driver-url}</value>
        </property>
        <property name="user">
            <value>${jdbc-1.user}</value>
        </property>
        <property name="password">
            <value>${jdbc-1.password}</value>
        </property>
        <property name="alias">
            <value>${jdbc-1.proxool.alias}</value>
        </property>
        <property name="prototypeCount">
            <value>${jdbc-1.proxool.prototype-count}</value>
        </property>
        <property name="maximumConnectionCount">
            <value>${jdbc-1.proxool.maximum-connection-count}</value>
        </property>
        <property name="minimumConnectionCount">
            <value>${jdbc-1.proxool.minimum-connection-count}</value>
        </property>
        <property name="maximumActiveTime">
            <value>${jdbc-1.proxool.maximum-active-time}</value>
        </property>
        <property name="simultaneousBuildThrottle">
            <value>${jdbc-1.proxool.simultaneous-build-throttle}</value>
        </property>
        <!-- 
        <property name="trace">
            <value>${jdbc-1.proxool.trace}</value>
        </property>
        -->
        <property name="verbose">
            <value>${jdbc-1.proxool.verbose}</value>
        </property>
        <property name="statistics">
            <value>${jdbc-1.proxool.statistics}</value>
        </property>
        <property name="houseKeepingTestSql">
            <value>${jdbc-1.proxool.house-keeping-test-sql}</value>
        </property>
    
    </bean>
    
    
    <bean id="transactionManager"
        class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
        <property name="dataSource" ref="dataSource" />
    </bean>
    
    <!-- 使用annotation定义事务 -->
    <tx:annotation-driven transaction-manager="transactionManager" />
    
    <!-- SpringContextHolder定义 -->
    <bean class="com.netease.epay.common.module.spring.SpringContextHolder" lazy-init="false" />
    
    <bean id="sqlMapClient" class="org.springframework.orm.ibatis.SqlMapClientFactoryBean">
        <property name="configLocations">   
           <list>
                <value>classpath:SqlMapConfig.xml</value>
                <value>classpath:epay/common/SqlMapConfig.xml</value>
                <value>classpath:epay/platform/SqlMapConfig.xml</value>
                <value>classpath:epay/account/SqlMapConfig.xml</value>
                <value>classpath:epay/trade/SqlMapConfig.xml</value>
                <value>classpath:epay/core/SqlMapConfig.xml</value>
           </list> 
        </property> 
        <property name="dataSource" ref="dataSource" />
    </bean>
    
    <bean id="sqlExecutor" class="com.netease.epay.common.module.orm.ibatis.LimitSqlExecutor">
        <property name="dialect">
            <bean class="com.netease.epay.common.module.orm.ibatis.dialect.OracleDialect" />
        </property>
    </bean>
    
    <bean id="threadPool" class="com.netease.epay.common.module.pool.ThreadPool">
        <property name="poolSize" value="${threadpool.size}"/>
    </bean>
    
    <bean id="springContextHolder" class="com.netease.epay.common.module.spring.SpringContextHolder">
    </bean>
    
    <bean id="transactionMailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
        <property name="host">
            <value>tmfast.mail.163.com</value>
        </property>
        <property name="port" value="25"/>
        <property name="javaMailProperties">
            <props>
                <prop key="mail.smtp.auth">false</prop>
                <prop key="mail.smtp.timeout">25000</prop>
            </props>
        </property>
        <property name="username" value="[email protected]"/>
    </bean>
    <bean id="subcribeMailSender" class="org.springframework.mail.javamail.JavaMailSenderImpl">
        <property name="host">
            <value>cmfast.mail.163.com</value>
        </property>
        <property name="port" value="25"/>
        <property name="javaMailProperties">
            <props>
                <prop key="mail.smtp.auth">false</prop>
                <prop key="mail.smtp.timeout">25000</prop>
            </props>
        </property>
        <property name="username" value="[email protected]"/>
    </bean>
    <bean id="uploadFileTransferReceipt" class="com.netease.yfb.ctrol.viewctrl.upload.uploadsubclass.UploadFileTransferReceipt">
        <property name="remoteDir" value="/transferReceipt" />
        <property name="visitDir" value="/wyb/transferReceipt" />
        <property name="maxUploadSize" value="1572864" />
    </bean>
    <bean id="ftpBusinessTechWyb" class="com.netease.yfb.business.common.FtpBusinessTechWyb" scope="prototype">
        <property name="HOST" value="upload.ms.netease.com" />
        <property name="PORT" value="21" />
        <property name="USERNAME" value="tech_wyb" />
        <property name="PASSWORD" value="ea5eiUUIO@#ALcajr" />
    </bean>
    
    <bean id="monitor" class="com.netease.om.Monitor"
        factory-method="getInstance" init-method="init">
        <constructor-arg>
            <value>epay</value>
        </constructor-arg>
        <property name="xmppAddress">
             <value>${epay.monitor.xmpp.address}</value>
         </property>
         <property name="xmppPort">
             <value>${epay.monitor.xmpp.port}</value>
         </property>
    </bean>
    
    
    <import resource="spring/limit-bean.xml" />
    <import resource="spring/schedule.xml" />
    
    <bean id="ftpUtil" class="com.netease.epay.module.common.utils.FtpUtil">
        <constructor-arg index="0">
            <value>${epay.ftp.address}</value>
        </constructor-arg>
        <constructor-arg index="1">
            <value>${epay.ftp.port}</value>
        </constructor-arg>
        <constructor-arg index="2">
            <value>${epay.ftp.username}</value>
        </constructor-arg>
        <constructor-arg index="3">
            <value>${epay.ftp.password}</value>
        </constructor-arg>
    </bean>
    
    <bean id="nosClient" class="com.netease.cloud.services.nos.NosClient">
        <constructor-arg index="0">          
            <bean class="com.netease.cloud.auth.BasicCredentials">
                 <constructor-arg index="0" ><value>${nos.accessKey}</value></constructor-arg>  
                 <constructor-arg index="1" ><value>${nos.secretKey}</value></constructor-arg>  
            </bean>
        </constructor-arg>
    </bean>
    
    
    <import resource="rpc_dubbo.xml"/>
    <bean id="refreshClientCacheProxy" class="XXX" init-method="init">
        <property name="refUpdateTimeQueryService" ref="refUpdateTimeQueryService"/>
        <property name="payWholeCacheService" ref="payWholeCacheService"/>
        <property name="cacheCleanTimerInterval" value="${gate.local.cache.check.time}"/>
    </bean>    
    

    In order to be compatible with ibatis , I imported Spring-orm 3.2.8

    • 追胖子的梦
      追胖子的梦 about 8 years
      I don't have cxf-common-utilities libraries , so it can‘t be the this conflict. mabye other reason causes this .
    • alexanderific
      alexanderific about 8 years
      The jump from Spring 2 to Spring 4 is a big one, and can require a little more than just a CXF version difference to upgrade. Can you provide your applicationContext.xml you are trying to use with Spring4.x?
    • Hisham Khalil
      Hisham Khalil about 8 years
    • 追胖子的梦
      追胖子的梦 about 8 years
      I have added my applicationContext.xml . Before this I had upgraded some other dependences like servlet 、freemarker and so on , and this problem was there after I upgraded my cxf.
    • Sampada
      Sampada about 8 years
      try enabling cxf logging to get a better stack trace