[SPRING] Spring 애플리케이션에서 CXF를 사용하여 JAX-RS 리소스를 자동 검색
SPRINGSpring 애플리케이션에서 CXF를 사용하여 JAX-RS 리소스를 자동 검색
Apache CXF (2.7.0)에서 클래스 경로의 JAX-RS 자원을 자동으로 검색 할 수 있습니까? 즉, @Path로 주석 처리 된 클래스입니다.
Spring 애플리케이션에서 CXF를 사용하고 있으며 Spring이 context
<jaxrs:server id="myService" address="/myService">
<jaxrs:serviceBeans>
<ref bean="myResource1" />
<ref bean="myResource2" />
<ref bean="myResource3" />
</jaxrs:serviceBeans>
</jaxrs:server>
내 경우에는 유지하기가 어려우므로 Spring XML 구성 파일에서 bean 의존성을 선언하도록 강요하므로 (다른 JAX-RS 구현과 같이 할 수 있음) 피하고 싶다.
해결법
-
==============================
1.현재 CXF 2.7에서 Spring 구성으로이 작업을 수행하는 방법이없는 것처럼 보입니다. resteasy를 살펴보면 @Path와 @Provider를 찾는 BeanFactoryPostProcessor SpringBeanProcessor.java를 구현했다. 비슷한 것이 CXF에서 아마도 수행 될 수 있지만 아직 구현되지 않은 것처럼 보입니다. CXF-3725에만 관심있는 사람이 아닌 것 같습니다.
현재 CXF 2.7에서 Spring 구성으로이 작업을 수행하는 방법이없는 것처럼 보입니다. resteasy를 살펴보면 @Path와 @Provider를 찾는 BeanFactoryPostProcessor SpringBeanProcessor.java를 구현했다. 비슷한 것이 CXF에서 아마도 수행 될 수 있지만 아직 구현되지 않은 것처럼 보입니다. CXF-3725에만 관심있는 사람이 아닌 것 같습니다.
-
==============================
2.cxf 3.0.4에서 테스트 및 작업 중입니다.
cxf 3.0.4에서 테스트 및 작업 중입니다.
<jaxrs:server address="/" basePackages="a.b.c"/>
web.xml에 cxf-servlet을 언급하는 것을 잊지 마라.
-
==============================
3.이 코드는 트릭을 수행합니다.
이 코드는 트릭을 수행합니다.
@Configuration @ComponentScan @ImportResource({"classpath:META-INF/cxf/cxf.xml"}) public class Context { @Autowired private ApplicationContext ctx; @Bean public Server jaxRsServer() { 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(ctx.getBean(SpringBus.class)); factory.setProviders(Arrays.asList(new JacksonJsonProvider())); factory.setResourceProviders(resourceProviders); return factory.create(); } }
CXFServlet을 web.xml에 넣어두면됩니다.
-
==============================
4.제안 된 것 외에도 3.0.0-milestone2에서 실제로 작동합니다. 최상위 수준의 jaxrs 서버 선언 만 수행하고 하나 이상의 공백으로 패키지 이름을 구분할 수있는 basePackages 속성을 설정합니다.
제안 된 것 외에도 3.0.0-milestone2에서 실제로 작동합니다. 최상위 수준의 jaxrs 서버 선언 만 수행하고 하나 이상의 공백으로 패키지 이름을 구분할 수있는 basePackages 속성을 설정합니다.
from https://stackoverflow.com/questions/13520821/autodiscover-jax-rs-resources-with-cxf-in-a-spring-application by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 어떤 리턴 타입은 @RequestMapping 메소드의 spring mvc에서 사용합니까? (0) | 2019.01.16 |
---|---|
[SPRING] Spring에서 @PropertyResource로 여러 속성 파일에 액세스하기 (0) | 2019.01.16 |
[SPRING] 종속성 삽입 서블릿 수신기 (0) | 2019.01.16 |
[SPRING] 보안 된 엔드 포인트에만 스프링 보안 필터를 적용하는 방법은 무엇입니까? (0) | 2019.01.16 |
[SPRING] @Transactional 및 Spring 보안 @PreAuthorize의 순서 (0) | 2019.01.16 |