WebService

WebService

webservice概述

web Services是一个软件接口,它描述了一组可以在网络上通过标准化的 XML 消息传递访问的操作。它使用基于 XML 语言的协议来描述要执行的操作或者要与另一个 Web 服务交换的数据。Web Services更多是一种标准,而不是一种具体的技术,不同的平台、语言大都提供Web Services的开发实现

cxf概叙

Apache CXF = Celtix + XFire,Apache CXF 的前身叫 Apache CeltiXfire,现在已经正式更名为 Apache CXF 了,以下简称为 CXF。CXF 继承了 Celtix 和 XFire 两大开源项目的精华,提供了对 JAX-WS 全面的支持,并且提供了多种 Binding 、DataBinding、Transport 以及各种 Format 的支持,并且可以根据实际项目的需要,采用代码优先(Code First)或者 WSDL 优先(WSDL First)来轻松地实现 Web Services 的发布和使用。
Apache CXF 是一个开源的 Services 框架,CXF 帮助您利用 Frontend 编程 API 来构建和开发 Services ,像 JAX-WS 。这些 Services 可以支持多种协议,比如:SOAP、XML/HTTP、RESTful HTTP 或者 CORBA ,并且可以在多种传输协议上运行,比如:HTTP、JMS 或者 JBI,CXF 大大简化了 Services 的创建,同时它继承了 XFire 传统,一样可以天然地和 Spring 进行无缝集成

功能特性

CXF 包含了大量的功能特性,但是主要集中在以下几个方面:
1. 支持 Web Services 标准:CXF 支持多种 Web Services 标准,包含 SOAP、Basic Profile、WS-Addressing、WS-Policy、WS-ReliableMessaging 和 WS-Security。
2. Frontends:CXF 支持多种“Frontend”编程模型,CXF 实现了 JAX-WS API (遵循 JAX-WS 2.0 TCK 版本),它也包含一个“simple frontend”允许客户端和 EndPoint 的创建,而不需要 Annotation 注解。CXF 既支持 WSDL 优先开发,也支持从 Java 的代码优先开发模式。
3. 容易使用: CXF 设计得更加直观与容易使用。有大量简单的 API 用来快速地构建代码优先的 Services,各种 Maven 的插件也使集成更加容易,支持 JAX-WS API ,支持 Spring 2.0 更加简化的 XML 配置方式,等等。
4. 支持二进制和遗留协议:CXF 的设计是一种可插拨的架构,既可以支持 XML ,也可以支持非 XML 的类型绑定,比如:JSON 和 CORBA。

cxf目录结构

  • bin(目录)
  • bin 目录中是 CXF 框架中所提供的代码生成、校验、管理控制台工具:
  • Java to WSDL : java2wsdl
  • CXF Management Console Tool : mc
  • WSDL to Java : wsdl2java
  • WSDL to Service : wsdl2service
  • WSDL to SOAP : wsdl2soap
  • WSDL to XML : wsdl2xml
  • WSDL Validation : wsdlvalidator
  • XSD to WSDL : xsd2wsdl
  • docs(目录) CXF 所有类(class)对应的 API 文档,为开发者使用 CXF 完成应用开发提供应有的帮助。
  • etc(目录) 包含一个基本的 Service 暴露所需要的 web.xml 文件,及其它的配置文件。
  • lib(目录) lib 目录中包含 CXF 及其运行时所需要的和可选的第三方支持类包(.jar 文件),可以根据不同项目所需的 CXF 特性选择所需要的支持类包。如果不想一一去区分的话,可以直接在 Web 项目中包含所有的 CXF 及其运行时所需要的第三方支持类包(.jar 文件)即可。其中 cxf-2.0.2-incubator.jar 是 CXF 框架的二进制包文件,包含了全部的模块(modules),cxf-manifest-incubator.jar 是列表清单文件 manifest jar 。
    以下的 jar 包是所有 CXF 项目所必需的:
    • cxf.jar
    • commons-logging.jar
    • geronimo-activation.jar (Or the Sun equivalent)
    • geronimo-annotation.jar (Or the Sun equivalent)
    • geronimo-javamail.jar (Or the Sun equivalent)
    • neethi.jar
    • jaxb-api.jar
    • jaxb-impl.jar
    • stax-api.jar
    • XmlSchema.jar
    • wstx-asl.jar
    • xml-resolver.jar
      对于 Java2WSDL 和 WSDL2Java,除了必需的之外,还需要再增加如下 jar 包:
    • jaxb-xjc.jar
    • veliocity.jar
    • velocity-dep.jar
      为了支持 JAX-WS ,除了必需的之外,还需要再增加如下 jar 包:
    • jaxws-api.jar
    • saaj-api.jar
    • saaj-impl.jar
    • asm.jar (可选的,但是可以提升包装类型的性能)
      为了支持 XML 配置,除了必需的之外,还需要再增加如下 jar 包:
    • aopalliance.jar
    • spring-beans.jar
    • spring-context.jar
    • spring-core.jar
    • spring.web.jar
      为了独立的 HTTP 服务支持,除了必需的之外,还需要再增加如下 jar 包:
    • geronimo-servlet.jar
    • jetty.jar
    • jetty-sslengine.jar
    • jetty-util.jar
    • sl4j.jar & sl4j-jdk14.jar (可选的,但是可以提升日志 logging)
      为了支持 Aegis ,除了必需的之外,还需要再增加如下 jar 包:
    • jaxen.jar
    • jdom.jar
    • stax-utils.jar
      为了支持 WS-Security ,除了必需的之外,还需要再增加如下 jar 包:
    • bcprov-jdk14.jar
    • wss4j.jar
    • xalan.jar
    • xmlsec.jar
      为了支持 HTTP Binding ,除了必需的之外,还需要再增加如下 jar 包:
    • jra.jar
    • jettison.jar (仅为 JSON 服务所需的)
    • licenses(目录)
      列表了引用第三方 jar 包的相关许可协议。
  • modules(目录) modules 目录中包含了 CXF 框架根据不同特性分开进行编译的二进制包文件。发布基于 CXF 框架的 Web 项目时,可以选择使用该目录下的所有 .jar 文件,也可以选择 lib 目录中的 cxf-2.0.2-incubator.jar 文件。
  • samples(目录) samples 目录中包含了所有随 CXF 二进制包发布的示例,包含这些示例的源代码和相关 Web 应用配置文件,可以方便地用 Ant 来编译运行测试这些示例,来了解 CXF 的开发和使用的方法。可以通过 samples 目录和它各个子目录下的 README.txt 的文件来详细了解示例的编译与运行的步骤。
  • DISCLAIMER 由于仍是处于 Apache 孵化状态的项目,这里描述了一些说明。
  • LICENSE 文件中包含了 CXF 框架的授权协议 Apache License Version 2.0 。
  • NOTICE 罗列了 CXF 框架用到的相关第三方组件的授权协议以其它的相关信息。
  • README 文件中包含了 CXF 框架本身的一些简要说明。
  • release_notes.txt 包含了 CXF 发布时的一些信息,包括运行时所需要的环境,修复 BUG 的列表等。

