eclipse上cxf与testNG的冲突

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 我打算在eclipse上的一个maven项目的某一个类发布,成为web service,打算使用cxf进行发布。最初这个测试用的maven项目是这样的:也就是说,在导入cxf之前,这个maven项目的功能是可以正常运行的,我的maven中有一个类名为YankDAO.java我采用testNG进行测试,创建YankDAO的实例,执行它的方法,方法的内容是读取eclipse同一台PC上的mysql中的数据,然后console中显示这些数据。

我打算在eclipse上的一个maven项目的某一个类发布,成为web service,打算使用cxf进行发布。
最初这个测试用的maven项目是这样的:
_
也就是说,在导入cxf之前,这个maven项目的功能是可以正常运行的,我的maven中有一个类名为YankDAO.java
我采用testNG进行测试,创建YankDAO的实例,执行它的方法,方法的内容是读取eclipse同一台PC上的mysql中的数据,然后console中显示这些数据。
其中testNG的测试代码的内容如下:

package com.webservice.spring.DAO;

import java.util.List;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.testng.AbstractTransactionalTestNGSpringContextTests;
import org.testng.annotations.Test;

import com.webservice.spring.domain.Yank;

@ContextConfiguration("classpath*:/WebServiceApplicationContext.xml")
public class YankDAOTest extends AbstractTransactionalTestNGSpringContextTests{
    
    private YankDAO yd;

    @Autowired
    public void setYd(YankDAO yd) {
        this.yd = yd;
    }
    


    @Test
    public void f() {

        String st1 = yd.testF();
        
        List<Yank> lk1 = yd.getMenu();
        for (int i = 0; i < lk1.size(); i++) {

            Yank yk1 = lk1.get(i);
            System.out.println(yk1.getsCoffee());
            System.out.println("--------------");
            System.out.println(yk1.getsHouse());

        }

    }


}

上述代码,加载了一个spring的配置文件,该配置文件配置了一个可以访问本地mysql的数据源,并且向spring容器注册了JDBCTemplate的bean。我们的YankDAO.java代码中注入了这个bean并且利用它访问mysql数据库。
其中spring配置文件名为WebServiceApplicationContext.xml
这个文件放在了maven项目的resources文件夹下,默认情况,spring容器会访问这个文件夹,读取配置文件。
配置文件的代码如下所示:

<?xml version="1.0" encoding="UTF-8"?>  
<!-- 集成hibernate之后的Spring的applicationContext配置文件 -->
<!-- mysql dao和service层的Spring配置文件 -->
<beans xmlns="http://www.springframework.org/schema/beans"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xmlns:p="http://www.springframework.org/schema/p"
    xmlns:context="http://www.springframework.org/schema/context"
    xmlns:aop="http://www.springframework.org/schema/aop" 
    xmlns:tx="http://www.springframework.org/schema/tx"
    xmlns:util="http://www.springframework.org/schema/util"
    xmlns:jdbc="http://www.springframework.org/schema/jdbc" 
    xmlns:cache="http://www.springframework.org/schema/cache"
    xmlns:mvc="http://www.springframework.org/schema/mvc"
    xmlns:cxf="http://cxf.apache.org/core"
    xmlns:jaxws="http://cxf.apache.org/jaxws"
    
    xsi:schemaLocation="http://www.springframework.org/schema/beans
        classpath:/org/springframework/beans/factory/xml/spring-beans.xsd     
        http://www.springframework.org/schema/context
        classpath:/org/springframework/context/config/spring-context.xsd
        http://www.springframework.org/schema/aop
        classpath:/org/springframework/aop/config/spring-aop.xsd
        http://www.springframework.org/schema/tx
        classpath:/org/springframework/transaction/config/spring-tx.xsd
        http://www.springframework.org/schema/jdbc
        classpath:/org/springframework/jdbc/config/spring-jdbc.xsd
        http://www.springframework.org/schema/mvc  
        classpath:/org/springframework/web/servlet/config/spring-mvc.xsd"> 
        <!--  
                http://cxf.apache.org/core 
        classpath:/schemas/core.xsd
        http://cxf.apache.org/jaxws 
        classpath:/schemas/jaxws.xsd
        -->
        
    <context:component-scan base-package="com.webservice.spring.DAO"/>
    <!--com.mysql.cj.jdbc.Driver-->
    <!--配置文件-->    
    <bean id="propertyConfig" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
     <property name="locations">
         <list>
            <value>classpath:/WebServiceApplicationContext.properties</value>
         </list>
     </property>
    </bean>
    <tx:annotation-driven transaction-manager="transactionmanager"/>
    <!-- 配置mysql数据源, 阿里巴巴的druid-->
    <bean id="dataSource" class="com.alibaba.druid.pool.DruidDataSource"
        destroy-method="close" 
        p:driverClassName="${jdbc.driver}"
        p:url="${jdbc.url}"
        p:username="${jdbc.username}"
        p:password="${jdbc.password}" 
        p:initialSize="${ds.initialSize}"
        p:minIdle="${ds.minIdle}"
        p:maxActive="${ds.maxActive}"
        p:maxWait="${ds.maxWait}"
        p:timeBetweenEvictionRunsMillis="${ds.timeBetweenEvictionRunsMillis}"
        p:minEvictableIdleTimeMillis="${ds.minEvictableIdleTimeMillis}"
        p:removeAbandoned="${ds.removeAbandoned}"
        p:removeAbandonedTimeout="${ds.removeAbandonedTimeout}"
        p:defaultAutoCommit="true">
    </bean>
    
    <!-- spring为集成hibernate提供的LocalSessionFactoryBean -->    
    <!-- 指定数据源 -->
    <bean id="sessionFactory" class="org.springframework.orm.hibernate5.LocalSessionFactoryBean">
       <property name="dataSource" ref="dataSource"/>
       <property name="hibernateProperties">
          <props>
            <prop key="hibernate.dialect">org.hibernate.dialect.MySQLDialect</prop>
            <prop key="hibernate.show_sql">true</prop>
            <prop key="hibernate.format_sql">true</prop>
          </props>
       </property>
       <property name="packagesToScan" value="com.tsmi.hibernate.entity"/>
    </bean>
    
    <!-- 配置Hibernate的事务管理器  : 注入SessionFactory 会话工厂 -->
     <bean id="transactionmanager" class="org.springframework.orm.hibernate5.HibernateTransactionManager"> 
         <property name="sessionFactory" ref="sessionFactory"/>
    </bean> 
    <!--  -->
    <!-- 配置JdbcTemplate -->
    <bean id="jdbcTemplate" 
        class="org.springframework.jdbc.core.JdbcTemplate">
         <property name="dataSource" ref="dataSource"/>
    </bean>        
 </beans>

