jfinal集成spring cxf做webservice服务
链接地址:http://zhengshuo.iteye.com/blog/2154047
废话不说,直接上代码
新增cxf的plugin
CXFPlugin
- package com.jfinal.plugin.spring;
- import org.apache.cxf.Bus;
- import org.apache.cxf.bus.spring.SpringBusFactory;
- import org.apache.cxf.transport.servlet.ServletTransportFactory;
- import org.springframework.context.ApplicationContext;
- import com.jfinal.plugin.IPlugin;
- public class CXFPlugin implements IPlugin{
- private ApplicationContext ctx;
- SpringBusFactory busFactory;
- ServletTransportFactory transportFac;
- public boolean start() {
- if (ctx == null){
- ctx = IocInterceptor.ctx;
- }
- busFactory = new SpringBusFactory(ctx);
- Bus bus = busFactory.createBus();
- transportFac = new ServletTransportFactory(bus);
- CXFContext.cxf = new CXFContext(ctx,busFactory,transportFac);
- return true;
- }
- public boolean stop() {
- return true;
- }
- }
因为要用到spring的context,所以包名就放在spring同目录了
新增CXFcontent
- package com.jfinal.plugin.spring;
- import org.apache.cxf.bus.spring.SpringBusFactory;
- import org.apache.cxf.transport.servlet.ServletTransportFactory;
- import org.springframework.context.ApplicationContext;
- public class CXFContext{
- private ApplicationContext ctx;
- private SpringBusFactory busFactory;
- private ServletTransportFactory transportFac;
- static CXFContext cxf;
- public static CXFContext getCXFContent(){
- return cxf;
- }
- CXFContext(ApplicationContext ctx,SpringBusFactory busFactory,ServletTransportFactory transportFac){
- this.ctx = ctx;
- this.busFactory = busFactory;
- this.transportFac = transportFac;
- }
- public ApplicationContext getCtx() {
- return ctx;
- }
- public void setCtx(ApplicationContext ctx) {
- this.ctx = ctx;
- }
- public SpringBusFactory getBusFactory() {
- return busFactory;
- }
- public void setBusFactory(SpringBusFactory busFactory) {
- this.busFactory = busFactory;
- }
- public ServletTransportFactory getTransportFac() {
- return transportFac;
- }
- public void setTransportFac(ServletTransportFactory transportFac) {
- this.transportFac = transportFac;
- }
- public CXFContext getCxf() {
- return cxf;
- }
- public void setCxf(CXFContext cxf) {
- this.cxf = cxf;
- }
- }
新增servlet一个,用于替换CXFServlet
- package cn.edu.jxut.common.config;
- import java.io.IOException;
- import java.io.InputStream;
- import javax.servlet.ServletConfig;
- import javax.servlet.ServletContext;
- import javax.servlet.ServletException;
- import org.apache.cxf.bus.spring.BusApplicationContext;
- import org.apache.cxf.bus.spring.SpringBusFactory;
- import org.apache.cxf.common.classloader.ClassLoaderUtils;
- import org.apache.cxf.resource.ResourceManager;
- import org.apache.cxf.resource.URIResolver;
- import org.apache.cxf.transport.servlet.AbstractCXFServlet;
- import org.apache.cxf.transport.servlet.ServletContextResourceResolver;
- import org.springframework.beans.factory.xml.XmlBeanDefinitionReader;
- import org.springframework.context.ApplicationContext;
- import org.springframework.context.support.GenericApplicationContext;
- import org.springframework.core.io.InputStreamResource;
- import com.jfinal.plugin.spring.CXFContext;
- public class WsController extends AbstractCXFServlet{
- private GenericApplicationContext childCtx;
- private boolean inRefresh;
- public void loadBus(ServletConfig servletConfig) throws ServletException {
- String springCls = "org.springframework.context.ApplicationContext";
- try {
- ClassLoaderUtils.loadClass(springCls, getClass());
- loadSpringBus(servletConfig);
- } catch (ClassNotFoundException e) {
- throw new ServletException("Can't load bus with Spring context class", e);
- }
- }
- private void loadSpringBus(ServletConfig servletConfig)
- throws ServletException
- {
- ServletContext svCtx = getServletContext();
- ApplicationContext ctx = CXFContext.getCXFContent().getCtx();
- if (ctx == null) {
- Object ctxObject = svCtx.getAttribute("org.springframework.web.context.WebApplicationContext.ROOT");
- if ((ctxObject instanceof ApplicationContext)) {
- ctx = (ApplicationContext)ctxObject;
- } else if (ctxObject != null)
- {
- Exception ex = (Exception)ctxObject;
- throw new ServletException(ex);
- }
- }
- updateContext(servletConfig, ctx);
- }
- private void updateContext(ServletConfig servletConfig, ApplicationContext ctx)
- {
- if (ctx == null) {
- this.bus = new SpringBusFactory().createBus();
- ctx = (ApplicationContext)this.bus.getExtension(BusApplicationContext.class);
- } else {
- this.bus = CXFContext.getCXFContent().getBusFactory().createBus();
- }
- ResourceManager resourceManager = (ResourceManager)this.bus.getExtension(ResourceManager.class);
- resourceManager.addResourceResolver(new ServletContextResourceResolver(servletConfig.getServletContext()));
- replaceDestinationFactory();
- this.controller = createServletController(servletConfig);
- loadAdditionalConfig(ctx, servletConfig);
- }
- private void loadAdditionalConfig(ApplicationContext ctx, ServletConfig servletConfig)
- {
- String location = servletConfig.getInitParameter("config-location");
- if (location == null) {
- location = "/META-INF/cxf/cxf-servlet.xml";
- }
- InputStream is = null;
- try {
- is = servletConfig.getServletContext().getResourceAsStream(location);
- if ((is == null) || (is.available() == -1)) {
- URIResolver resolver = new URIResolver(location);
- if (resolver.isResolved()) {
- is = resolver.getInputStream();
- }
- }
- }
- catch (IOException e)
- {
- }
- if (is != null) {
- this.childCtx = new GenericApplicationContext(ctx);
- XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(this.childCtx);
- reader.setValidationMode(3);
- reader.loadBeanDefinitions(new InputStreamResource(is, location));
- this.childCtx.refresh();
- }
- }
- }
web.xml配置:
- <servlet>
- <servlet-name>CXFServlet</servlet-name>
- <servlet-class>
- [color=red]cn.edu.jxut.common.config.WsController [/color] </servlet-class>
- <load-on-startup>1</load-on-startup>
- </servlet>
- <servlet-mapping>
- <servlet-name>CXFServlet</servlet-name>
- <url-pattern>/service/*</url-pattern>
- </servlet-mapping>
jfinal配置:
- public void configHandler(Handlers me) {
- me.add(new UrlSkipHandler(".*/service.*",false));
- }
此服务已发布可用,在webservice实现类中直接使用jfinal的db获取数据或保存数据都非常方便。
jfinal集成spring cxf做webservice服务的更多相关文章
- Eclipse+Maven+Spring+CXF 构建webservice 服务
一. 软件准备 Eclipse 4.2.1 Maven 2.2.1 Spring 3.2.6 CXF 3.0.2 二. 步骤 首先,在Eclipse中用maven构建一个quickstart版本的ma ...
- 搭建web项目结合spring+cxf的webservice服务
服务端: 服务端和客户端都需要引入包 antlr-2.7.7.jar aopalliance-1.0.jar asm-3.3.jar commons-collections-3.2.1.jar com ...
- Spring Boot 使用 CXF 调用 WebService 服务
上一张我们讲到 Spring Boot 开发 WebService 服务,本章研究基于 CXF 调用 WebService.另外本来想写一篇 xfire 作为 client 端来调用 webservi ...
- 使用 CXF 做 webservice 简单例子(转载)
使用 CXF 做 webservice 简单例子 Apache CXF 是一个开放源代码框架,提供了用于方便地构建和开发 Web 服务的可靠基础架构.它允许创建高性能和可扩展的服务,您可以将这 ...
- CXF发布webService服务以及客户端调用
这篇随笔内容是CXF发布webService服务以及客户端调用的方法 CXF是什么? 开发工作之前需要下载CXF和安装 下载地址:http://cxf.apache.org 安装过程: <1&g ...
- 【转】构建基于CXF的WebService服务
构建基于CXF的WebService服务 Apache CXF = Celtix+ XFire,开始叫 Apache CeltiXfire,后来更名为 Apache CXF 了,以下简称为 CXF.C ...
- idea+maven+spring+cxf创建webservice应用(二)生成客户端程序
idea+maven+spring+cxf创建webservice应用(二)生成客户端程序,以上一篇为基础"idea+maven+spring+cxf创建webservice应用" ...
- Spring Boot 开发 WebService 服务
WebService 虽然现在大部分互联网企业不太提倡使用,但在以第三方接口为主导的市场,对方来什么接口你还得用什么接口,不可能把接口重写了.例如大部分传统的大型企业都在用 WebService,并且 ...
- Spring Boot+CXF搭建WebService服务参考资料
pom.xml文件引入包: <!--WerbService CXF依赖--> <dependency> <groupId>org.apache.cxf</gr ...
随机推荐
- Python学习入门基础教程(learning Python)--2.2 Python下的变量基础
变量的基本概念,变量可以这样去理解,变量是一个值,这个值存储在计算机的内存里.以网购为例,您在选购傻商品的时候,是在不同页面里选不同的商品,选好一件点击“放入购物车”,选完了再点击去结帐,这些商品的价 ...
- JavaScript推断E-mail地址是否合法
编写自己定义的JavaScript函数checkEmail(),在该函数中首先推断E-mail文本框是否为空,然后在应用正則表達式推断E-mail地址是否合法,假设不合法提示用户 <script ...
- ORACLE分科目统计每科前三名的学生的语句
有个成绩表 score(student_no,Subject_no,Score)分别为学号,课程号,成绩.我想用语句查询出每科的前三名学生的学号,请各位高手教教小弟 1.创建测试语句:create t ...
- C#中析构函数,命名空间及字符串的运用(Ninth day)
又到了总结知识的时间了,今天在云和学院学习了析构函数,命名空间及字符串的处理,现在就为大家总结下来. 理论: 析构函数 不能在结构中定义析构函数.只能对类使用析构函数. 一个类只能有一个析构函数. 无 ...
- 【前端】使用weinre对手机、微信浏览器页面调试
官方网站:http://people.apache.org/~pmuellr/weinre-docs/latest/ windows下安装以及使用: 1.安装nodejs 下载nodejs引擎,32b ...
- linker command failed with exit code 1 (use -v to see invocation),经典Xcode编译错误的出现和解决!
linker command failed with exit code 1 (use -v to see invocation)这个肯定是个xcode编译运行的时候经典的报错了. 这个问题曾经在我的 ...
- 使用约束给tableview添加暂无数据的提示
在tableview没有数据的时候,我们经常需要在tableview的正中间插入一张图片,来提示用户暂无数据 /** * 添加一个view,提示暂无数据 */ - (void)addPromptVie ...
- JavaScript基础知识----基本语法
JavaScript 语句 JavaScript 语句向浏览器发出的命令.语句的作用是告诉浏览器该做什么. 分号 ; 分号用于分隔 JavaScript 语句. 通常我们在每条可执行的语句结尾添加分号 ...
- linux操作系统死机处理办法
这个方法可以在各种情况下安全地重启计算机.大家在键盘上找,可以找到一个叫做“Sys Rq”的键,在台机的键盘上通常与 Prt Sc 共键,在笔记本可能在其他位置,如 Delete.以台机为例,要使用这 ...
- HDU 4731 Minimum palindrome 2013 ACM/ICPC 成都网络赛
传送门:http://acm.hdu.edu.cn/showproblem.php?pid=4731 题解:规律题,我们可以发现当m大于等于3时,abcabcabc……这个串的回文为1,并且字典数最小 ...