2016-09-16 3 views
0

API를 구현하기 위해 Apache CXF 및 JAX/RS를 사용하는 Java 웹 응용 프로그램이 있습니다. 우리는 tomcat 아래에서 webapp을 실행하고 있습니다. 내 응용 프로그램에서 내 응용 프로그램을 다시 호출 할 수있는 외부 서비스를 호출하는 무언가를 구현해야합니다. CXF 초기화가 끝나고 외부 API 요청을 받아 들일 준비가 된 후에 만 ​​외부 서비스를 호출해야합니다. 서블릿 컨텍스트 리스너, CXFServlet, 응용 프로그램 컨텍스트 새로 고침 및 다른 것들을 체크 아웃했지만 CXF가 요청을 받아들이 기 시작하는 프로세스에서 충분히 늦게 호출 된 것을 볼 수 없습니다. 아니면 바람둥이에서 어떤 사건을 유발해야합니까?Spring/CXF가 요청할 준비가 된시기를 아는 방법?

답변

0

스프링 구성에서 CXF 종속성을 bean으로 정의하면 응용 프로그램 시작시로드되고 준비가됩니다. 응용 프로그램을 시작하는 동안 스프링 빈이로드되고 해결되는 것을 알고 있으므로 사전 초기화 기능과 사후 초기화 기능을 추가로 가질 수 있습니다. @PostConstruct. 참조 https://www.luckyryan.com/2013/06/15/apache-cxf-exception-handler-for-jaxrs-rest/에서

예 구성 :

<!-- rest container --> 
<jaxrs:server id="sampleSerivceREST" address="/rest"> 
    <jaxrs:serviceBeans> 
     <ref bean="sampleServiceRESTGateway"/> 
    </jaxrs:serviceBeans> 
    <jaxrs:providers> 
     <bean class="org.codehaus.jackson.jaxrs.JacksonJsonProvider"/> 
     <bean class="com.luckyryan.sample.service.ExceptionHandler"/> 
    </jaxrs:providers> 
</jaxrs:server> 

<!-- soap container --> 
<jaxws:endpoint 
     id="sampleServiceSOAP" 
     implementor="#sampleServiceSOAPGateway" 
     address="/soap" 
     serviceName="sampleSoapService"/> 
+0

글쎄, 바로, 그 있습니다. 문제는 ApplicationContext가 초기화 사이클의 초기에 모든 Spring Bean을 인스턴스화한다는 것이다. 불행하게도 CXF는 요청을 나중에 받아 들일 수 있습니다. 나는 무언가가 도청 될 수 있다고 확신합니다, 나는 그것이 무엇인지 확실하지 않습니다. – fool4jesus

+0

CXF servlet에 대해 1을 정의합니까? – amitmah

+0

글쎄, 3이지만 네. CXF가 요청에 응답하고있는 시점에 도달하는 데 너무 오래 걸리는 이유는 확실하지 않지만 실제로 그렇습니다. 그래서 나는 비밀 콜백이나 내가 놓친 사건이 있었으면 좋겠다. – fool4jesus

관련 문제