上述功能是spring通过jdbctemplate访问mysql的简单实现,也跑通了。
下面我们要为我们的项目导入cxf的jar环境
_
导入,我们之前下载并放置在c盘根目录下的cxf,而且我们也配置了系统环境变量
_
_
但是导入之后就开始报错
_
表明,我们maven项目pom中导入的jar和单独为项目build path导入的jar发生了冲突。
这个时候,如果我们为了不要报错,单方面去pom.xml中注释掉一些jar,确实可以让makers中的报错消失。
这时,原本可以运行的testNG的代码,运行起来会报错:

Caused by: java.lang.NoSuchMethodError: org.springframework.util.Assert.notNull(Ljava/lang/Object;Ljava/util/function/Supplier;)V
    at org.springframework.test.context.support.ContextLoaderUtils.resolveContextConfigurationAttributes(ContextLoaderUtils.java:240)
    at org.springframework.test.context.support.AbstractTestContextBootstrapper.buildMergedContextConfiguration(AbstractTestContextBootstrapper.java:304)
    at org.springframework.test.context.support.AbstractTestContextBootstrapper.buildTestContext(AbstractTestContextBootstrapper.java:109)
    at org.springframework.test.context.TestContextManager.<init>(TestContextManager.java:135)
    at org.springframework.test.context.TestContextManager.<init>(TestContextManager.java:120)
    at org.springframework.test.context.testng.AbstractTestNGSpringContextTests.<init>(AbstractTestNGSpringContextTests.java:112)
    at org.springframework.test.context.testng.AbstractTransactionalTestNGSpringContextTests.<init>(AbstractTransactionalTestNGSpringContextTests.java:82)
    at com.webservice.spring.DAO.YankDAOTest.<init>(YankDAOTest.java:13)
    ... 26 more

_

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
XML Oracle jenkins
Eclipse+TestNG+ant+selenium++jenkins+svn自动化测试框架搭建
Eclipse+TestNG+ant+selenium++jenkins+svn自动化测试框架搭建
|
Web App开发 JavaScript Java
Eclipse上利用cxf将POJO发布成web service的过程
eclipse的版本去这个url官网下载http://cxf.apache.org/download.html 然后配置环境变量添加到path
1638 0
|
测试技术 网络架构 Android开发
|
7月前
|
Java Maven Android开发
在Eclipse里配置Maven插件
Maven是一款比较常用的Java开发拓展包,它相当于一个全自动jar包管理器,会导入用户开发时需要使用的相应jar包。使用Maven开发Java程序,可以极大提升开发者的开发效率。下面我就跟大家介绍一下如何在Eclipse里安装和配置Maven插件。
173 0
|
7月前
|
XML Java Maven
eclipse 、idea 安装activiti插件
eclipse 、idea 安装activiti插件
189 0
|
Java Android开发
eclipse安装SpringBoot插件的无敌办法
eclipse安装SpringBoot插件的无敌办法
154 0
|
Java Android开发 Spring
在 Eclipse 中安装 SpringTools 插件
在 Eclipse 中安装 SpringTools 插件
146 0
|
XML Java 应用服务中间件
Eclipse插件下载地址汇总
Eclipse插件下载地址汇总
356 0

推荐镜像

更多