簡體   English   中英

帶有Spring的Apache CXF

[英]Apache CXF with Spring

我將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>

你見過來源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 servlet上下文屬性中查找應用程序上下文。

實際上,您的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>

但是您可以配置Spring對象的Servlet / WebApp范圍(例如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>

* 請注意,從Web應用程序上下文中,您可以訪問從contextConfigLocation加載的上下文中的所有對象。 *

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM