2011-09-25 2 views
1

아파치 CXF는 CXFServlet도가나는 봄과 아파치 CXF를 사용하고 봄

<web-app> 

    <context-param> 
     <param-name>contextConfigLocation</param-name> 
     <param-value>classpath:myapp-ws-context.xml</param-value> 
    </context-param> 

    <listener> 
     <listener-class> 
      org.springframework.web.context.ContextLoaderListener 
     </listener-class> 
    </listener> 

    <servlet> 
     <display-name>CXF Servlet</display-name> 
     <servlet-name>CXFServlet</servlet-name> 
     <servlet-class> 
      org.apache.cxf.transport.servlet.CXFServlet 
     </servlet-class> 
     <load-on-startup>1</load-on-startup> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>CXFServlet</servlet-name> 
     <url-pattern>/*</url-pattern> 
    </servlet-mapping> 
</web-app> 

답변

2

당신이 org.apache.cxf.transport.servlet.CXFServletsources을 본 적이 MyApp를-WS-context.xml에 (오픈 소스)를 읽는 방법을 말씀 해주십시오?

다 더 명시 적 이상 : org.springframework.web.context.WebApplicationContext.ROOT : WebApplicationContextUtils라는 이름의 서블릿 컨텍스트 속성에서 응용 프로그램 컨텍스트를 찾으려고 봄 클래스는

@Override 
protected void loadBus(ServletConfig sc) { 
    ApplicationContext wac = WebApplicationContextUtils. 
     getWebApplicationContext(sc.getServletContext()); 
    String configLocation = sc.getInitParameter("config-location"); 
    if (configLocation == null) { 
     try { 
      InputStream is = sc.getServletContext().getResourceAsStream("/WEB-INF/cxf-servlet.xml"); 
      if (is != null && is.available() > 0) { 
       is.close(); 
       configLocation = "/WEB-INF/cxf-servlet.xml"; 
      } 
     } catch (Exception ex) { 
      //ignore 
     } 
    } 
    if (configLocation != null) { 
     wac = createSpringContext(wac, sc, configLocation); 
    } 
    if (wac != null) { 
     setBus(wac.getBean("cxf", Bus.class)); 
    } else { 
     setBus(BusFactory.newInstance().createBus()); 
    } 
} 

하는 것으로.

0

실제로 classpath : myapp-ws-context.xml은 CXF가 아니라 Spring에서 읽습니다. 당신의 web.xml에 설정 아래에 추가함으로써

, 그것은 봄 읽을 것 컨텍스트를로드 할 것이다 :

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>classpath:myapp-ws-context.xml</param-value> 
</context-param> 
<listener> 
<listener-class> 
    org.springframework.web.context.ContextLoaderListener 
</listener-class> 
</listener> 

하지만 당신은 multipartResolver 등 같은 봄 개체의 서블릿/웹 애플리케이션 범위를 구성 할 수 있습니다 . 아래처럼 CXFServlet도 구성을 강화하여, 명확하게 객체의 범위를 만들려면 :

<servlet> 
    <display-name>CXF Servlet</display-name> 
    <servlet-name>CXFServlet</servlet-name> 
    <servlet-class> 
     org.apache.cxf.transport.servlet.CXFServlet 
    </servlet-class> 
    <init-param> 
    <param-name>config-location</param-name> 
    <param-value>/WEB-INF/your-webapp-scope-spring-config.xml</param-value> 
</init-param> 
    <load-on-startup>1</load-on-startup> 
</servlet> 

* 당신의 웹 응용 프로그램 컨텍스트에서, 당신은 contextConfigLoc에서로드 컨텍스트의 모든 개체에 액세스 할 수 있다는 사실을 양지하시기 바랍니다 ation. *

관련 문제