【问题标题】:Apache CXF + Spring Java config + replace beans.xmlApache CXF + Spring Java 配置 + 替换 beans.xml
【发布时间】:2015-08-03 06:31:52
【问题描述】:

我尝试用 JavaConfig (Spring) 替换我的 beans.xml。在 beans.xml 我有以下配置:

<bean id="testWebService" class="at.test.TestWebService" />
<jaxws:endpoint id="Test" address="/TestWebService_V100"
    implementor="#testWebService" />

<jaxrs:server id="TestRestService" address="/rest/test"
    name="TestRestService">
    <jaxrs:serviceBeans>
        <ref bean="testWebService" />
    </jaxrs:serviceBeans>
    <jaxrs:providers>
        <ref bean="jsonProvider" />
        <ref bean="DateHandler" />
    </jaxrs:providers>
</jaxrs:server>

目前我有一个 config.java 类,其中包含 beans.xml 中的所有 bean。

config.java:

@Configuration
public class Config {

@Bean
public TestWebService testWebService() {

    return new TestWebService();
}

所有bean 都使用@Controller 进行配置,所有资源都使用@Autowired 进行标记。

@WebService(endpointInterface = "at.test.interfaces.ITestWebService")
@Transactional
@Controller
public class TestWebService extends AbstractSessionWebservice implements
ITestWebService {

它工作正常,没有错误,tomcat 启动正常。但是如何配置 jaxws:endpoint 和 jaxrs:server?我在 bean 文件中有多个条目。那么如何配置多个 jaxws:endpoint 和 jaxrs:server 条目呢?

【问题讨论】:

    标签: tomcat jax-ws spring-java-config


    【解决方案1】:

    请试试这个

    @Autowired
    ApplicationContext ctx;
    
    
    @Bean
    public ServletRegistrationBean dispatcherServlet() {
        CXFServlet cxfServlet = new CXFServlet();
        return new ServletRegistrationBean(cxfServlet, "/rest/*");
    }
    
    @Bean(name="cxf")
    public SpringBus springBus() {
        return new SpringBus();
    }
    
    @Bean
        public Server jaxRsServer() {
            List providers = new LinkedList();
        providers.add(new JsonProvider());
        providers.add(new DateHandler());
    
        LinkedList<ResourceProvider> resourceProviders = new LinkedList<>();
        for (String beanName : ctx.getBeanDefinitionNames()) {
            if (ctx.findAnnotationOnBean(beanName, Path.class) != null) {
                SpringResourceFactory factory = new SpringResourceFactory(beanName);
                factory.setApplicationContext(ctx);
                resourceProviders.add(factory);
            }
        }
    
    
        JAXRSServerFactoryBean factory = new JAXRSServerFactoryBean();
        factory.setBus(springBus());
        factory.setProviders(providers);
    factory.setResourceProviders(resourceProviders);
        return factory.create();
    
        }
    
    
    } 
    

    在您的 TestRestService 端点中,

    @Endpoint
    public class TestRestServiceEndpoint implements TestRestService {
    
        @PayloadRoot(localPart=TestWebService_V100, namespace=NAMESPACE)
        public <ReturnType> <MethodName>(<RequestType> request) {
        // WS BL
            return;     
        }
    
    }
    

    【讨论】:

      猜你喜欢
      • 2014-02-09
      • 1970-01-01
      • 2015-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-26
      • 1970-01-01
      • 2012-10-03
      相关资源
      最近更新 更多