`
zhengshuo
  • 浏览: 136422 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
社区版块
存档分类
最新评论

jfinal集成spring cxf做webservice服务

阅读更多
废话不说,直接上代码
新增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获取数据或保存数据都非常方便。
分享到:
评论
1 楼 laizhiming1989 2014-12-25  
请问有demo么,谢谢!

相关推荐

    springboot和JFinal的集成

    总之,Spring Boot和JFinal的集成能够提供一个既拥有Spring Boot自动化配置和内置服务优势,又具备JFinal简单高效数据库操作特性的开发环境。这种集成方案适合那些希望快速搭建项目,同时又追求代码简洁性的开发者。

    JFinal集成Ueditor增删改查JSP版本Demo

    本篇将详细介绍如何使用JFinal框架集成Ueditor编辑器来实现一个基础的Web应用,包括文章的增删改查以及文章详情页的展示。JFinal是基于Java的轻量级MVC框架,而Ueditor是一款常用的富文本编辑器,能够提供丰富的编辑...

    jfinal 集成shiro jar包

    jfinal 3.0以上 集成shiro 的jar 包组合,放心下载使用,实测可以完成集成以及权限拦截

    activiti 工作流集成至JFinal框架

    在IT领域,集成Activiti工作流引擎到JFinal框架是一个常见的需求,这使得开发者能够构建出具有强大工作流管理功能的管理系统。以下是关于这个主题的详细知识点: 1. **Activiti**:Activiti是一个开源的工作流和...

    一个基于JFinal、Dubbo、Seata、Sentinel、ShardingSphere、Nacos等开发的国产框架

    一个基于 JFinal 的国产微服务框架,SpringCloud 之外的另一个选择,已经使用在用户量过亿的商业产品上,目前有超过 1000 家公司在使用 Jboot 做极速开发。Jboot 是一个基于 JFinal、Dubbo、Seata、Sentinel、...

    jfinal redis cluster plugin-JFinal redis cluster集群插件 带连接池和Jedis包

    标题中的“jfinal redis cluster ...总的来说,这个插件为JFinal项目与Redis集群的集成提供了一条快捷通道,尽管可能还有改进空间,但对于需要在JFinal中使用Redis Cluster的开发者来说,无疑是一个有价值的工具。

    jfinal3.4集成shiro,有建表sql,欢迎jfinal萌新

    本教程将详细讲解如何在JFinal 3.4版本中集成Shiro,并提供相关的建表SQL,以帮助初学者更好地理解与实践。 1. **JFinal 3.4 概述** JFinal 3.4 是JFinal的一个稳定版本,它主要依赖于Servlet API,不引入任何第三...

    驰骋工作流+驰骋表单引擎+JFinal集成版.您可以使用jfinal的敏捷开发,又可以使用驰骋BPM流程开发平台

    驰骋工作流、驰骋表单引擎与JFinal的集成版提供了一种高效且灵活的IT解决方案,结合了快速开发框架JFinal的敏捷性与业务流程管理(BPM)平台的强大功能。这一集成使得开发者能够利用JFinal的简洁性和高性能进行后端...

    jfinal+shiro整合的一个例子

    3. **JFinal拦截器集成**:利用JFinal的拦截器机制,我们可以将Shiro的过滤器链集成到JFinal的路由中,实现权限控制。拦截器可以检查用户是否已经登录,未登录的用户会被重定向到登录页面。 4. **Shiro的认证与授权...

    jfinal整合activiti

    JFinal 是一个基于Java的轻量级Web开发框架,它以其高效、简洁而闻名。Activiti,则是一款开源的工作流引擎,广泛应用于企业业务流程管理(BPM)系统中。将 JFinal 与 Activiti 整合,可以实现灵活的业务流程控制,...

    jfinal插件集合demojfinal-demo.zip

    jfinal demo 程序,使用bootstrap 本人编写的多款插件,如使用coffeescript-maven-plugin编译coffeescript代码,使用lesscsss-maven-plugin编译lesscss代码,使用flyway-maven-plugin运行数据库脚本,支持多种定制...

    jfinal运行所需jar包

    7. **依赖注入**:虽然JFinal自身并不强制使用IoC(Inversion of Control)容器,但可以通过集成Spring等框架实现依赖注入,提高代码的灵活性。 8. **Web服务器适配**:JFinal可以很好地与Tomcat、Jetty等常见的...

    Vue结合JFinal调用activiti工作流

    作为没用过工作流的一员,之前看过vue引入activiti工作流的案例,但是组件中存在很多问题,这个是我修改过并且成功调用,大家可以供参考,富含Java代码(Jfinal),后续出spring版本的, 前台版本vue4.0版本, ...

    基于JFinal的国产微服务框架Jboot设计源码

    Jboot微服务框架:基于JFinal的国产微服务框架,提供超过992个文件,涵盖Java、HTML、JavaScript、Shell和CSS等多种语言。该框架被用于用户量过亿的商业产品,并已被超过1000家公司采用,用于极速开发。

    jfinal学习手册

    6. SpringPlugin:这部分介绍了如何通过SpringPlugin集成Spring框架到JFinal项目中,包括SpringPlugin本身以及IocInterceptor的使用。 7. Validator:这部分是关于后端校验的配置和使用,Validator是一个用于数据...

    JFinal中文手册

    SpringPlugin是JFinal与Spring框架整合的插件,它提供了IocInterceptor用于集成Spring的IoC容器。 Validator是JFinal中的验证器,用于对后端数据进行校验。它包括验证器的配置。 FreeMarker是JFinal支持的模板引擎...

    jfinal帮助文档、pdf及API文档

    jfinal帮助文档、pdf文档及API文档 大全,中文pdf高清文档

    jfinal 1.8 手册

    SpringPlugin是JFinal中用于集成Spring框架的插件,它提供了与Spring IoC容器集成的能力。通过IocInterceptor拦截器,可以在JFinal应用中使用Spring管理的Bean。 Validator在JFinal中用于后端验证,提供了强大的...

    Jfinal-2.1-all && Jfinal demo

    2. **ORM支持**:Jfinal集成了ActiveRecord模式,通过简单的注解或配置,即可实现数据库操作,大大减少了数据库层的代码量。同时,支持多种数据库,如MySQL、Oracle、SQLite等。 3. **轻量级**:Jfinal的体积小,不...

    JFinal简单示例

    然而,对于大型项目,Spring Boot 提供了更全面的生态系统和更强大的服务治理能力。 5. **JFinal 源码分析** JFinal 的源码清晰易读,适合学习和定制。它的核心组件如 Controller、ActionKit、Interceptor 等都有...

Global site tag (gtag.js) - Google Analytics