cxf和servlet

CXF 是一种基于 Servlet 技术的 SOA 应用开发框架,需要 Servlet 容器的支持。CXF 支持在多种 Servlet 容器中运行,包括 WebSphere、WebLogic、Tomcat、Jetty 等
想要对要对CXF有个初步的认识,体验一下利用 CXF 进行发布与使用 Web Services,可以去看一samples\java_first_pojo的这个例子,很简单的将pojo发布成WebService,并展示了在客户端调用

cxf应用开发

添加依赖

  1. 将cxf解压目录下的lib文件夹下的jar包复制到项目中
  2. 接口类创建

    package ws.cxf;
    import javax.jws.WebService;
    @WebService
    public interface ISurveyService
    {
    /**
     * @param username 名字
     * @param point 分数
     * @return
     */
    public String vote(String username,int point);
    }
  3. 实现类

    package ws.cxf.impl;
    import javax.jws.WebService;
    import ws.cxf.ISurveyService;
    @WebService
    public class SurveyService implements ISurveyService
    {
    private String excludeName = "Michael";
    private int leastPonit = 5;
    public String vote(String username,int point)
    {
        String result = "";
        if(excludeName.equals(username))
        {
            result = " 您不能重复进行投票!";
        }
        else
        {
            result = " 谢谢您的投票!";
            if(point < leastPonit)
            {
                result += " 您的投票分数太低!";
            }
            else
            {
                result += " 您的投票分数通过审核!";
            }
        }
        return result;
    }
    // For IoC
    public String getExcludeName()
    {
        return excludeName;
    }
    public void setExcludeName(String excludeName)
    {
        this.excludeName = excludeName;
    }
    public int getLeastPonit()
    {
        return leastPonit;
    }
    public void setLeastPonit(int leastPonit)
    {
        this.leastPonit = leastPonit;
    }
    }
  4. spring配置
    在 src 目录中创建 beanRefServer.xml 文件,用来定义 Spring 的 Bean 的配置,CXF 支持 Spring 2.0 Schema 标签配置方式,并且提供快捷暴露 Web Services 的标签。

    <!--首先,我们需要引入 Spring 与 CXF 的命名空间(namespace)-->
    <beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:jaxws="http://cxf.apache.org/jaxws"
    xsi:schemaLocation="
        http://www.springframework.org/schema/beans 
        http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
        http://cxf.apache.org/jaxws 
        http://cxf.apache.org/schemas/jaxws.xsd">
        <!--需要引入我们所需要的 CXF 的 Bean 定义文件-->
            <!-- Import Apache CXF Bean Definition -->
    <import resource="classpath:META-INF/cxf/cxf.xml"/>
    <import resource="classpath:META-INF/cxf/cxf-extension-soap.xml"/>
    <import resource="classpath:META-INF/cxf/cxf-servlet.xml"/>
    <!--定义我们具体实现的 Bean ,这个 Bean 的定义与 Spring 普通的 Bean 定义一样-->
    <!-- SurveyService -->
    <bean id="surveyService" class="ws.cxf.impl.SurveyService">
        <property name="excludeName" value="Michael"/>
        <property name="leastPonit" value="10"/>
    </bean>
    <!--最后,将定义的 Bean 暴露出去成为 Web Service 服务,通过 CXF 提供的 Schema 标签配置 <jaxws:server> ,这样定义的配置显得更加简洁与方便-->
    <!--serviceClass 的值是我们的接口类的名称,address 为将要暴露出去的 Web Service 访问地址-->
    <!-- Expose SurveyWebService -->
    <jaxws:server id="surveyWebService" 
        serviceClass="ws.cxf.ISurveyService" 
        address="/SurveyWebService">
        <jaxws:serviceBean>
            <ref bean="surveyService"/> <!-- 要暴露的 bean 的引用 -->
            </jaxws:serviceBean>
    </jaxws:server>
  5. 配置web.xml

            <!-- Spring Config Location -->
    <context-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>/WEB-INF/classes/beanRefServer.xml</param-value>
    </context-param>
    <!-- Spring ContextLoaderListener -->
    <listener>
        <listener-class>
            org.springframework.web.context.ContextLoaderListener
        </listener-class>
    </listener>
        <!-- Apache CXFServlet -->
    <servlet>
        <servlet-name>CXFServlet</servlet-name>
        <display-name>CXF Servlet</display-name>
        <servlet-class>
            org.apache.cxf.transport.servlet.CXFServlet
        </servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <!-- CXFServlet Mapping -->
    <servlet-mapping>
        <servlet-name>CXFServlet</servlet-name>
        <url-pattern>/*</url-pattern>
    </servlet-mapping>

消费服务

开始编写消费服务相关的代码,首先通过 Spring 与 CXF 的配置来定义 Web Service 的客户端 Bean,在 src 目录下创建 beanRefClient.xml 配置文件,同样,我们也需要引入 Spring 与 CXF 命名空间的声明,并引入 CXF 的 Bean 的定义文件,最后通过与服务端配置相对的 CXF 标签 来定义客户端访问服务的声明,完整的定义内容如下

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:jaxws="http://cxf.apache.org/jaxws"
xsi:schemaLocation="
http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://cxf.apache.org/jaxws
http://cxf.apache.org/schemas/jaxws.xsd">
<!-- Import Apache CXF Bean Definition -->
<import resource="classpath:META-INF/cxf/cxf.xml"/>
<import resource="classpath:META-INF/cxf/cxf-extension-soap.xml"/>
<import resource="classpath:META-INF/cxf/cxf-servlet.xml"/>
<!-- SurveyWebService Client -->
<jaxws:client id="surveyServiceClient"
serviceClass="ws.cxf.ISurveyService"
address="http://localhost:8888/CXF_Spring_Survey/SurveyWebService"/>
</beans>

代码

package ws.cxf.client;

import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import ws.cxf.ISurveyService;

public class SurveyServiceClient
{
    public static void main(String[] args)
    {
        // 加载客户端的配置定义
        ApplicationContext context = new 
                ClassPathXmlApplicationContext("beanRefClient.xml");
        // 获取定义的 Web Service Bean
        ISurveyService surveyService = 
            (ISurveyService)context.getBean("surveyServiceClient");
        // 1、定义调查投票的变量与内容,用来发送给服务
        String username = "Test";
        int point = 88;
        // 调用方法进行服务消费
        String result = surveyService.vote(username,point);
        System.out.println("Result:" + result);
        // 2、传递不一样的调查投票内容
        username = "Michael";
        point = 100;
        // 再次调用方法进行服务消费,得到不一样的结果
        result = surveyService.vote(username,point);
        System.out.println("Result:" + result);
        // 3、第三次传递与调用
        username = "Jordan";
        point = 9;
        result = surveyService.vote(username,point);
        System.out.println("Result:" + result);
    }
}
阅读更多
上一篇Solr安装
下一篇JS格式化时间
想对作者说点什么? 我来说一句

webservice

2011年10月26日 692KB 下载

System.Net.Http.dll

2017年09月01日 180KB 下载

webservice摘录webservice摘录

2011年08月11日 31KB 下载

如何调用webservice

2010年04月14日 3KB 下载

webService资料

2010年08月27日 6.34MB 下载

web服务 webservice

2009年05月26日 69KB 下载

webService

2008年11月21日 11.21MB 下载

电子书webservice

2007年08月07日 2.62MB 下载

vb.net webservice 源程序

2009年05月10日 469KB 下载

webservice 论文

2009年04月10日 14.18MB 下载

没有更多推荐了,返回首页

关闭
关闭