java - cxf 升级抛出 NoSuchFieldError : REFLECTION

标签 java spring cxf

我想将我的 Spring 从 2.5.6 升级到 4.X,然后我还必须升级我的 cxf。 我把它们一起升级后,我有这个问题

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)

我的maven依赖如下

<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>   

我不知道我是否需要其他 cxf 依赖项或其他原因导致此问题

我的 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="kefu-epay@service.netease.com"/>
</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="kefu-epay@service.netease.com"/>
</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>    

为了兼容ibatis,我引入了Spring-orm 3.2.8

最佳答案

我找到了原因,我本来有一个 com.sun.xml.bind:jaxb-impl 2.0.5 然后 cxf-rt-frontend-jaxws 提供了一个 com.sun.xml.bind:jaxb-impl 2.2 .11.它们之间存在冲突。我去掉2.0.5版本后,效果很好

关于java - cxf 升级抛出 NoSuchFieldError : REFLECTION,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36742957/

相关文章:

java - 如何在日历 View 中获取 google calendar api 中的数据?

java - 在 XML 中按类型指定 spring 引用

java - 如何在DAO层使用 session 变量?

java - 创建spring bean List并通过方法初始化

java - Spring + thymeleaf : ResourceManager : unable to find resource 'index.vm' in any resource loader

java - Actionscript 中 "If greater than, then equal to"的简写?

java - Java 8 中 Spliterator 的一个好的用例场景是什么?

java - Soap:如何验证空元素

java - Jboss 中的加载器约束冲突

java - 如何防止 CXF 日志记录?