1.springboot项目 java配置和导入自定义XML配置与外部化配置 如何进 行 junit 单元测试,当前运行一切正常,java配置 测试正常,但涉及到外部配置的测试就测试失败,具体错误如下:
java.lang.IllegalStateException: Failed to load ApplicationContext
at 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.ServiceConstructionException
at 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.ServiceConstructionException
at 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;
@Component
public 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;
@Component
public 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并能一起公布服务?