package org.apache.cxf.transport.servlet; import java.io.IOException; import java.io.InputStream; import java.net.URL; import javax.servlet.ServletConfig; import javax.servlet.ServletContext; import org.apache.cxf.Bus; import org.apache.cxf.BusFactory; import org.springframework.context.ApplicationContext; import org.springframework.core.io.Resource; import org.springframework.web.context.support.WebApplicationContextUtils; import org.springframework.web.context.support.XmlWebApplicationContext; public class CXFServlet extends CXFNonSpringServlet { protected void loadBus(ServletConfig sc) { //获取servlet信息 ApplicationContext wac = WebApplicationContextUtils.getWebApplicationContext(sc.getServletContext()); //默认找web.xml配置文件中的"config-location" //<!-- 配置CXF的核心Servlet --> //<servlet> // <servlet-name>cxf</servlet-name> // <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class> // <!-- 通过初始化参数指定cxf配置文件的位置 --> // <!-- 以下不注释则调用服务时会重新加载 --> // <!-- // <init-param> // <param-name>config-location</param-name> // <param-value>classpath:cxf-servlet.xml</param-value> // </init-param> // --> //</servlet> String configLocation = sc.getInitParameter("config-location"); if (configLocation == null) try { //当找不到默认的"config-location"时,去找cxf-servlet.xml文件 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) { } if (configLocation != null) { wac = createSpringContext(wac, sc, configLocation); } if (wac != null) setBus((Bus)wac.getBean("cxf", Bus.class)); else setBus(BusFactory.newInstance().createBus()); } private ApplicationContext createSpringContext(ApplicationContext ctx, ServletConfig sc, String location) { XmlWebApplicationContext ctx2 = new XmlWebApplicationContext(); ctx2.setServletConfig(sc); Resource r = ctx2.getResource(location); try { InputStream in = r.getInputStream(); in.close(); } catch (IOException e) { r = ctx2.getResource("classpath:" + location); try { r.getInputStream().close(); } catch (IOException e2) { r = null; } } try { if (r != null) location = r.getURL().toExternalForm(); } catch (IOException e) { } if (ctx != null) { ctx2.setParent(ctx); String[] names = ctx.getBeanNamesForType(Bus.class); if ((names == null) || (names.length == 0)) { ctx2.setConfigLocations(new String[] { "classpath:/META-INF/cxf/cxf.xml", location }); } else ctx2.setConfigLocations(new String[] { location }); } else { ctx2.setConfigLocations(new String[] { "classpath:/META-INF/cxf/cxf.xml", location }); } ctx2.refresh(); return ctx2; } }
相关推荐
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet <load-on-startup>1 <servlet-name>CXFServlet <url-pattern>/services/* ``` 这样,CXF就会监听`/services/*`路径下的所有请求。最后,通过...
在此过程中,我们将深入探讨CXF、CXFServlet以及它们在非Spring环境中的工作原理。 **一、WebService简介** Web服务是一种通过网络进行通信的软件系统,它允许不同应用程序之间的数据交换。WebService基于开放标准...
ServletRegistrationBean<CXFServlet> servlet = new ServletRegistrationBean(new CXFServlet(), "/cxf/*"); servlet.setName("CXFServlet"); return servlet; } @Bean public Bus cxfBus() { return ...
这里,`CXFServlet`是CXF的核心Servlet,负责处理所有Web Service请求,`/services/*`定义了服务的URL路径。 3. **添加依赖** 在Maven的`pom.xml`文件中添加CXF和其他必要的依赖,例如: ```xml <groupId>...
6. **配置CXFServlet**:在Tomcat的`web.xml`中配置CXFServlet,指定服务的上下文路径和服务位置。 ```xml <servlet-name>CXFServlet <servlet-class>org.apache.cxf.transport.servlet.CXFServlet ...
2.web工程的web.xml中配置CXFServlet <!-- 设置Spring容器加载配置文件路径 --> <param-name>contextConfigLocation <param-value>classpath*:applicationContext-server.xml <listener-class>org....
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet <servlet-name>CXFServlet <url-pattern>/services/* ``` 开发服务端的WebService接口通常涉及Java注解。例如,我们可以定义一个名为`...
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet <load-on-startup>1 <servlet-name>CXFServlet <url-pattern>/services/* ``` 接下来,我们需要定义一个服务接口,该接口使用JAX-RS注解(如`...
同时,还需要配置CXFServlet,指定其为 `<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>`,并设置`<load-on-startup>1</load-on-startup>`来确保在服务器启动时加载。接下来,在`...
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet <load-on-startup>1 <servlet-name>CXFServlet <url-pattern>/services/* <!-- CXF Welcome File Listener --> <listener-class>org.apache...
在上面的代码中,我们定义了一个CXFServlet来处理WebService请求,并配置了相关的参数。 使用Apache CXF和Spring框架可以轻松地实现WebService。我们可以定义服务接口,实现服务接口,并配置applicationContext.xml...
`CXFServlet`是CXF提供的Servlet,负责处理所有以`/services/*`路径开头的请求。`encodingFilter`确保所有的HTTP请求和响应都使用UTF-8编码。 接下来,我们需要创建服务接口和其实现。通常,我们会定义一个Java接口...
`web.xml` 中包含了 `SpringContextServlet` 和 `CXFServlet` 的配置,以及它们的启动顺序和映射路径: ```xml ... <param-name>configuration <param-value>/WEB-INF/applicationContext.xml ...
这个Web应用的配置启动了CXFServlet,使得所有以`/services/`开头的URL都会被CXF处理。`load-on-startup`元素确保CXFServlet在应用启动时加载。 **Spring配置**: 为了在Spring中注册和管理CXF服务,你需要在Spring...
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet <load-on-startup>1 <servlet-name>CXFServlet <url-pattern>/services/* <param-name>contextConfigLocation <param-value>/WEB-INF/...
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet <load-on-startup>1 <servlet-name>CXFServlet <url-pattern>/services/* ``` 5. **部署到应用服务器** 将你的Web服务打包成WAR文件,...
<bean id="cxf" class="org.apache.cxf.transport.servlet.CXFServlet"> <load-on-startup>1 ``` 在上面的配置中,`<cxf:features>`元素启用了JSON支持,`<cxf:jsr311/>`则支持JAX-RS标准,使得CXF可以...
在`web.xml`文件中,添加`ContextLoaderListener`监听器来加载Spring上下文,接着配置`CXFServlet`来处理Web服务请求。这部分的配置如下: ```xml ... <param-name>contextConfigLocation <param-value>WEB-...
配置完成后,CXFServlet将在应用启动时加载,并负责处理所有以`/services/*`开头的URL。 在服务的实现层,开发者需要定义服务接口和实现类。接口通常会使用JAX-WS注解如`@WebService`来声明,而实现类则会实现这些...