码迷,mamicode.com
首页 > 编程语言 > 详细

jfinal集成spring cxf做webservice服务

时间:2015-11-25 19:11:55      阅读:1013      评论:0      收藏:0      [点我收藏+]

标签:

链接地址:http://zhengshuo.iteye.com/blog/2154047

废话不说,直接上代码 
新增cxf的plugin 
CXFPlugin 

Java代码  技术分享
  1. package com.jfinal.plugin.spring;  
  2.   
  3. import org.apache.cxf.Bus;  
  4. import org.apache.cxf.bus.spring.SpringBusFactory;  
  5. import org.apache.cxf.transport.servlet.ServletTransportFactory;  
  6. import org.springframework.context.ApplicationContext;  
  7.   
  8. import com.jfinal.plugin.IPlugin;  
  9.   
  10. public class CXFPlugin implements IPlugin{  
  11.     private ApplicationContext ctx;  
  12.     SpringBusFactory busFactory;  
  13.     ServletTransportFactory transportFac;  
  14.       
  15.     public boolean start() {  
  16.         if (ctx == null){  
  17.             ctx = IocInterceptor.ctx;  
  18.         }  
  19.         busFactory = new SpringBusFactory(ctx);  
  20.         Bus bus = busFactory.createBus();  
  21.         transportFac = new ServletTransportFactory(bus);  
  22.         CXFContext.cxf = new CXFContext(ctx,busFactory,transportFac);  
  23.         return true;  
  24.     }  
  25.       
  26.     public boolean stop() {  
  27.         return true;  
  28.     }  
  29.   
  30. }  


因为要用到spring的context,所以包名就放在spring同目录了 
新增CXFcontent 

Java代码  技术分享
  1. package com.jfinal.plugin.spring;  
  2.   
  3. import org.apache.cxf.bus.spring.SpringBusFactory;  
  4. import org.apache.cxf.transport.servlet.ServletTransportFactory;  
  5. import org.springframework.context.ApplicationContext;  
  6.   
  7. public class CXFContext{  
  8.     private ApplicationContext ctx;  
  9.     private SpringBusFactory busFactory;  
  10.     private ServletTransportFactory transportFac;  
  11.     static CXFContext cxf;  
  12.     public static CXFContext getCXFContent(){  
  13.         return cxf;  
  14.     }  
  15.     CXFContext(ApplicationContext ctx,SpringBusFactory busFactory,ServletTransportFactory transportFac){  
  16.         this.ctx = ctx;  
  17.         this.busFactory = busFactory;  
  18.         this.transportFac = transportFac;  
  19.           
  20.     }  
  21.     public ApplicationContext getCtx() {  
  22.         return ctx;  
  23.     }  
  24.     public void setCtx(ApplicationContext ctx) {  
  25.         this.ctx = ctx;  
  26.     }  
  27.     public SpringBusFactory getBusFactory() {  
  28.         return busFactory;  
  29.     }  
  30.     public void setBusFactory(SpringBusFactory busFactory) {  
  31.         this.busFactory = busFactory;  
  32.     }  
  33.     public ServletTransportFactory getTransportFac() {  
  34.         return transportFac;  
  35.     }  
  36.     public void setTransportFac(ServletTransportFactory transportFac) {  
  37.         this.transportFac = transportFac;  
  38.     }  
  39.     public CXFContext getCxf() {  
  40.         return cxf;  
  41.     }  
  42.     public void setCxf(CXFContext cxf) {  
  43.         this.cxf = cxf;  
  44.     }  
  45.       
  46. }  



新增servlet一个,用于替换CXFServlet 

