`

五、通过CXF框架发布和调用WebService的web服务

 
阅读更多

1、用jdk自带的webservice不能发布web的服务,也就是不能通过tomcat等服务器发布服务,利用一个webservice框架,也就是CXF可以实现,cxf框架是apache的开源框架,下载页面如下:



 

2、下载好后,对cxf进行解压,解压后的目录如下:



 

有时,为了利用cxf框架带的命令(如wsdl2java),还要对cxf进行配置,我在学习的过程中并没有用到,所以并没有配置。cxf框架是依赖Spring框架的,所以cxf的一个缺点就是jar包太多!!

 

3、创建cxf服务端

1)创建工程如下:



 这个工程中,一共包含了三种发布webservice服务的形式,主要体现在cxf-servlet.xml文件中,

2)要通过cxf发布webservice服务,首先要配置web.xml文件:

 

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns="http://xmlns.jcp.org/xml/ns/javaee"
	xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
	id="WebApp_ID" version="3.1">
	<display-name>CXF-service</display-name>
	<!-- 通过上下文参数指定spring配置文件的位置 -->
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>classpath:cxf-servlet.xml</param-value>
	</context-param>
	<listener>
		<listener-class>
			org.springframework.web.context.ContextLoaderListener
		</listener-class>
	</listener>
	
	<!-- 配置CXF的核心Servlet -->
	<servlet>
		<servlet-name>cxf</servlet-name>
		<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
		<!-- 通过初始化参数指定cxf配置文件的位置 -->
		<!-- 
		<init-param>
			<param-name>config-location</param-name>
			<param-value>classpath:cxf-servlet.xml</param-value>
		</init-param>
		 -->
	</servlet>
	<servlet-mapping>
		<servlet-name>cxf</servlet-name>
		<url-pattern>/cxf/*</url-pattern>
	</servlet-mapping>
  <welcome-file-list>
    <welcome-file>index.jsp</welcome-file>
  </welcome-file-list>
</web-app>

 

 

3)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-3.0.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" /> -->
	
	<!-- 第一种发布方式:简单发布(没有接口的发布) -->
	<!-- id:唯一标示  implementor:提供服务的类 address:服务的请求url-->
	<jaxws:endpoint id="helloService" implementor="com.wang.cxf.service.HelloService" address="/hello">
		<!-- 加入请求的消息拦截器 -->
		<jaxws:inInterceptors>
			<bean class="org.apache.cxf.interceptor.LoggingInInterceptor"></bean>
		</jaxws:inInterceptors>
		<!-- 加入响应的消息拦截器 -->
		<jaxws:outInterceptors>
			<bean class="org.apache.cxf.interceptor.LoggingOutInterceptor"></bean>
		</jaxws:outInterceptors>
	</jaxws:endpoint>
	
	<!-- 第二种发布方式:带有接口的发布 -->
	<!-- id:唯一标示 serviceClass:接口类型 address:服务的请求url-->
	<jaxws:server id="hiService" serviceClass="com.wang.cxf.i.service.IHiService" address="/hi">
		<jaxws:serviceBean>
			<!-- 服务的实现类 -->
			<bean class="com.wang.cxf.i.service.HiServiceImpl"></bean>
		</jaxws:serviceBean>
		<!-- 加入请求的消息拦截器 -->
		<jaxws:inInterceptors>
			<bean class="org.apache.cxf.interceptor.LoggingInInterceptor"></bean>
		</jaxws:inInterceptors>
		<!-- 加入响应的消息拦截器 -->
		<jaxws:outInterceptors>
			<bean class="org.apache.cxf.interceptor.LoggingOutInterceptor"></bean>
		</jaxws:outInterceptors>
	</jaxws:server>
	
	<!-- 传输实体对象 -->
	<jaxws:server id="personService" serviceClass="com.wang.cxf.domain.service.IPersonService" address="/person">
		<jaxws:serviceBean>
			<!-- 服务的实现类 -->
			<bean class="com.wang.cxf.domain.service.PersonServiceImpl"></bean>
		</jaxws:serviceBean>
		<!-- 加入请求的消息拦截器 -->
		<jaxws:inInterceptors>
			<bean class="org.apache.cxf.interceptor.LoggingInInterceptor"></bean>
		</jaxws:inInterceptors>
		<!-- 加入响应的消息拦截器 -->
		<jaxws:outInterceptors>
			<bean class="org.apache.cxf.interceptor.LoggingOutInterceptor"></bean>
		</jaxws:outInterceptors>
	</jaxws:server>

</beans>

4) 这里面一共三种形式,不一一举例了,最后会附上源代码,感兴趣的读者可以自行下载,就用传输实体对象为例(也是最常用的),首先创建一个person的pojo,代码如下:

package com.wang.cxf.domain.service;

public class Person {
	private int id;
	private String name;
	
	public int getId() {
		return id;
	}
	public void setId(int id) {
		this.id = id;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
}

 创建服务的接口,代码如下:

package com.wang.cxf.domain.service;

import javax.jws.WebService;

@WebService
public interface IPersonService {
	public Person getPersonById(int id);
}

 注意,一定要在发布的接口上写@WebService注解,表明是发布的服务,否则发布不了的,最后是实现类:

package com.wang.cxf.domain.service;

public class PersonServiceImpl implements IPersonService {

	@Override
	public Person getPersonById(int id) {
		System.out.println("person id = " + id);
		Person person = new Person();
		person.setId(id);
		person.setName("tom");
		
		return person;
	}

}

 这里要注意的是cxf-servlet.xml中的配置



 

这两个一定不要写反了。。。

5)下面将工程发布到tomcat上面,测试是否发布成功:

在浏览器上出现下图证明发布成功



 

4、cxf服务的调用

1)为了调用cxf发布的服务,我们新建文本工程:



2)通过JQuery的ajax实现调用cxf服务,jquery_ws.html文件中的代码如下:

 

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <title>jquery_ws.html</title>
	<script type="text/javascript" src="js/jquery-1.6.2.js"></script>
	<script type="text/javascript">
		function sendMsg(){
			$.ajax({
					url:'http://localhost:8080/CXF-service/cxf/hi',
					type:'post',
					dataType:'xml',
					contentType:'text/xml;charset=utf-8',
					data:'<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:q0="http://service.i.cxf.wang.com/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><soapenv:Body><q0:sayHi><arg0>wangwang</arg0></q0:sayHi></soapenv:Body></soapenv:Envelope>',
					success:function(data,status,xhr){
						var v = $(data).find('return').eq(0).text();
						alert(v);
					},
					error:function(){
						alert('error!');
					}
					});

		}		
		
	</script>
  </head>
  
  <body>
    <input type="button" value="使用jquery的ajax方法调用Webservice服务" onclick="sendMsg();">
  </body>
</html>

 通过在tomcat上发布该工程,测试效果。

  注意,必须将这个html文件发布到tomcat(或其他服务器上),否则不能访问cxf发布的服务程序。

 

2)另一个值得一说的就是,调用有实体对象服务的方式,其实与其他没有实体对象的一样,通过wsimport指令,能够直接将实体对象和其他见过的类、接口一起导出到客户端,这样客户端就能够直接用了。

 

 

最后,工程中还有很多细节,都在代码中注释了。在这就不再累赘了,,附上源代码,,,只是源码,工程中并没有jar包,jar包实在太多了,将工程下载后,把cxf框架的lib包中的jar包放到项目中就可以了。。。

 下载地址:http://pan.baidu.com/s/1ntCGyOL

 

  • 大小: 21 KB
  • 大小: 39 KB
  • 大小: 18.9 KB
  • 大小: 16 KB
  • 大小: 48.4 KB
  • 大小: 14.4 KB
分享到:
评论

相关推荐

    ssh整合cxf(webservice)

    ssh框架整合cxf(webservice),ssh案例(增、删、改、查),发布webservice,客户端调用,该工程自带jar包,mysql连接池,自动建库、建表。 ①直接解压,导入ssh2cxf项目 ②用tomcat启动ssh2cxf项目 ③在浏览器输入...

    CXF框架应用在Web项目中

    Ⅰ)调用CXF提供的wsdl2java工具,根据WSDL文档生成相应的Java代码(任何语言实现web service都要暴露WSDL文档); Ⅱ)找到wsdl2java所生成的类中一个继承了Service的类(该类的实例可当工厂使用); Ⅲ)调用...

    Spring 实现远程访问详解——webservice

    Spring Web Services 是基于 Spring 框架的 Web 服务框架,主要侧重于基于文档驱动的Web服务,提供 SOAP 服务开发,允许通过多种方式创建 Web 服务。本章利用Apache CXF构建和开发webservice. 1. webservice远程...

    apache cxf

    而CXF就是两个项目之间为了提供服务,而开发的一个开源框架,使用CXF框架可以快速搭建web service。CXF就是将项目中暴露出来的接口(服务)包装起来,成为wsdl,使用方通过wsdl来调用这些服务。

    CXF Web Service(前台:C#,后台:java)完整例子

    本程序通过CXF-Spring框架来发布一个Webservice(相当于后台,在这里访问数据库),然后由表示层C#来调用其方法。本例子所实现的是从数据库获得的数据通过webservice,显示在C#前台的DataGrid里面。CXF的jar包请本人...

    Web_Service开发指南电子版 PDF

    WebSevice 让一个程序可以透明地调用互联网程序,不用管具体的实现细节。只要WebService公开了服务接口,远程客户端就可以调用服务。...在Java领域 WebService常见的框架 Axis、XFire、CXF......。其中成熟实现的是AXIS。

    Java EE常用框架.xmind

    三、除了调用别人发布的webService,也可以自己发布WebService服务 四、CXF框架可以与spring无缝连接,就不用我们自己Endpoint了。它还能记录日志之类的 五、我们还可以使用Idea下的webservice,能够使用...

    php的webservice的wsdl的XML无法显示问题的解决方法

    JAVA如何调用wsdl过程详解java WSDL接口webService实现方式PHP调用wsdl文件类型的接口代码分享解析利用wsdl.exe生成webservice代理类的详解在PHP中利用wsdl创建标准webservice的实现代码Java调用CXF WebService接口...

    WebService(springboot整合案例 wsdl)

    这是模拟企业用户的开发,在远程调用的时候客户端必须传入密码,这里通过cxf框架 的自定义拦截器实现jax-ws,jax-rs下次在学习下。 创建springboot项目: 导入起步依赖以及junit pom文件如下: org.spring...

    ssm框架库存管理系统导入可用带sql

    先是加入webservice配置文件,然后在pom.xml中引入两个关于cxf的jar包,在web.xml配置文件中引入关于cxf两组标签2.然后在cmd窗口反向生成实体类和包结构等等一系列的操作)。以上就是我在项目中作出的一些小功能。我...

    基于SSHI架构的开发平台技术方案

    采用标准的J2EE规范,支持全部流行的商业应用服务器和其它Web容器比如:WebSphere、WebLogic、Tomcat、Jboss、等 注释配置采用JSR-250 规范定义的注释标记 支持流行的关系型数据库:Oracle、Db2、MySQL 等 提供CXF ...

    ASP EXCEL导入SQL

    它们的新的项目分别是ApacheCXF和Axis2.Java语言也制定关于REST网络服务规范:JAX-RS:JavaAPIforRESTfulWebServices(JSR311)。相信还会出现更多与REST相关的激动人心的信息。  REST与AJAX技术  尽管AJAX技术的...

Global site tag (gtag.js) - Google Analytics