cxf整合spring实现webservice

前面一篇文章中,webservice的服务端与客户端都是单独启动,但是在现实项目中,服务端单独启动太没有实际意义了,还是要整合框架启动,所以今天将记录如何整合spring框架。

jar包下载地址如下:

http://yun.baidu.com/share/link?shareid=547689626&uk=2836507213

(一)、web.xml中添加spring与cxf的配置

<?xml version="1.0" encoding="UTF-8"?>  
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"  
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee   
    http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">  
   
   <!-- spring配置 -->
    <context-param>  
        <param-name>contextConfigLocation</param-name>  
        <param-value>classpath:applicationContext.xml</param-value>  
    </context-param>  
  
    <listener>  
        <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>  
    </listener>
    <!-- cxf配置 -->
    <servlet>  
        <servlet-name>CXFServlet</servlet-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>  
  
    <welcome-file-list>  
        <welcome-file>index.jsp</welcome-file>  
    </welcome-file-list>  
</web-app>

(二)、新建接口文件,实现类

接口,需要添加注解webservice

@WebService
public interface IHello {
	public String sayHi(String name);
    
	public String printName(String name);
}

实现接口类,指定endpointInterface与serviceName

@WebService(endpointInterface="com.xj.service.IHello",serviceName="hello1Service")
public class HelloImpl implements IHello{

	@Override
	public String sayHi(String name) {
		System.out.println("hi,"+name);
		return "hi,"+name;
	}

	@Override
	public String printName(String name) {
		System.out.println("my name is,"+name);
		return "my name is,"+name;
	}
}

(三)、配置applicationContext.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:p="http://www.springframework.org/schema/p"  
    xmlns:jaxws="http://cxf.apache.org/jaxws"  
    xmlns:cxf="http://cxf.apache.org/core"  
    xsi:schemaLocation="http://www.springframework.org/schema/beans   
    http://www.springframework.org/schema/beans/spring-beans-2.5.xsd   
    http://cxf.apache.org/jaxws   
    http://cxf.apache.org/schemas/jaxws.xsd">
    
    <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 id="hello" class="com.xj.service.HelloImpl"/>  
     
     <jaxws:endpoint id="testHello" implementor="#hello" address="/testHello" >
     </jaxws:endpoint> 
    
</beans>

需要在文件中引入这三个文件,加入相关约束

<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标签,这与直接启动server时,endpoint的publish作用相同,发布这个服务,implementor指定了实现类,这里用的是引用的方式,可以直接如下

     <!-- <bean id="hello" class="com.xj.service.HelloImpl"/>  --> 
     <jaxws:endpoint id="testHello" implementor="com.xj.service.HelloImpl" address="/testHello" >
     </jaxws:endpoint>

(四)、项目部署并访问

将项目部署到tomcat中,启动无报错

访问   http://localhost/cxf/testHello?wsdl 可得到我们发布服务的wsdl,其中cxf为项目名称,testHello为我们endpoint中配置的路径

到此为止,服务端就发布完成了。

一般项目中大部分都是单独提供server端接口(即发布服务的wsdl地址),或者根据wsdl地址生成client端。

附加

(五)、启动client端

<?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:p="http://www.springframework.org/schema/p"  
    xmlns:jaxws="http://cxf.apache.org/jaxws"  
    xmlns:cxf="http://cxf.apache.org/core"  
    xsi:schemaLocation="http://www.springframework.org/schema/beans   
    http://www.springframework.org/schema/beans/spring-beans-2.5.xsd   
    http://cxf.apache.org/jaxws   
    http://cxf.apache.org/schemas/jaxws.xsd">
    
   <jaxws:client id="hello" serviceClass="com.xj.service.IHello" address="http://localhost/cxf/testHello?wsdl">
   </jaxws:client>
</beans>

解释:

jaxws:client 标志为服务的client端,其中address指定了需要访问的wsdl地址,id指定了一个唯一的bean标志。