Java代码  技术分享
  1. package cn.edu.jxut.common.config;  
  2.   
  3. import java.io.IOException;  
  4. import java.io.InputStream;  
  5.   
  6. import javax.servlet.ServletConfig;  
  7. import javax.servlet.ServletContext;  
  8. import javax.servlet.ServletException;  
  9.   
  10. import org.apache.cxf.bus.spring.BusApplicationContext;  
  11. import org.apache.cxf.bus.spring.SpringBusFactory;  
  12. import org.apache.cxf.common.classloader.ClassLoaderUtils;  
  13. import org.apache.cxf.resource.ResourceManager;  
  14. import org.apache.cxf.resource.URIResolver;  
  15. import org.apache.cxf.transport.servlet.AbstractCXFServlet;  
  16. import org.apache.cxf.transport.servlet.ServletContextResourceResolver;  
  17. import org.springframework.beans.factory.xml.XmlBeanDefinitionReader;  
  18. import org.springframework.context.ApplicationContext;  
  19. import org.springframework.context.support.GenericApplicationContext;  
  20. import org.springframework.core.io.InputStreamResource;  
  21.   
  22. import com.jfinal.plugin.spring.CXFContext;  
  23.   
  24. public class WsController extends AbstractCXFServlet{  
  25.     private GenericApplicationContext childCtx;  
  26.      private boolean inRefresh;  
  27.       
  28.     public void loadBus(ServletConfig servletConfig) throws ServletException {  
  29.         String springCls = "org.springframework.context.ApplicationContext";  
  30.         try {  
  31.           ClassLoaderUtils.loadClass(springCls, getClass());  
  32.           loadSpringBus(servletConfig);  
  33.         } catch (ClassNotFoundException e) {  
  34.           throw new ServletException("Can‘t load bus with Spring context class", e);  
  35.         }  
  36.       }  
  37.   
  38.       private void loadSpringBus(ServletConfig servletConfig)  
  39.         throws ServletException  
  40.       {  
  41.         ServletContext svCtx = getServletContext();  
  42.   
  43.         ApplicationContext ctx = CXFContext.getCXFContent().getCtx();  
  44.   
  45.         if (ctx == null) {  
  46.           Object ctxObject = svCtx.getAttribute("org.springframework.web.context.WebApplicationContext.ROOT");  
  47.   
  48.           if ((ctxObject instanceof ApplicationContext)) {  
  49.             ctx = (ApplicationContext)ctxObject;  
  50.           } else if (ctxObject != null)  
  51.           {  
  52.             Exception ex = (Exception)ctxObject;  
  53.             throw new ServletException(ex);  
  54.           }  
  55.         }  
  56.   
  57.         updateContext(servletConfig, ctx);  
  58.   
  59.       }  
  60.   
  61.       private void updateContext(ServletConfig servletConfig, ApplicationContext ctx)  
  62.       {  
  63.         if (ctx == null) {  
  64.           this.bus = new SpringBusFactory().createBus();  
  65.           ctx = (ApplicationContext)this.bus.getExtension(BusApplicationContext.class);  
  66.         } else {  
  67.           this.bus = CXFContext.getCXFContent().getBusFactory().createBus();  
  68.         }  
  69.   
  70.         ResourceManager resourceManager = (ResourceManager)this.bus.getExtension(ResourceManager.class);  
  71.         resourceManager.addResourceResolver(new ServletContextResourceResolver(servletConfig.getServletContext()));  
  72.   
  73.         replaceDestinationFactory();  
  74.   
  75.         this.controller = createServletController(servletConfig);  
  76.   
  77.         loadAdditionalConfig(ctx, servletConfig);  
  78.       }  
  79.   
  80.       private void loadAdditionalConfig(ApplicationContext ctx, ServletConfig servletConfig)  
  81.       {  
  82.         String location = servletConfig.getInitParameter("config-location");  
  83.         if (location == null) {  
  84.           location = "/META-INF/cxf/cxf-servlet.xml";  
  85.         }  
  86.         InputStream is = null;  
  87.         try {  
  88.           is = servletConfig.getServletContext().getResourceAsStream(location);  
  89.   
  90.           if ((is == null) || (is.available() == -1)) {  
  91.             URIResolver resolver = new URIResolver(location);  
  92.   
  93.             if (resolver.isResolved()) {  
  94.               is = resolver.getInputStream();  
  95.             }  
  96.           }  
  97.         }  
  98.         catch (IOException e)  
  99.         {  
  100.         }  
  101.         if (is != null) {  
  102.           this.childCtx = new GenericApplicationContext(ctx);  
  103.   
  104.           XmlBeanDefinitionReader reader = new XmlBeanDefinitionReader(this.childCtx);  
  105.           reader.setValidationMode(3);  
  106.           reader.loadBeanDefinitions(new InputStreamResource(is, location));  
  107.   
  108.           this.childCtx.refresh();  
  109.         }  
  110.       }  
  111.   
  112. }  



web.xml配置: 

Java代码  技术分享
  1. <servlet>      
  2.         <servlet-name>CXFServlet</servlet-name>      
  3.         <servlet-class>      
  4.             [color=red]cn.edu.jxut.common.config.WsController  [/color]        </servlet-class>      
  5.         <load-on-startup>1</load-on-startup>      
  6.     </servlet>  
  7.     <servlet-mapping>      
  8.         <servlet-name>CXFServlet</servlet-name>      
  9.         <url-pattern>/service/*</url-pattern>      
  10.     </servlet-mapping>  


jfinal配置: 

Java代码  技术分享
  1. public void configHandler(Handlers me) {  
  2.         me.add(new UrlSkipHandler(".*/service.*",false));  
  3.     }  





此服务已发布可用,在webservice实现类中直接使用jfinal的db获取数据或保存数据都非常方便。

jfinal集成spring cxf做webservice服务

标签:

原文地址:http://www.cnblogs.com/wvqusrtg/p/4995290.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!