Apache CXF с пружиной - PullRequest
       3

Apache CXF с пружиной

1 голос
/ 25 сентября 2011

Я использую Apache CXF с Spring, расскажите, пожалуйста, как CXFServlet читает myapp-ws-context.xml

<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 ]

3 голосов
/ 25 сентября 2011

Вы видели источники из org.apache.cxf.transport.servlet.CXFServlet (с открытым исходным кодом)?

Все более чем явно:

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

Обратите внимание, что WebApplicationContextUtils - это класс Spring, который пытается найти контекст приложения в атрибуте контекста сервлета с именем: org.springframework.web.context.WebApplicationContext.ROOT.

0 голосов
/ 28 января 2014

На самом деле ваш classpath: myapp-ws-context.xml читается Spring, а не CXF.

При добавлении нижеприведенной конфигурации в ваш web.xml он будет читаться Spring, и контекст будет загружен:

<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 / WebApp для объектов Spring, таких как 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>

* Обратите внимание, что из контекста вашего веб-приложения вы можете получить доступ ко всем объектам в контексте, загруженном из contextConfigLocation.*

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...