如何注册CXF Rest服务

时间:2016-11-26 20:43:18

标签: java rest spring-mvc cxf

我有一个Spring MVC应用程序,我试图使用CXF(Jax-RS)公开REST服务。我无法理解如何注册我的服务并使其可用。这是我的服务:

@Path("/myservice/")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public interface MyService {

        @POST
        @Path("start")
        public String start(){
          ...........
        }
    }

到目前为止,我设法避免使用任何配置文件,仅使用注释。那么如何在没有配置文件的情况下公开我的服务?我无法在文档中找到这些信息。

由于

1 个答案:

答案 0 :(得分:0)

这是完整的答案。比特和零件可以找到online,但没有一个完整的答案很容易遵循/实施。

我会跳过maven部分,因为它很容易弄清楚。

注册CXF Servlet

@WebServlet(urlPatterns="/*")
public class CXFStartServlet extends CXFServlet {
}

将所有Spring bean注册为@Path作为CXF服务

@Configuration
public class MyCxfConfig {

@Autowired
private ApplicationContext ctx;

@Bean(name="cxf")
public SpringBus springBus(){
    return new SpringBus();
}

@Bean
public Server jaxRsServer() {
    LinkedList<ResourceProvider> resourceProviders = new LinkedList<ResourceProvider>();
    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(ctx.getBean(SpringBus.class));
    factory.setProviders(Arrays.asList(new JacksonJsonProvider()));
    factory.setResourceProviders(resourceProviders);
    return factory.create();
}
}

不要忘记在Spring配置中导入“MyCxfconfig”。这就是全部:))