public static void main(String[] args) {
	   ApplicationContext ctx = new ClassPathXmlApplicationContext("applicationContextClient.xml");
	   IHello hello = (IHello) ctx.getBean("hello");
	   System.out.println(hello.sayHi("xiejun"));
	  
	}

如上述,就可以调用服务的相关方法,但是这种调用方法需要项目中含有server端的基础类,如IHello等,显然不太现实。下一篇文章中讲继续记录 如何调用天气预报的接口,现在在那我们是没法知道server端的基础类的。

时间: 2024-11-08 21:22:50

cxf整合spring实现webservice的相关文章

CXF整合Spring开发WebService

刚开始学webservice时就听说了cxf,一直没有尝试过,这两天试了一下,还不错,总结如下: 要使用cxf当然是要先去apache下载cxf,下载完成之后,先要配置环境变量,有以下三步: 1.打开环境变量配置窗口,点击新建,新建%CXF_HOME%变量,值为你下载的cxf所在的目录,我的是D:\tools\apache-cxf-3.1.0 2.在Path变量中新加一句%CXF_HOME%\lib,注意要和已有的path变量用;隔开 3.在CLASSPATH中新加一句%CXF_HOME%\li

WebService—CXF整合Spring实现接口发布和调用过程2

一.CXF整合Spring实现接口发布 发布过程如下: 1.引入jar包(基于maven管理) <!-- cxf --> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-frontend-jaxws</artifactId> <version>2.7.18</version> </dependency> <de

WebService—CXF整合Spring实现接口发布和调用过程

一.CXF整合Spring实现接口发布 发布过程如下: 1.引入jar包(基于maven管理) <!-- cxf --> <dependency> <groupId>org.apache.cxf</groupId> <artifactId>cxf-rt-frontend-jaxws</artifactId> <version>2.7.18</version> </dependency> <de

【Java EE 学习第81天】【CXF框架】【CXF整合Spring】

一.CXF简介 CXF是Apache公司下的项目,CXF=Celtix+Xfire:它支持soap1.1.soap1.2,而且能够和spring进行快速无缝整合. 另外jax-ws是Sun公司发布的一套开发WebService服务的标准.早期的标准如jax-rpc已经很少使用,而cxf就是在新标准jax-ws下开发出来的WebService,jax-ws也内置到了jdk1.6当中. CXF官方下载地址:http://cxf.apache.org/download.html 下载完成之后,解压开压

Apache CXF 整合Spring

一.创建一个 Java Web 工程,目录最终的结构如下图,下面我们将遂一说明: 二.把我们要用到的jar包全部放到lib目录下. 三.修改web.xml文件,整合CXF. <?xml version="1.0" encoding="UTF-8"?> <web-app id="WebApp_ID" version="2.4" xmlns="http://java.sun.com/xml/ns/j2e

CXF集成Spring实现webservice的发布与请求

CXF集成Spring实现webservice的发布(服务端) 目录结构: 主要代码: package com.cxf.spring.pojo; public class User { int id ; String name = null; String address = null; String email = null; public int getId() { return id; } public void setId(int id) { this.id = id; } public

CXF整合spring(客户端)

在客户端,CXF与spring的整合,实际上是SpringMVC中controller或service调用WebService代理的一个过程,我们只需要将通过wsdl2java生成的文件加入到我们的项目中,然后在Controller或service中依赖注入WebService 的代理,即将生成文件中服务接口注入到Controller中.然后在我们的配置文件中配置生成的服务接口,在这里与我们一般配置bean的方式是不一样的: //这也是配置一个bean <jaxws:client id="

Apache cxf 整合 Spring MVC

1.添加依赖pom.xml <?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"    xsi:schemaLocation="http://maven.apache.o

cxf整合spring代码

导入jar包cxf的jar包 创建实体类 package com.yhd.webservice.cxf.server.poto; public class Person { private String name; private int age; public Person() { } public Person(String name, int age) { this.name = name; this.age = age; } public String getName() { retur