2016-11-26 63 views
0

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

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

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

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

谢谢

回答

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(); 
} 
} 

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