设为首页 收藏本站
查看: 518|回复: 0

[经验分享] 【2011.9.20】基于CXF Web Service:Apache CXF简单部署 .

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2015-8-2 14:26:03 | 显示全部楼层 |阅读模式
CXF旨在为服务创建必要的基础设施,它的整体架构主要由以下几个部分组成:


1.Bus

它是C XF架构的主干,为共享资源提供了一个可配置的场所,作用非常类似于S p r i n g的ApplicationContext。这些共享资源包括WSDL管理器、绑定工厂等。通过对Bus进行扩展,可以方便地容纳自己的资源,或替换现有的资源。默认Bus实现是基于Spring的,通过依赖注入,将运行时组件串起来。Bus的创建由BusFactory负责,默认是 SpringBusFactory,对应于默认Bus实现。在构造过程中,SpringBusFactory会搜索META-INF/cxf(就包含在 CXF的Jar中)下的所有Bean配置文件,根据它们构建一个ApplicationContext。开发者也可提供自己的配置文件来定制Bus。


2.消息传递和拦截器(Interceptor)

CXF建立于一个通用的消息层之上,主要由消息、拦截器和拦截器链(InterceptorChain)组成。CXF是以消息处理为中心的,熟悉 JSP/Servlet的开发者可以将拦截器视为CXF架构中的“Filter”,拦截器链也与“FilterChain”类似。通过拦截器,开发者可以方便地在消息传递、处理的整个过程中对CXF进行扩展。拦截器的方法主要有两个:handleMessage和handleFault,分别对应消息处理和错误处理。在开发拦截器的时候需要注意两点:

拦截器不是线程安全的,不建议在拦截器中定义实例变量并使用它。这一点跟JSP/Servlet中对于Filter的处理是一样的;

不要调用下一个拦截器的handleMessage或handleFault,这个工作由InterceptorChain来完成。


3.前端(Front End)

它为CXF提供了创建服务的编程模型,当前主要的前端就是JAX-WS。


4.服务模型

CXF中的服务通过服务模型来表示。它主要有两部分:ServiceInfo和服务本身。ServiceInfo作用类似WSDL,包含接口信息、绑定、端点(EndPoint)等信息;服务则包含了ServiceInfo、数据绑定、拦截器和服务属性等信息。可使用Java类和WSDL来创建服务。一般是由前端负责服务的创建,它通过ServiceFactory来完成。


5.绑定(Binding)

绑定提供了在传输之上映射具体格式和协议的方法,主要的两个类是Binding和BindingFactory。BindingFactory负责创建Binding。


6.传输(Transport)

为了向绑定和前端屏蔽传输细节,CXF提供了自己的传输抽象。其中主要有两个对象:Conduit和Destination。前者是消息发送的基础,后者则对应消息接收。开发者还可以给Conduit和Destination注册MessageObserver,以便在消息发送和接收时获得通知。

开发方法

CXF 可以创建的Web 服务应用有两种:服务提供者和服务消费者。这种结构可类比客户端/ 服务器结构,服务消费者类似于客户端,服务提供者类似于服务器。使用CXF 创建应用时,服务提供者和服务消费者并不需要同时出现,因为有可能应用只是作为服务提供者或服务消费者单独出现。

该框架提供了以下功能:


       OpenSource中关于CXF的简介:Apache CXF一个开源的Service框架,它实现了JCP与Web Service中一些重要标准。CXF简化了构造,集成,面向服务架构(SOA)业务组件与技术的灵活复用。在CXF中,Service使用WSDL标准定义并能够使用各种不同的消息格式(或binding)和网络协议(transports)包括SOAP、XML(通过HTTP或JMS)进行访问。CXF同样支持多种model 如:JAX-WS,JBI,SCA和CORBAservice。CXF设计成可灵活部署到各种容器中包括Spring-based,JBI,SCA, Servlet和J2EE容器。



       用CXF构建webservice程序的大致流程如下:

      1 配置web.xml文件,加载CXF

      2 编写java接口,和接口的实现

      3 在spring的applicationContext.xml中配置java文件

       4 创建beans.xml文件,里面配置接口的实现类

     5 运行tomca服务器即可生成wsdl文件

     6 编写测试代码:编写java测试文件和client-beans.xml文件

     7编写运行客户端文件所需的服务器,可以单独编写,也可以在随tomcat启动

