`
SIHAIloveYAN
  • 浏览: 124458 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类

webService教程之cxf框架

 
阅读更多

一:简介

Apache CXF = Celtix + Xfire
支持多种协议:
a) SOAP1.1,1,2
b) HTTP
c) CORBA(Common Object Request Broker Architecture公共对象请求代理体系结构,早期语言使用的WS。C,c++,C#)
d) 并可以与Spring进行快速无缝的整合
e) 灵活的部署:可以运行有Tomcat,Jboss,Jetty(内置),IBMWS,BeaWS上面。

二:目录结构

下载地址:http://cxf.apache.org/download.html

bin(目录)
bin 目录中是 CXF 框架中所提供的代码生成、校验、管理控制台工具(可执行命令)

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 的文件来详细了解示例的编译与运行的步骤。

三:环境搭建

1、需要jdk环境
2、CXF_HOME
这里写图片描述
3、ANT_HOME
这里写图片描述

4、CATALINA_HOME
这里写图片描述

5、
a) Path = %JAVA_HOME%\bin;%CXF_HOME%\bin;%CATALINA_HOME%\bin;%ANT_HOME%\bin
b) CLASSPATH=.;%CXF_HOME%\lib\cxf-manifest.jar;.\build\classes

四:案例一

  1. 创建java项目
  2. 引入所有依赖包
  3. 创建服务类
    用两个不同的类发布应用:
    ServerFactoryBean(不需要使用@webservice) 生成的文档不规范,不建议使用
    JaxWsServerFactoryBean(建议使用此类,需要使用@webservice) 生成的文档不规范,可以发布SOAP1.1,SOAP1.2的协议,当cxf的服务类中没有方法时也可以发布成功,不报错。如果使用SOAP1.2需要用@bindType注解指定
    当使用SOAP1.2时wsimport命令失效,需要使用cxf的wsdl2java
    建议:发布服务的时候使用SOAP1.2,客户端调用的时候使用SOAP1.1
public class HelloService {

    public static void main(String[] args) {
        //创建服务工厂对象
        //ServerFactoryBean sfb = new ServerFactoryBean();
JaxWsServerFactoryBean sfb = new JaxWsServerFactoryBean ();
        //设置服务地址
        sfb.setAddress("http://127.0.0.1:8888/hello");
        //设置服务类
        sfb.setServiceClass(HelloService.class);
        //设置服务对象的实例
        sfb.setServiceBean(new HelloService());
        //发布服务
        sfb.create();
    }
@WebService
public String sayHello(String name){
        return name+ " hello";
    }

  1. 通过wsimport(SOAP1.1)生成客户端代码
  2. 调用webservice(查看教程1)

五:wsdl2java使用

在cxf中,也提供了一个用于生成客户端调用代码的工具。它的功能就如同wsimport一样。
先让我们了解一下cxf的wsdl2java工具,可以生成一堆客户端调用的代码。既可以生成SOAP1.1也可以生成SOAP1.2
此工具位于cxf_home/bin目录下。参数与wsimport有所不同。
它包含以下参数:
a) -d参数,指定代码生成的目录。
b) -p参数,指定生成的新的包结构。
需要说明的是,由于wsdl2java是根据jdk1.7生成的本地代码,所以,需要对生成的代码做一点点修改。
在命令行执行:
wsdl2java –d . http://127.0.0.1:8888/helloworld?wsdl

SOAP1.2消息

POST /WebServices/MobileCodeWS.asmx HTTP/1.1
Host: webservice.webxml.com.cn
Content-Type: application/soap+xml; charset=utf-8
Content-Length: length

<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
  <soap12:Body>
    <getMobileCodeInfo xmlns="http://WebXml.com.cn/">
      <mobileCode>string</mobileCode>
      <userID>string</userID>
    </getMobileCodeInfo>
  </soap12:Body>
</soap12:Envelope>
HTTP/1.1 200 OK
Content-Type: application/soap+xml; charset=utf-8
Content-Length: length

<?xml version="1.0" encoding="utf-8"?>
<soap12:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
  <soap12:Body>
    <getMobileCodeInfoResponse xmlns="http://WebXml.com.cn/">
      <getMobileCodeInfoResult>string</getMobileCodeInfoResult>
    </getMobileCodeInfoResponse>
  </soap12:Body>
</soap12:Envelope>

六:使用JaxWsServerFactoryBean调用接口服务类

1.创建服务接口

@WebService//注意注解加在接口上
public interface HI {

    public String sayHi(String name);
}

2.创建接口实现类

public class HIImpl implements HI {

    @Override
    public String sayHi(String name) {
        // TODO Auto-generated method stub
        return name + " hello";
    }

}

3.创建发布服务类

public static void main(String[] args) {
        JaxWsServerFactoryBean jf = new JaxWsServerFactoryBean();
        jf.setAddress("http://127.0.0.1:4345/hi");
        jf.setServiceClass(HI.class);
        jf.setServiceBean(new HIImpl());
        jf.create();
    }

4.4 生成客户端代码

5.调用客户端

public class Client {

    public static void main(String[] args) {
        HIService hs = new HIService();
        HI serviceClass = hs.getHIPort();
        System.out.println(serviceClass.sayHi("张三"));
    }

}

七:拦截输入输出消息

LoggingInInterceptor – 信息输入时的拦截器 –请求
LoggingOutInterceptor –信息输出时的拦截器-响应

public class InterServer {

    public static void main(String[] args) {
        JaxWsServerFactoryBean jf = new JaxWsServerFactoryBean();
        jf.getInInterceptors().add(new LoggingInInterceptor());
        jf.getOutInterceptors().add(new LoggingOutInterceptor());
        jf.setAddress("http://127.0.0.1:5434/hi");
        jf.setServiceClass(HI.class);
        jf.setServiceBean(new HIImpl());
        jf.create();
    }

}

八:在web项目中创建类的cxf服务

1.创建web项目
2.导入所有包
3.创建服务类,必须指定注解@webService
4.配置web.xml,

<!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app>
    <servlet>
        <servlet-name>cxf</servlet-name>
        <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>cxf</servlet-name>
        <url-pattern>/services/*</url-pattern>
    </servlet-mapping>
    <session-config>
        <session-timeout>60</session-timeout>
    </session-config>
</web-app>

5、创建cxf的核心配置文件cxf-servlet.xml

<?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"
    xmlns:jaxrs="http://cxf.apache.org/jaxrs" xmlns:cxf="http://cxf.apache.org/core"
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
          http://www.springframework.org/schema/beans/spring-beans.xsd
            http://cxf.apache.org/jaxrs http://cxf.apache.org/schemas/jaxrs.xsd
            http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd
            http://cxf.apache.org/core http://cxf.apache.org/schemas/core.xsd">
    <!-- 引入CXF Bean定义如下,早期的版本中使用 -->
    <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" />

    <jaxws:endpoint id="hello" address="/hello" implementor="com.rl.cxf.web.server.HelloService">
        <jaxws:outInterceptors>
            <bean class="org.apache.cxf.interceptor.LoggingInInterceptor"></bean>
        </jaxws:outInterceptors>
        <jaxws:inInterceptors>
            <bean class="org.apache.cxf.interceptor.LoggingOutInterceptor"></bean>
        </jaxws:inInterceptors>
    </jaxws:endpoint>

</beans>
<script type="text/javascript"> $(function () { $('pre.prettyprint code').each(function () { var lines = $(this).text().split('\n').length; var $numbering = $('<ul/>').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($('<li/>').text(i)); }; $numbering.fadeIn(1700); }); }); </script>
分享到:
评论

相关推荐

    webService(基于cxf)的完整例子

    1. **CXF框架介绍**:CXF,全称为"Code first eXtended Framework",最初由XFire项目发展而来,后与Apache Axiom和Neethi等项目合并。CXF提供了一种从代码直接生成Web服务的方式,支持JAX-WS和JAX-RS标准,使得开发...

    SpringBoot+Mybatis+CXF框架,实现Restful api与 WebService api接口的大实验

    SpringBoot+Mybatis+CXF框架,实现Restful api与 WebService api接口的大实验 本实验的主要目标是使用SpringBoot、Mybatis和CXF框架来实现Restful API和WebService API接口的大实验。下面是实验的详细介绍: 标题...

    webService的CXF框架jar包

    WebService的CXF框架是一个广泛使用的开源项目,用于构建和消费Web服务。它提供了一种简单且强大的方式来实现基于SOAP(Simple Object Access Protocol)和RESTful(Representational State Transfer)风格的Web服务...

    CXF框架发布webservice

    本教程将深入探讨如何使用CXF框架发布Web服务。 首先,"5-采用CXF框架发布webservice.avi"这个视频很可能详细介绍了使用CXF的基本步骤。发布一个Web服务通常包括以下过程: 1. **环境准备**:确保你的开发环境中...

    CXF框架webservice教程

    CXF框架webservice教程,webservice客户端代码开发教程。图文并茂

    WebService CXF 详细教程

    **二、CXF框架介绍** Apache CXF是一个开源的Java框架,用于构建和部署WebServices。CXF不仅支持SOAP,还支持RESTful风格的服务。它提供了丰富的功能,包括WS-*协议栈支持、客户端和服务端的生成工具、多种传输方式...

    SpringBoot框架及CXF发布WebService

    在给定的压缩包文件中,"WebService_Server"可能包含了SpringBoot与CXF集成的服务器端代码示例,而"Webservice_Client"则可能包含CXF客户端调用服务的示例代码。这两个部分可以作为学习和实践SpringBoot发布和消费...

    webservice的cxf框架拦截器demo

    本篇将深入探讨CXF框架中的拦截器(Interceptor)及其在"webservice的cxf框架拦截器demo"中的应用。 拦截器在CXF中是一种强大的工具,它允许开发者在消息发送或接收的过程中插入自定义的行为。这在处理认证、日志...

    webservice的cxf框架拦截器demo.rar

    【描述】:本压缩包“webservice的cxf框架拦截器demo.rar”提供了一个关于如何在Apache CXF框架下实现Web服务拦截器的实际操作示例。CXF是一个开源的服务框架,它允许开发者创建和部署多种类型的Web服务,包括SOAP和...

    C#动态调用CXF WEBSERVICE框架的共通类

    C#动态调用CXF WEBSERVICE框架共通类。

    webservice的cxf框架客户端调用所需jar包

    CXF框架是Apache组织开发的一款开源的Web服务框架,它支持SOAP、RESTful等多种Web服务标准,同时也提供了客户端和服务端的实现。在使用CXF框架进行Web服务客户端调用时,需要依赖一系列的JAR包来确保功能的正常运行...

    spring4+mybatis3+webservice+cxf框架整合

    在IT行业中,构建高效、可扩展的Web服务是至关重要的,而"spring4+mybatis3+webservice+cxf框架整合"就是一个典型的解决方案。这个项目结合了四个关键的技术组件,以构建一个强大的后端系统。 首先,Spring 4是Java...

    webservice框架之CXF-详细技术参考

    Apache CXF = Celtix + XFire,Apache CXF 的前身叫 Apache CeltiXfire,现在已经正式更名为 Apache CXF 了,以下简称为 CXF。CXF 继承了 Celtix 和 XFire 两大开源项目的精华,提供了对 JAX-WS 全面的支持,并且...

    cxf框架的webservice,传递json,xml

    本篇将深入探讨如何在CXF框架中实现WebService,特别是如何处理JSON和XML的数据交换。 1. **CXF与WebService** CXF框架提供了基于Java的接口来定义和实现WebService,这些接口基于JAX-WS(Java API for XML Web ...

    webservice天气预报例子cxf实例

    在本例中,“webservice天气预报例子cxf实例”指的是使用Apache CXF框架实现的一个天气预报相关的Web服务示例。 Apache CXF是一个开源框架,它为开发和部署Web服务提供了全面的支持。CXF允许开发者通过Java编程模型...

    WebService开发客户端 cxf方式

    本篇文章将详细探讨如何使用CXF框架来开发WebService客户端。 一、CXF简介 CXF是一个开源的Java框架,它支持构建和部署SOAP(简单对象访问协议)和RESTful(Representational State Transfer)Web服务。CXF提供了...

    xfire java webservice(cxf前身框架了解webservice原理很好的入门框架)

    它是CXF框架的前身之一,在2006年XFire项目与Apache CX框架合并后形成了如今广泛使用的Apache CXF框架。XFire因其简单易用的特点,在当时成为了许多开发者学习WebService开发的首选框架。 #### 二、XFire与...

    基于Soap协议下CXF框架开发Webservice

    CXF框架是Apache组织提供的一款开源工具,它简化了在Java环境中创建和消费SOAP Web服务的过程。本篇文章将深入探讨如何使用CXF框架在SOAP协议下开发Web服务。 首先,我们需要理解SOAP的基本概念。SOAP是一种轻量级...

    基于CXF框架的webservice的demo

    【基于CXF框架的Web服务(Webservice)Demo详解】 在现代软件开发中,Web服务是一种常见的接口交互方式,它允许不同的系统之间通过标准的网络协议进行数据交换。Apache CXF是一个开源的Java框架,专门用于构建和...

    CXF框架webservice教程.pdf

    本教程将详细介绍如何使用CXF框架来创建和消费Web服务。 首先,你需要从Apache官方网站下载CXF的开发包,例如在本例中是`apache-cxf-2.4.3.zip`。这个ZIP文件包含了所有必要的JAR文件,你需要将它们添加到你的Java...

Global site tag (gtag.js) - Google Analytics