`
caiying0504
  • 浏览: 342987 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

WebService CXF学习(高级篇1):整合Spring框架

阅读更多
通过前面两节的讲解,相信你对CXF框架开始有一些认识了。在当今项目开发中,Spring框架基上都用到过,那么它怎么与CXF结合呢,这就是我们这一间要讲的内容。好了,闲话少说。
    首先,在前面基础上再导入几个spring要用到的几个.jar包:
    spring-core.jar
    spring-jdbc.jar
    spring-context.jar
    spring-orm.jar
    spring-beans.jar
    spring-tx.jar
    包导入完之后,我们还不能开如干活,配置几荐参数,便于下一步工作。
    配置CXF框架
    我的电脑->属性->高级->环境变量
    创建一个CXF_HOEM变量,值为CXF框架所在根目录,修改一下
    CLASSPATH=%CXF_HOME%/lib;PATH=%CXF_HOME%/bin;这时有会问为什么要配置这两个参数据呢,其实配置这两个参数用途与配置JAVA变量一下,在DOS窗口下直接运行java2ws,wsdl2java等可执行文件。当然你没有配置也可以进到CXF框架的bin目录下远行这个几个可执行文件。
   配置好了后,你在DOS窗口下输入java2ws,看看配置是否效。肯定没有成功,原因是使用6.0的JDK,我们还得在%JAVA_HOME%/jre/lib目录下创建一下endorsed文件夹,将jaxb-api.jar,jaxws.jar拷贝进去。现在再运一下java2ws,成功运行,配置生效了。
    基本工作做得差不多,整合spring框架正式开始:
    第一步:新一个web project,导入要用到.jar包,其实CXF利用org.apache.cxf.transport.servlet.CXFServlet来拦截所有web请求,将其配置到web.xml中。配置如下:
Java代码 
<web-app>   
    <context-param>   
        <param-name>contextConfigLocation</param-name>   
        <param-value>   
            /WEB-INF/classes/applicationContext-*.xml,/WEB-INF/classes/webservice.xml   
        </param-value>   
    </context-param>   
  
    <listener>   
        <listener-class>   
            org.springframework.web.context.ContextLoaderListener   
        </listener-class>   
    </listener>   
  
    [color=red]<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>   
  
    <servlet-mapping>   
        <servlet-name>CXFServlet</servlet-name>   
        <url-pattern>/*</url-pattern>   
    </servlet-mapping>[/color]   
</web-app>  

<web-app>
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>
			/WEB-INF/classes/applicationContext-*.xml,/WEB-INF/classes/webservice.xml
		</param-value>
	</context-param>

	<listener>
		<listener-class>
			org.springframework.web.context.ContextLoaderListener
		</listener-class>
	</listener>

	[color=red]<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>

	<servlet-mapping>
		<servlet-name>CXFServlet</servlet-name>
		<url-pattern>/*</url-pattern>
	</servlet-mapping>[/color]
</web-app>

      注意一下绿色字体
      CXF框架配置好了,我就来开发一个WebService接口
Java代码 
  
  @WebService  
     public interface IService {   
  
//public void save(@WebParam(name="info")String xml);   
public void save(@WebParam(name="dto")UserInfoDTO dto,@WebParam(name="flag")boolean flag);   
public void update(@WebParam(name="info")String xml);   
public void delete(@WebParam(name="id")int id);   
public @WebResult(name="String")String get(@WebParam(name="id")int id);   
    }  

      @WebService
      public interface IService {

	//public void save(@WebParam(name="info")String xml);
	public void save(@WebParam(name="dto")UserInfoDTO dto,@WebParam(name="flag")boolean flag);
	public void update(@WebParam(name="info")String xml);
	public void delete(@WebParam(name="id")int id);
	public @WebResult(name="String")String get(@WebParam(name="id")int id);
     }

    这里面有四个方法,其中有一个涉及到对象,这一点前面一节讲到怎么处理它。放在这里是再回顾前节内容。
    创建一个WebService接口实现类
    Java代码 
   @WebService  
   public class ServiceImpl implements IService {   
private Logger log = LoggerFactory.getLogger(ServiceImpl.class);   
  
public void delete(int id) {   
    log.info("delete id is {} user"+id);   
}   
  
public void save(UserInfoDTO dto,boolean flag) {   
    System.out.println("name:"+dto.getName());   
}   
  
public void update(String xml) {   
}   
  
public String get(int id){   
    return null;   
}   
  }   
     

    @WebService
    public class ServiceImpl implements IService {
	private Logger log = LoggerFactory.getLogger(ServiceImpl.class);

	public void delete(int id) {
		log.info("delete id is {} user"+id);
	}

	public void save(UserInfoDTO dto,boolean flag) {
		System.out.println("name:"+dto.getName());
	}

	public void update(String xml) {
	}
	
	public String get(int id){
		return null;
	}
   }
   
   由于本节只讲解与Spring整合,没有涉及到数据库,因就打印一下传递过来的对象内容来证明整合成功。与spring,hibernate整合后面章节会讲到,请留意后面章节。
   传递对象,当然创建对象啦
Java代码 
 @XmlType(name="ServerUserInfo")   
  @XmlAccessorType(XmlAccessType.FIELD)   
  public class UserInfoDTO implements java.io.Serializable {   
  
private static final long serialVersionUID = -4666026219400887433L;   
private Integer id;   
private String name;   
private Integer age;   
private Integer address;   
  
public Integer getId() {   
    return id;   
}   
  
public void setId(Integer id) {   
    this.id = id;   
}   
  
public String getName() {   
    return name;   
}   
  
public void setName(String name) {   
    this.name = name;   
}   
  
public Integer getAge() {   
    return age;   
}   
  
public void setAge(Integer age) {   
    this.age = age;   
}   
  
public Integer getAddress() {   
    return address;   
}   
  
public void setAddress(Integer address) {   
    this.address = address;   
}   
  
public UserInfoDTO() {   
}   
  
   }  

   @XmlType(name="ServerUserInfo")
   @XmlAccessorType(XmlAccessType.FIELD)
   public class UserInfoDTO implements java.io.Serializable {

	private static final long serialVersionUID = -4666026219400887433L;
	private Integer id;
	private String name;
	private Integer age;
	private Integer address;

	public Integer getId() {
		return id;
	}

	public void setId(Integer id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Integer getAge() {
		return age;
	}

	public void setAge(Integer age) {
		this.age = age;
	}

	public Integer getAddress() {
		return address;
	}

	public void setAddress(Integer address) {
		this.address = address;
	}

	public UserInfoDTO() {
	}

    }

  做了这么多工作,有人又会问,怎么现在做的与spring框架就没一点联系,呵呵,确实是这样。开戏开场了,利用Spring来发布WebService接口:
Java代码 
<?xml version="1.0" encoding="UTF-8"?>   
<beans xmlns="http://www.springframework.org/schema/beans"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    [color=red]xmlns:jaxws="http://cxf.apache.org/jaxws"[/color]   
    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">   
    [color=red]   
        <!--导入与CXF框架有关的xml-->   
        <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" />[/color]   
  
        <!--布布WebService接口-->   
    <jaxws:endpoint id="service"  
        implementor="com.itdcl.service.ServiceImpl" address="/Service">   
           
    </jaxws:endpoint>   
</beans>  

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	[color=red]xmlns:jaxws="http://cxf.apache.org/jaxws"[/color]
	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">
	[color=red]
        <!--导入与CXF框架有关的xml-->
        <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" />[/color]

        <!--布布WebService接口-->
	<jaxws:endpoint id="service"
		implementor="com.itdcl.service.ServiceImpl" address="/Service">
		
	</jaxws:endpoint>
</beans>

     服务端开发工作基本结束。现在打包部署到Tomcat6.0.18(本人目前使用的测试服务器,你当然可以使用别的服务器)
    服务器启动完成后,打开浏览器在地址栏中输入http://localhost:port/project name/Service?wsdl看看接口是否发成功。
    接下来就是开发一个客户端了。
    另建一个web project,现在前面的参数配置要起作用了,cmd进入DOS环境下输入wsdl2java -p com.itdcl.service(自定义包名) http://localhost:port/project name/Service?wsdl(前提是服务器没停止)
    敲击Enter,wsdl2java工具帮你将发布出来的wsdl文件转换成webservice接口,到指定目录下将com.itdcl.service拷到刚才另建的web project的src目录下。
    现在,我们就来创建一个客户端程序:
Java代码 
   public class SampleClient {   
  
ublic static void main(String[] args) {   
ApplicationContext context = new ClassPathXmlApplicationContext(   
        "beans.xml");   
     
 IService service = (IService)context.getBean("service");   
 ServerUserInfo userInfo = new ServerUserInfo();   
 userInfo.setAddress(1);   
 userInfo.setAge(100);   
 userInfo.setName("Jason");   
  
 service.save(userInfo,true);   
 service.delete(1);   
  
  
 }  

      public class SampleClient {

	public static void main(String[] args) {
		ApplicationContext context = new ClassPathXmlApplicationContext(
				"beans.xml");
    
		 IService service = (IService)context.getBean("service");
		 ServerUserInfo userInfo = new ServerUserInfo();
		 userInfo.setAddress(1);
		 userInfo.setAge(100);
		 userInfo.setName("Jason");

		 service.save(userInfo,true);
		 service.delete(1);
	}

   }

    看得仔细的朋友就会问了,ServerUserInfo 这个类那来的,你进到com.itdcl.service目录下就会看到,是WebService发布出来的。
    到目前为止,客户端还没有完成,你没有看到程序中ApplicationContext context = new ClassPathXmlApplicationContext("beans.xml");这个bean.xml就是spring框架来注删除WebService接口的。好啦,创建一个bean.xml,内容如下:
Java代码 
  <?xml version="1.0" encoding="UTF-8"?>   
  <beans xmlns="http://www.springframework.org/schema/beans"  
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
[color=red]xmlns:jaxws="http://cxf.apache.org/jaxws[/color]"  
xsi:schemaLocation="   
    http://www.springframework.org/schema/beans    
    http://www.springframework.org/schema/beans/spring-beans-2.0.xsd   
    [color=red]http://cxf.apache.org/jaxws    
    http://cxf.apache.org/schemas/jaxws.xsd[/color]">   
<jaxws:client id="service"  
    address="http://localhost:9999/cxf/Service"  
    serviceClass="com.itdcl.service.IService" />   
  </beans>  

   <?xml version="1.0" encoding="UTF-8"?>
   <beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	[color=red]xmlns:jaxws="http://cxf.apache.org/jaxws[/color]"
	xsi:schemaLocation="
		http://www.springframework.org/schema/beans 
		http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
		[color=red]http://cxf.apache.org/jaxws 
		http://cxf.apache.org/schemas/jaxws.xsd[/color]">
	<jaxws:client id="service"
		address="http://localhost:9999/cxf/Service"
		serviceClass="com.itdcl.service.IService" />
   </beans>

    留意一下绿色字体
    剩下的事就是运行客户端程序了,没有异常抛出,打印出:name:Josen,则恭喜你CXF框架与Spring整合成功。
分享到:
评论

相关推荐

    WebService的CXF整合Spring

    本文将深入探讨如何将Apache CXF与Spring框架整合,以构建高效、灵活的Web服务解决方案。 Apache CXF是一个开源的Java框架,主要用于构建和开发SOAP(简单对象访问协议)和RESTful(Representational State ...

    WebService CXF学习文档

    做开发时,查了大量资料,发现一比较全面的资料,分享一下! WebService CXF学习——入门篇 1.CXF由来 ...整合Spring框架 2.CXF+Spring+Hibernate 3.WS-Security WebService CXF学习——JAXB剖析

    webservice cxf 整合spring例子源代码

    【标题】:Webservice CXF 整合Spring的实例源码解析 在Web服务开发中,Apache CXF是一个广泛使用的开源框架,它提供了创建、部署和管理Web服务的强大功能。CXF不仅支持SOAP,还支持RESTful API,使得开发者能够...

    springBoot完整整合WebService框架CXF示例

    SpringBoot与CXF整合是构建基于Web服务的应用程序的一个常见实践。CXF是一个开源的Java框架,用于构建和开发服务导向架构(SOA)应用程序,它支持SOAP和RESTful服务。SpringBoot则简化了Spring应用的初始化和配置,...

    cxf整合spring

    本文将深入探讨如何将CXF与Spring框架整合,以构建高效且灵活的Web服务解决方案。 首先,让我们了解CXF。CXF(CXF = CXF = "CXF 是一个框架")是一个开源的Java框架,它允许开发人员创建和消费各种Web服务,包括...

    基于spring+cxf实现用户文件传输的webservice

    基于spring+cxf实现用户文件传输的webservice 在本文中,我们将探讨如何使用Spring+CXF实现用户文件传输的Webservice。该Webservice提供了基本的报文上传和查询功能,同时还提供了用户身份验证功能。 Spring 和 ...

    webservice(cxf)与spring整合源码+文档

    标题"webservice(cxf)与spring整合源码+文档"表明这是一个关于如何将CXF Web服务与Spring框架集成的学习资源。文档和源代码一起提供,使得学习者能够通过实践来理解这一过程。 描述中提到"webservice与spring整合...

    Spring整合CXF步骤,Spring实现webService,spring整合WebService

    在IT行业中,Spring框架是Java企业级应用开发的首选,而CXF则是一个流行的Web服务框架,用于构建和消费Web服务。将Spring与CXF整合,可以充分利用Spring的依赖注入和管理能力,使得Web服务的开发、部署和测试更加...

    webservice cxf spring整合返回list,bean,string,json,xml项目完整实例

    【标题】:在Java EE环境中,使用Apache CXF与Spring框架整合实现Web服务,返回List、Bean、String、JSON及XML的完整项目实例 【描述】:本项目旨在展示如何在Java企业级应用(Java EE)中,通过Apache CXF框架创建...

    CXF整合Spring步骤

    在企业级应用开发中,Apache CXF 和 Spring 框架的整合是非常常见的,因为它们分别提供了强大的服务端和客户端的 Web 服务支持以及灵活的依赖注入和配置管理。本教程将详细介绍如何将 CXF 与 Spring 整合,帮助...

    CXF框架发布webservice

    接下来,"7-CXF与Spring整合发布webservice.avi"视频可能会讲解如何结合Spring框架进行服务发布。Spring与CXF的整合主要涉及以下方面: 1. **Spring容器管理**:通过Spring容器来管理你的服务bean,这样可以利用...

    webservice-cxf-spring-jar.zip

    【标题】"webservice-cxf-spring-jar.zip" 是一个包含了使用Apache CXF与Spring框架集成开发Web服务的Java库集合。这个压缩包提供了一整套必要的JAR文件,以便于开发者在他们的项目中快速搭建和运行基于CXF的Web服务...

    WebService CXF Spring Hibernate

    通过整合Spring、Hibernate和CXF,可以实现从数据库操作到Web服务接口的完整流程。 通过学习和实践这个集成项目,开发者不仅可以掌握各技术的基本用法,还能理解它们之间的协作机制,为后续的企业级项目开发打下...

    CXF WebService整合Spring

    **CXF WebService 整合Spring** 在Java世界中,CXF是一个强大的开源服务框架,它支持多种Web服务标准,包括SOAP、RESTful等。而Spring框架则以其强大的依赖注入和面向切面编程能力,成为了Java开发中的核心框架。将...

    webservice客户端,整合spring

    本知识点将深入探讨如何在Spring框架中整合CXF,以创建一个有效的Webservice客户端。 1. **什么是Web Service**: Web Service是一种基于XML的开放标准,它允许应用程序通过网络共享业务逻辑,不受平台限制。SOAP...

    WebService CXF+struts+spring 示例

    它支持多种Web服务标准,如SOAP、RESTful API、WS-*等,并且可以与Spring框架紧密集成,使得配置和服务的管理变得更加简单。 2. **Struts**:Struts是基于MVC(Model-View-Controller)设计模式的Java Web应用程序...

    webservice cxf示例工程集成spring

    【标题】"webservice cxf示例工程集成spring"揭示了这个项目的核心是关于Web服务(Web Service)的实现,采用Apache CXF框架,并且整合了Spring框架进行更高效的管理和控制。Apache CXF是一个开源的Java框架,它使得...

    mybatis+spring+cxf Webservice框架

    【标题】"mybatis+spring+cxf Webservice框架"是一个集成性的开发框架,它结合了三个主流的技术组件:MyBatis、Spring和Apache CXF,用于构建高效、灵活且易于维护的Web服务。MyBatis是一个优秀的持久层框架,Spring...

    SpringBoot框架及CXF发布WebService

    CXF支持多种协议,如SOAP、RESTful、WS-*等,并且与Spring框架有很好的集成。 1. **服务器端Web服务发布**:CXF允许开发者通过JAX-WS或JAX-RS接口定义服务,然后自动暴露为SOAP或RESTful服务。SpringBoot结合CXF,...

    CXF+Spring+Hibernate实现WebService

    **Spring框架**:Spring是Java企业级应用的事实标准,它提供了全面的依赖注入(DI)和面向切面编程(AOP)功能。在这个项目中,Spring被用来管理服务端和客户端的bean,包括数据库操作的SessionFactory和DAO对象。...

Global site tag (gtag.js) - Google Analytics