示例代码。首先下载cxf,然后解压,将lib下的所有jar包拷到工程下面


    一 最简单的helloword

web.xml

  


  

  


  


  

  

  

  contextConfigLocation

  WEB-INF/beans.xml

  

  

  

  
org.springframework.web.context.ContextLoaderListener

  

  

  

  

  

  CXFServlet

  
org.apache.cxf.transport.servlet.CXFServlet

  

  

  2

  

  

  

  CXFServlet

  /*

  

  


  

2  接口HelloWord.java和接口的实现HelloWordImpl.java(service endpoint interface,SEI),

package com.demo;


import javax.jws.WebService;


/** *//**

* service interface

*

* @author

*

*/

@WebService

public interface HelloWord{

    StringsayHi(String text);

}



package com.demo;


import javax.jws.WebService;


/** *//**

* implementation

*

* @author

*

*/

@WebService

public class HelloWordImpl implements HelloWord{


    public StringsayHi(String text){

        return "Hi" + text;

    }

}




3 beans.xml





   

   

   


   




4  启动tomcat服务器,在浏览器里面输入http://localhost:8888/helloword后页面上会出现

{http://demo.com/}HelloWordImplPort ,点击会看到生成的wsdl文件http://localhost:8888/helloword/HelloWord?wsdl


5 客户端Client.java和client-beans.xml

package com.demo;



importorg.springframework.context.ApplicationContext;

importorg.springframework.context.support.ClassPathXmlApplicationContext;


public final class Client{


    private Client(){


    }


    public static void main(Stringargs[]) throws Exception{

   

        

   

        ApplicationContext  context = new ClassPathXmlApplicationContext(

                new String[]{"com/demo/client-beans.xml" });


        HelloWord client = (HelloWord)context.getBean("client");


        String response =client.sayHi("+亲爱的:邓建利");

        System.out.println("结果: " +response);

        System.exit(0);

      

    }

   


        

        

}






   


   

        

        

   




6 客户端运行时所需的服务器Server.java

package com.demo;


importorg.mortbay.jetty.Connector;

importorg.mortbay.jetty.Handler;

importorg.mortbay.jetty.handler.DefaultHandler;

importorg.mortbay.jetty.handler.HandlerCollection;

importorg.mortbay.jetty.nio.SelectChannelConnector;

importorg.mortbay.jetty.webapp.WebAppContext;


public class Server{


    protected Server() throws Exception{

        System.out.println("StartingServer");


        org.mortbay.jetty.Server server= new org.mortbay.jetty.Server();


        SelectChannelConnectorconnector = new SelectChannelConnector();

        connector.setPort(9001);

        server.setConnectors(newConnector[]{connector});


        WebAppContext webappcontext =new WebAppContext();

        webappcontext.setContextPath("/");


        webappcontext.setWar("WebRoot");


        HandlerCollection handlers =new HandlerCollection();

        handlers.setHandlers(newHandler[]{webappcontext, new DefaultHandler()});


        server.setHandler(handlers);

        server.start();

        System.out.println("Serverready...");

        server.join();

    }


    public static void main(Stringargs[]) throws Exception{

        new Server();

    }


}

7 运行客户端Client.java的顺序,先启动tomcat,然后运行Server.java,最后运行Client.java


  Web 服务标准支持:CXF 支持以下Web 服务标准:

  Java API for XML Web Services (JAX-WS)

  SOAP

  Web 服务描述语言(Web ServicesDescription Language ,WSDL)

  消息传输优化机制(Message Transmission Optimization Mechanism,MTOM)

  WS-Basic Profile

  WS-Addressing

  WS-Policy

  WS-ReliableMessaging

  WS-Security

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-93391-1-1.html 上篇帖子: The APR based Apache Tomcat Native library which allows optimal performance in p 下篇帖子: Apache OFBiz 学习笔记 之 服务引擎 二
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表