springboot的junit测试和多个模块cxf暴露接口问题

来源:互联网 发布:zabbix的端口号是多少 编辑:程序博客网 时间:2024/06/17 10:01

1.springboot项目 java配置和导入自定义XML配置与外部化配置 如何进 行 junit 单元测试,当前运行一切正常,java配置 测试正常,但涉及到外部配置的测试就测试失败,具体错误如下:

java.lang.IllegalStateException: Failed to load ApplicationContextat org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:124)at org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:83)at org.springframework.test.context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:189)at org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener.java:131)at org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:230)at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.createTest(SpringJUnit4ClassRunner.java:228)at org.springframework.test.context.junit4.SpringJUnit4ClassRunner$1.runReflectiveCall(SpringJUnit4ClassRunner.java:287)at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)Caused by: org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.apache.cxf.jaxrs.spring.JAXRSServerFactoryBeanDefinitionParser$SpringJAXRSServerFactoryBean---1969867436': Invocation of init method failed; nested exception is org.apache.cxf.service.factory.ServiceConstructionExceptionat org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1628)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:555)at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:483)at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:306)Caused by: org.apache.cxf.service.factory.ServiceConstructionExceptionat org.apache.cxf.jaxrs.JAXRSServerFactoryBean.create(JAXRSServerFactoryBean.java:219)Caused by: org.apache.cxf.service.factory.ServiceConstructionException: There is an endpoint already running on /sys.at org.apache.cxf.jaxrs.JAXRSBindingFactory.addListener(JAXRSBindingFactory.java:86)at org.apache.cxf.endpoint.ServerImpl.start(ServerImpl.java:123)at org.apache.cxf.jaxrs.JAXRSServerFactoryBean.create(JAXRSServerFactoryBean.java:206)... 47 more

何解,点解,正在处理中,发愁中.





2. B模块依赖A模块 


A模块的cxf java配置


import org.apache.cxf.Bus;import org.apache.cxf.binding.BindingFactoryManager;import org.apache.cxf.endpoint.Server;import org.apache.cxf.jaxrs.JAXRSBindingFactory;import org.apache.cxf.jaxrs.JAXRSServerFactoryBean;import org.apache.cxf.jaxrs.swagger.Swagger2Feature;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.annotation.Bean;import org.springframework.stereotype.Component;import com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider;@Componentpublic class SecurityCoreCxfConfig {        @Autowired    private Bus bus;    @Bean    public Server rsServer() {        JAXRSServerFactoryBean endpoint = new JAXRSServerFactoryBean();        JacksonJaxbJsonProvider jaxbProvider = new JacksonJaxbJsonProvider();        endpoint.setProvider(jaxbProvider);        endpoint.setBus(bus);                /*添加cxf服务,相当于以前的xml的配置-jaxrs:serviceBeans*/        List<Object> beans=new ArrayList<>();        beans.add(new UserRestService());        beans.add(new RoleRestService());        beans.add(new ResourceRestService());                endpoint.setServiceBeans(beans);        endpoint.setAddress("/security/core");        endpoint.setFeatures(Arrays.asList(new Swagger2Feature()));                BindingFactoryManager manager=endpoint.getBus().getExtension(BindingFactoryManager.class);        JAXRSBindingFactory factory=new JAXRSBindingFactory();        factory.setBus(endpoint.getBus());        manager.registerBindingFactory(JAXRSBindingFactory.JAXRS_BINDING_ID,factory);        return endpoint.create();    }    }



B模块的cxf java配置

import org.apache.cxf.Bus;import org.apache.cxf.binding.BindingFactoryManager;import org.apache.cxf.endpoint.Server;import org.apache.cxf.jaxrs.JAXRSBindingFactory;import org.apache.cxf.jaxrs.JAXRSServerFactoryBean;import org.apache.cxf.jaxrs.swagger.Swagger2Feature;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.context.annotation.Bean;import org.springframework.stereotype.Component;import com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider;@Componentpublic class SecurityApiCxfConfig {        @Autowired    private Bus bus;    @Bean    public Server rsServer() {        JAXRSServerFactoryBean endpoint = new JAXRSServerFactoryBean();        JacksonJaxbJsonProvider jaxbProvider = new JacksonJaxbJsonProvider();        endpoint.setProvider(jaxbProvider);        endpoint.setBus(bus);                //添加cxf服务,相当于以前的xml的配置-jaxrs:serviceBeans        List<Object> beans=new ArrayList<>();        beans.add(new SysResourcesService());                endpoint.setServiceBeans(beans);        endpoint.setAddress("/security/api");        endpoint.setFeatures(Arrays.asList(new Swagger2Feature()));                BindingFactoryManager manager=endpoint.getBus().getExtension(BindingFactoryManager.class);        JAXRSBindingFactory factory=new JAXRSBindingFactory();        factory.setBus(endpoint.getBus());        manager.registerBindingFactory(JAXRSBindingFactory.JAXRS_BINDING_ID,factory);        return endpoint.create();    }    }

启动后只有/security/api被暴露出来:



何解,点解!!!

怎么样让多个maven模块都有独立的bus并能一起公布服务?