`
lfc_jack
  • 浏览: 144896 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类

Web Service笔记(四):利用CXF结合Spring开发web service(转别人的)

 
阅读更多
一、前言准备:
1、Web Service笔记(二):利用CXF开发Web Service
2、需要的 jar包:需要spring的 jar 包,去掉 jetty 的包。

二、CXF 结合Spring 发布Web Service

1、配置web.xml文件。需要配置spring 与 CXF。
[java] view plain copy 在CODE上查看代码片派生到我的代码片
  <!-- 加载Spring容器配置  start--> 
<listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 
<!-- 设置Spring容器加载配置文件路径 --> 
<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>classpath*:applicationContext-server.xml</param-value> 
</context-param> 
  
<listener> 
    <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class> 
</listener> 
 
<!-- 加载Spring容器配置  end-->  
 
<!--    配置CXF start  --> 
<servlet> 
    <servlet-name>CXFService</servlet-name> 
    <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>CXFService</servlet-name> 
    <url-pattern>/*</url-pattern> 
</servlet-mapping> 
<!--    配置CXF end  --> 


2、配置 spring 的配置文件,增加 CXF 的schema 与配置依赖。
[html] view plain copy 在CODE上查看代码片派生到我的代码片
xmlns:jaxws="http://cxf.apache.org/jaxws" 
xmlns:jaxrs="http://cxf.apache.org/jaxrs" 
 
http://cxf.apache.org/jaxws  
http://cxf.apache.org/schemas/jaxws.xsd 
http://cxf.apache.org/jaxrs 
http://cxf.apache.org/schemas/jaxrs.xsd " 

[html] view plain copy 在CODE上查看代码片派生到我的代码片
   <!-- CXF必须引入配置依赖 --> 
   <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"/> 

3、spring结合 CXF 的配置
1)endpoint 标签,也可以使用 server(略)。
[html] view plain copy 在CODE上查看代码片派生到我的代码片
<jaxws:endpoint id="" implementor="" address=""> 
</jaxws:endpoint> 

2)address 地址,省略工程名等。如访问地址:http://localhost:8080/Java_WS_Server/helloworld1?wsdl
3)implementor 指定 WS 的服务提供者。支持两种形式:
    ①、直接给定服务提供者的类名。
    ②、设置容器中的一个bean。(推荐)

4)第一种 implementor 方法的配置。
[html] view plain copy 在CODE上查看代码片派生到我的代码片
<!-- 直接给定服务提供者的类名,不推荐 --> 
<jaxws:endpoint id="helloWorld1" implementor="com.ws.impl.HelloWorldImpl" address="/helloworld"> 
</jaxws:endpoint> 

5)第二种 implementor 方法的配置,引用bean。
[html] view plain copy 在CODE上查看代码片派生到我的代码片
<!-- 设置容器中的一个bean,用# 引用。推荐。 -->    
<bean id="helloWorld2" class="com.ws.impl.HelloWorldImpl"></bean>  
<jaxws:endpoint id="helloWorldWebService" implementor="#helloWorld2" address="/soap/helloWorld"> 
lt;/jaxws:endpoint> 

5、添加拦截器
[html] view plain copy 在CODE上查看代码片派生到我的代码片
<!-- 配置CXF的拦截器 --> 
<bean id="helloWorld3" class="com.ws.impl.HelloWorldImpl"></bean>  
     <jaxws:endpoint id="helloWorldServer" implementor="#helloWorld3" address="/intecepter/helloWorld"> 
    <jaxws:inInterceptors> 
    <bean class="org.apache.cxf.interceptor.LoggingOutInterceptor"></bean> 
        <bean class="com.intecepter.MyIntecepter"></bean>            
    </jaxws:inInterceptors> 
     
    <jaxws:outInterceptors> 
    </jaxws:outInterceptors> 
</jaxws:endpoint> 

6、完整的spring的配置文件的代码如下:applicationContext-server.xml
[html] view plain copy 在CODE上查看代码片派生到我的代码片
<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:jaxws="http://cxf.apache.org/jaxws" 
    xmlns:jaxrs="http://cxf.apache.org/jaxrs" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans      
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context-3.0.xsd 
    http://cxf.apache.org/jaxws  
    http://cxf.apache.org/schemas/jaxws.xsd 
    http://cxf.apache.org/jaxrs 
    http://cxf.apache.org/schemas/jaxrs.xsd ">  
     
    <!-- CXF必须引入配置依赖 --> 
    <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"/> 
     
    <context:property-placeholder /> 
    <context:annotation-config /> 
    <!-- 设置需要进行Spring注解扫描的类包 -->   
    <context:component-scan base-package="com/service" /> 
     
     
    <!--发布方式一: 使用 server --> 
    <!-- 
         注意下面的address,这里的address的名称就是访问的WebService的name      
        <jaxws:server id="userService" serviceClass="com.hoo.service.IComplexUserService" address="/Users"> 
            <jaxws:serviceBean> 
                 要暴露的 bean 的引用  
                <ref bean="userServiceBean"/> 
            </jaxws:serviceBean> 
        </jaxws:server>  
    --> 
     
    <!--发布方式二:使用 endpoint : 
    1、implementor 指定 WS 的服务提供者。支持两种形式: 
        1)直接给定服务提供者的类名。 
        2)设置容器中的一个bean。推荐。 
    2、address :地址,省略工程名等。访问地址:http://localhost:8080/Java_WS_Server/helloworld1?wsdl 
    --> 
     
    <!-- 直接给定服务提供者的类名,不推荐 --> 
    <jaxws:endpoint id="helloWorld1" implementor="com.ws.impl.HelloWorldImpl" address="/helloworld"> 
    </jaxws:endpoint> 
     
    <!-- 设置容器中的一个bean,用# 引用。推荐。 -->    
     <bean id="helloWorld2" class="com.ws.impl.HelloWorldImpl"></bean>  
     <jaxws:endpoint id="helloWorldWebService" implementor="#helloWorld2" address="/soap/helloWorld"> 
     </jaxws:endpoint> 
      
      
     <!-- 配置CXF的拦截器 --> 
     <bean id="helloWorld3" class="com.ws.impl.HelloWorldImpl"></bean>  
     <jaxws:endpoint id="helloWorldServer" implementor="#helloWorld3" address="/intecepter/helloWorld"> 
        <jaxws:inInterceptors> 
            <bean class="org.apache.cxf.interceptor.LoggingOutInterceptor"></bean> 
            <bean class="com.intecepter.MyIntecepter"></bean>            
        </jaxws:inInterceptors> 
         
        <jaxws:outInterceptors> 
        </jaxws:outInterceptors> 
     </jaxws:endpoint> 
 
     
    <!-- REST WebService 接口--><!-- 
    <jaxrs:server id="restServiceContainer" address="/rest"> 
         暴露的Bean  
        <jaxrs:serviceBeans> 
            <bean class="com.hoo.rest.RESTSampleSource"></bean>  
            <bean class="com.hoo.rest.SurpolicyEntrence"></bean>     
        </jaxrs:serviceBeans> 
        <jaxrs:extensionMappings> 
            <entry key="json" value="application/json" /> 
            <entry key="xml" value="application/xml" /> 
        </jaxrs:extensionMappings> 
        <jaxrs:languageMappings> 
               <entry key="en" value="en-gb"/>   
        </jaxrs:languageMappings> 
    </jaxrs:server> 
     
     
     
     
--></beans> 

7、部署工程,访问 http://localhost:8080/Java_WS_Server,显示如下:


二、CXF 结合Spring 客户端
1、jar包的引进与服务端一致,使用 wsdl2java http://localhost:8080/Java_WS_Server/soap/helloWorld?wsdl 创建客户端。
2、web配置:客户端的web配置可以省略CXF的配置,只需要spring即可。
[html] view plain copy 在CODE上查看代码片派生到我的代码片
  <!-- 加载Spring容器配置  start--> 
<listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 
<!-- 设置Spring容器加载配置文件路径 --> 
<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>classpath*:applicationContext-client.xml</param-value> 
</context-param> 
  
<listener> 
    <listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class> 
</listener> 


3、利用 jaxws:client 标签实现 CXF 的客户端的spring结合。记得引入CXF的 schema 规范与本身的配置。
[html] view plain copy 在CODE上查看代码片派生到我的代码片
<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:context="http://www.springframework.org/schema/context" 
    xmlns:jaxws="http://cxf.apache.org/jaxws" 
    xmlns:jaxrs="http://cxf.apache.org/jaxrs" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans      
    http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
    http://www.springframework.org/schema/context 
    http://www.springframework.org/schema/context/spring-context-3.0.xsd 
    http://cxf.apache.org/jaxws  
    http://cxf.apache.org/schemas/jaxws.xsd 
    http://cxf.apache.org/jaxrs 
    http://cxf.apache.org/schemas/jaxrs.xsd ">  
     
    <!-- CXF必须引入配置依赖 --> 
    <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"/> 
     
    <context:property-placeholder /> 
    <context:annotation-config /> 
    <!-- 设置需要进行Spring注解扫描的类包 -->   
    <context:component-scan base-package="com" /> 
     
     
    <!-- 配置代理 : address: 配置为服务端的地址 id:与客户端注入的保持一致 --> 
    <jaxws:client id="helloWorld" serviceClass="com.ws.HelloWorld"  
             address="http://localhost:8080/Java_WS_Server/soap/helloWorld" > 
              
    </jaxws:client> 
     
    </beans> 

4、代码调用
[java] view plain copy 在CODE上查看代码片派生到我的代码片
/**
* 访问 server
*/ 
private void visitSpringServer() { 
 
    ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContext-client.xml");//获取配置文件 
    HelloWorld service = ctx.getBean("helloWorld", HelloWorld.class);//获取bean 
     
    System.out.println(service.sayHi("邵小宝"));//调用服务端 
     





原博客地址:http://blog.csdn.net/u012228718/article/details/41381595
分享到:
评论

相关推荐

    Java+WebService利用(cxf)开发笔记.rar

    在"Java+WebService利用(cxf)开发笔记"中,你将找到这些概念的实际应用和案例,帮助你深入理解如何使用CXF创建和调用Web服务。这份笔记是学习和实践的宝贵资料,不仅可以帮助初学者快速上手,也能为有经验的开发者...

    cxf学习笔记之结合spring创建客户端

    总的来说,结合Spring创建CXF客户端是一种高效且灵活的方法,它允许我们利用Spring的便利性来管理复杂的Web服务调用。通过这种方式,可以更加专注于业务逻辑,减少与基础设施相关的繁琐工作。对于开发者而言,熟悉...

    Eclipse+CXF开发Web服务、Tomcat部署

    在了解如何使用Eclipse和CXF开发和部署Web服务之前,我们需要先明确一些关键的基础概念。 首先,CXF是一个开源的服务框架,它支持创建Web服务,特别是基于SOAP和REST的Web服务。它提供了丰富的工具来快速开发和部署...

    cxf3.0 spirng 集成笔记

    Apache CXF是一个开源的SOA(Service-Oriented Architecture)框架,它允许开发人员创建和消费各种Web服务。在Spring框架中集成CXF可以方便地管理和调用Web服务。 首先,我们来看看集成CXF到Spring的尝试和挑战: ...

    cxf学习笔记

    本篇CXF学习笔记详细介绍了使用CXF框架结合Spring框架发布Web服务的基本流程和技术要点。从简单的Hello World示例入手,逐步深入到复杂的数据类型处理、大数据传输以及安全性保障等方面。通过这些实践案例的学习,...

    CXF笔记

    此外,笔记中可能还会讨论一些实用技巧,比如如何使用CXF的工具和API进行服务调试,或者如何结合其他工具如Spring进行集成。总之,“CXF笔记”将是一份宝贵的参考资料,对于想深入了解和使用Apache CXF的开发者来说...

    webservice+cxf基础笔记和视频,

    当CXF与Spring结合时,我们可以利用Spring的强大功能来管理和配置Web服务,同时还能享受到Spring的IoC(控制反转)和AOP(面向切面编程)带来的好处。 在基础的Web服务笔记中,你可能会学到如何定义服务接口,如何...

    Apache_cxf_学习笔记.docx

    ### Apache CXF 学习笔记知识点汇总 #### 一、CXF简介 ##### 1.1 CXF概述 - **背景介绍**:Apache CXF 是一个高性能、功能丰富的开源框架,用于构建和消费 Web 服务。它融合了 Celtix 和 XFire 两个开源项目的...

    Apache_cxf_学习笔记

    Apache CXF 是一个开源的Java框架,主要用于构建和开发服务导向架构(Service-Oriented Architecture, SOA)和Web服务。本学习笔记旨在提供对Apache CXF的基本理解、功能特性和实际操作指导。 **1. CXF 简介** 1.1...

    Apache cxf 学习笔记.pdf

    Apache CXF 是一个开源的Java框架,它主要用于构建和开发服务导向架构(Service-Oriented Architecture, SOA)的应用程序。CXF这个名字来源于两个曾经流行的Java Web服务项目的合并:Celtix和XFire,CXF意在强调其对...

    CXF webservice初学笔记

    - `spring.jar`:Spring框架,提供依赖注入和事务管理,常与CXF结合使用以管理服务实例。 - `struts2-core-2.1.6.jar`:Struts2是一个基于MVC设计模式的Web应用框架,可与CXF集成以实现Web界面。 - `woodstox-...

    Fuse ESB 4.3.1使用笔记

    ### Fuse ESB 4.3.1 使用笔记 #### 一、概述 Fuse ESB (Enterprise Service Bus) 4.3.1 是一个强大的企业级服务总线平台,基于Apache Karaf容器构建,用于集成不同的应用程序和服务。它支持多种集成模式和技术栈,...

    WebService 开发大全

    本文将探讨如何利用Apache CXF框架在Java环境下开发和使用WebService。 首先,Apache CXF是一个开源的Web服务框架,它支持多种协议和服务模型,包括SOAP、RESTful等。在项目中集成CXF,可以简化WebService的开发...

    springSide3框架的笔记参照.pdf

    能够快速启动新项目,并且支持多种技术栈,包括持久化层的Hibernate和Spring Jdbc,Web MVC的Struts2,视图层的JSP和JQuery,以及企业服务如Web Service(JAX-WS通过CXF实现)、JMX和安全(通过Spring Security 2)...

    ServiceMix学习笔记

    这篇笔记旨在深入理解ServiceMix的核心概念、工作原理以及如何利用它进行企业级应用集成。 JBI标准由Java Community Process(JCP)发布,其目标是提供一个统一的框架,使得不同的集成解决方案可以互操作,减少企业...

    JavaEE学习笔记

    JavaEE学习笔记是Java开发领域中的重要资源,它包含了丰富的技术知识和实践经验,旨在帮助初学者和有经验的开发者深入理解Java企业级应用的开发。JavaEE(Java Platform, Enterprise Edition)是Oracle公司主导的...

Global site tag (gtag.js) - Google Analytics