zoukankan      html  css  js  c++  java
  • jfinal集成spring cxf做webservice服务

    链接地址: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获取数据或保存数据都非常方便。

    如果一件事情你觉得难的完不成,你可以把它分为若干步,并不断寻找合适的方法。最后你发现你会是个超人。不要给自己找麻烦,但遇到麻烦绝不怕,更不要退缩。 电工查找电路不通点的最快方法是:分段诊断排除,快速定位。你有什么启示吗? 求知若饥,虚心若愚。 当你对一个事情掌控不足的时候,你需要做的就是“梳理”,并制定相应的规章制度,并使资源各司其职。
  • 相关阅读:
    INFORMIX体系效能改善第一步
    Ubuntu判袂率不正常的一种复杂治理措施
    ubuntu8.04分区分配方案
    计算机启动更快的十五招
    理顺 JavaScript (13) 对象及 json
    获取指定地址的 JPG 图片 回复 "bangrj" 的问题
    理顺 JavaScript (14) constructor 与 instanceof
    理顺 JavaScript (9) Date 类
    用 API 提取、写入指定网站的 Cookie 回复 "bangrj" 的问题
    理顺 JavaScript (10) Math 类
  • 原文地址:https://www.cnblogs.com/wvqusrtg/p/4995290.html
Copyright ? 2011-2022 开发猿


http://www.vxiaotou.com