开发环境:jdk1.6 + Tomcat7 + MyEclipse10 
源码下载地址张贴在文章最后面:
首先是使用WSDL协议实现:这里使用XFire 
XFire一个免费、开源的SOAP框架,它构建了POJO和SOA之间的桥梁,主要特性就是支持将POJO通过非常简单的方式发布成Web服务,其原理是以接口反射机制自动取得远程方法的 
WSDL是一个用来描述Web服务和说明如何与Web服务通信的XML语言

准备:开发之前请先下载xfire-distribution-1.2.6.zip并解压缩

(1)、新建一个Web项目(服务端),名称为XFireWebService,其目的是为了测试WebService服务端 
为工程添加XFire支持的类库,把xfire-1.2.6里lib所有jar和xfire-all-1.2.6.jar拷贝到工程lib里

(2)、把XFire加载到系统中来,增加web.xml的配置信息

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="2.5" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
  3. http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  4. <servlet>
  5. <servlet-name>XFireServlet</servlet-name>
  6. <servlet-class>org.codehaus.xfire.transport.http.XFireConfigurableServlet</servlet-class>
  7. <load-on-startup>0</load-on-startup>
  8. </servlet>
  9. <servlet-mapping>
  10. <servlet-name>XFireServlet</servlet-name>
  11. <url-pattern>/servlet/XFireServlet/*</url-pattern>
  12. </servlet-mapping>
  13. <servlet-mapping>
  14. <servlet-name>XFireServlet</servlet-name>
  15. <url-pattern>/services/*</url-pattern>
  16. </servlet-mapping>
  17. <welcome-file-list>
  18. <welcome-file>index.jsp</welcome-file>
  19. </welcome-file-list>
  20. </web-app>

(3)、创建Web服务接口,声明该Web服务对外暴露的接口

  1. package com.test.ws;
  2. import java.util.List;
  3. /**
  4. * <p>Title: IHelloService</p>
  5. * <p>Description: 定义接口</p>
  6. */
  7. public interface IHelloService {
  8. public String getTestString(String str);
  9. public ExceedVO getTestObject(EnterVO vo);
  10. public List getTestList(List list);
  11. }

(4)、创建Web服务实现类,为Web服务接口提供实现

  1. package com.test.ws;
  2. import java.util.ArrayList;
  3. import java.util.List;
  4. /**
  5. * <p>Title: HelloServiceImpl</p>
  6. * <p>Description: 接口实现</p>
  7. */
  8. public class HelloServiceImpl implements IHelloService {
  9. @Override
  10. public String getTestString(String str) {
  11. return "Hello" + str;
  12. }
  13. @Override
  14. public ExceedVO getTestObject(EnterVO vo) {
  15. ExceedVO revo = new ExceedVO();
  16. revo.setDescStr("名称:"+vo.getName()+"年龄:"+vo.getAge());
  17. return revo;
  18. }
  19. @Override
  20. public List getTestList(List list) {
  21. List<EnterVO> users = new ArrayList<EnterVO>();
  22. for(int i=0; i<9; i++){
  23. EnterVO user = new EnterVO("姓名"+i, i);
  24. users.add(user);
  25. }
  26. return users;
  27. }
  28. }

(5)、这两个类是具体的业务实现类,对业务方法的具体实现放在里面

  1. package com.test.ws;
  2. import java.io.Serializable;
  3. /**
  4. * <p>Title: EnterVO</p>
  5. * <p>Description: 入参对象</p>
  6. */
  7. public class EnterVO implements Serializable {
  8. private static final long serialVersionUID = 1L;
  9. private String name;
  10. private int age;
  11. public String getName() {
  12. return name;
  13. }
  14. public void setName(String name) {
  15. this.name = name;
  16. }
  17. public int getAge() {
  18. return age;
  19. }
  20. public void setAge(int age) {
  21. this.age = age;
  22. }
  23. public EnterVO(String name, int age) {
  24. this.name = name;
  25. this.age = age;
  26. }
  27. public EnterVO() { }
  28. }
  29. package com.test.ws;
  30. import java.io.Serializable;
  31. /**
  32. * <p>Title: ExceedVO</p>
  33. * <p>Description: 出参对象</p>
  34. */
  35. public class ExceedVO implements Serializable {
  36. private static final long serialVersionUID = 1L;
  37. private String descStr;
  38. public String getDescStr() {
  39. return descStr;
  40. }
  41. public void setDescStr(String descStr) {
  42. this.descStr = descStr;
  43. }
  44. }

(6)、在src目录下新建一个META-INF/xfire/services.xml,该文件是XFire框架的服务发布文件

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <!-- 服务发布文件 -->
  3. <beans xmlns="http://xfire.codehaus.org/config/1.0">
  4. <service> <!-- service标签和它所包含的xml内容为发布成Web服务的POJO提供完整的描述 -->
  5. <name>HelloService</name> <!-- Web服务被发布时所采用的唯一名称 -->
  6. <namespace>http://test/HelloService</namespace> <!-- Web服务发布时所使用的命名空间 -->
  7. <serviceClass>com.test.ws.IHelloService</serviceClass> <!-- Web服务接口类的全名 -->
  8. <implementationClass>com.test.ws.HelloServiceImpl</implementationClass> <!-- Web服务实现类的全名 -->
  9. <!-- 不需要接口时,把业务写在serviceClass标签中 -->
  10. </service>
  11. </beans>

(7)、注意:当用到List等集合类型时,需要定义Mapping关系 
必须与接口同名后缀.aegis.xml,而且要与接口同一位置

  1. <mappings xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  2. xsi:schemaLocation="http://xfire.codehaus.org/schemas/1.0/mapping.xsd">
  3. <!-- XFire可以支持基本类型,但针对集合类型时需要特殊配置 -->
  4. <mapping>
  5. <method name="getTestList"> <!-- 需要配置的方法名 -->
  6. <!-- index="0"代表方法的参数的序号0即第一个参数,componentType属性代表集合参数内包含的类型 -->
  7. <parameter index="0" componentType="java.lang.String" />
  8. <!-- 配置返回类型,componentType属性代表返回的集合中所包含的类 -->
  9. <return-type componentType="com.test.ws.EnterVO" />
  10. </method>
  11. </mapping>
  12. </mappings>

web.xml和service.xml都可以通过IDE自动生成,也可以手写 

(8)、到这步webService服务端就基本完成 
部署项目,启动Tomcat,测试一下wsdl,访问http://localhost:8080/XFireWebService/services/HelloService?wsdl 
如果能正确显示wsdl文件,说明刚才的部署成功了!!!


(9)、再建一个Web项目(客户端),名称为XFireWebClient,其目的是用来调用一个webService服务 
将XFire的库文件拷贝到Web项目的WEB-INF\lib目录下,同时需要将服务器端发布的服务打包发布给客户端,发布给客户端的代码只需要打包接口和参数类即可,实现类不必打包到客户端 
这里发布的jar包名称为IHelloService.jar,里面包含IHelloService、EnterVO、ExceedVO这三个类

(10)、在这个Web项目里面新建一个Servlet作为测试的Servlet,名称为ClientTestServlet.java 
在web.xml里面配置好这个Servlet后,就可以在Servlet里面写webService调用的代码了

  1. package com.test.ws;
  2. import java.io.IOException;
  3. import java.net.MalformedURLException;
  4. import java.util.ArrayList;
  5. import java.util.List;
  6. import javax.servlet.ServletException;
  7. import javax.servlet.http.HttpServlet;
  8. import javax.servlet.http.HttpServletRequest;
  9. import javax.servlet.http.HttpServletResponse;
  10. import org.codehaus.xfire.XFire;
  11. import org.codehaus.xfire.XFireFactory;
  12. import org.codehaus.xfire.client.XFireProxyFactory;
  13. import org.codehaus.xfire.service.Service;
  14. import org.codehaus.xfire.service.binding.ObjectServiceFactory;
  15. /**
  16. * <p>Title: ClientTestServlet</p>
  17. * <p>Description: 测试Servlet</p>
  18. */
  19. public class ClientTestServlet extends HttpServlet {
  20. private static final long serialVersionUID = 1L;
  21. public void doGet(HttpServletRequest request, HttpServletResponse response)
  22. throws ServletException, IOException {
  23. request.setCharacterEncoding("UTF-8");
  24. Service serviceModel = new ObjectServiceFactory().create(IHelloService.class);
  25. XFire xfire = XFireFactory.newInstance().getXFire();
  26. XFireProxyFactory factory = new XFireProxyFactory(xfire);
  27. String serviceUrl = "http://localhost:8080/XFireWebService/services/HelloService";
  28. IHelloService client = null;
  29. try {
  30. client = (IHelloService) factory.create(serviceModel, serviceUrl);
  31. } catch (MalformedURLException e) {
  32. e.printStackTrace();
  33. }
  34. String str = client.getTestString("Beijing");
  35. request.setAttribute("str", str);
  36. EnterVO enterVO = new EnterVO();
  37. enterVO.setName("Yaodi");
  38. enterVO.setAge(26);
  39. ExceedVO vo = client.getTestObject(enterVO);
  40. request.setAttribute("vo", vo);
  41. List<String> al = new ArrayList<String>();
  42. al.add("111");
  43. al.add("222");
  44. al.add("333");
  45. List list = client.getTestList(al);
  46. request.setAttribute("list", list);
  47. request.getRequestDispatcher("/result.jsp").forward(request, response);
  48. }
  49. public void doPost(HttpServletRequest request, HttpServletResponse response)
  50. throws ServletException, IOException {
  51. doGet(request,response);
  52. }
  53. }

客户端的web.xml如下所示:

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <web-app version="2.5"
  3. xmlns="http://java.sun.com/xml/ns/javaee"
  4. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  5. xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
  6. http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
  7. <servlet>
  8. <servlet-name>ClientTestServlet</servlet-name>
  9. <servlet-class>com.test.ws.ClientTestServlet</servlet-class>
  10. </servlet>
  11. <servlet-mapping>
  12. <servlet-name>ClientTestServlet</servlet-name>
  13. <url-pattern>/ClientTest.do</url-pattern>
  14. </servlet-mapping>
  15. <welcome-file-list>
  16. <welcome-file>ClientTest.do</welcome-file>
  17. </welcome-file-list>
  18. </web-app>

(11)、注意:XFireWebService项目里的IHelloService.aegis.xml文件,也要放到XFireWebClient项目中来,位置与ClientTestServlet.java同级

(12)、Servlet返回的结果页面:result.jsp

  1. <%@ page language="java" pageEncoding="UTF-8"%>
  2. <%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
  3. <%@ page isELIgnored="false"%>
  4. <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
  5. <html>
  6. <head>
  7. <title>测试客户端</title>
  8. </head>
  9. <body>
  10. 测试客户端!!!<br>
  11. String:${str} <br>
  12. Object:${vo.descStr} <br>
  13. List:<br>
  14. <c:forEach items="${list}" var="list">
  15. ${list.name} --- ${list.age} <br>
  16. </c:forEach>
  17. </body>
  18. </html>

(13)、同样将这个Web项目发布,同时启动XFireWebService和XFireWebClient这两个应用,然后在地址栏里面输入http://localhost:8080/XFireWebClient/ 
此时会调用客户端的Servlet,然后调用其doGet方法,如果正常的话,可以看到页面输出结果了(*^__^*)

注:参考文章地址http://di201yao.iteye.com/blog/310292

源码下载地址(测试通过,下载时需要修改tomcat服务器的端口,我用的端口是18080):http://download.csdn.net/detail/carboncomputer/8445449

WebService之XFire和SOAP实例(基于JAVA)的更多相关文章

  1. Java调用webservice接口方法(SOAP message、xfire、axis)

    webservice的 发布一般都是使用WSDL(web service descriptive language)文件的样式来发布的,在WSDL文件里面,包含这个webservice暴露在外面可供使 ...

  2. JAX-WS 学习一:基于java的最简单的WebService服务

    JAVA 1.6 之后,自带的JAX-WS API,这使得我们可以很方便的开发一个基于Java的WebService服务. 基于JAVA的WebService 服务 1.创建服务端WebService ...

  3. 转载 基于JAVA每月运势api调用代码实例

    代码描述:基于JAVA每月运势api调用代码实例 接口地址:http://www.juhe.cn/docs/api/id/58 原文链接:http://outofmemory.cn/code-snip ...

  4. soap实例入门(转)

    SOAP的HelloWord实例- - 1.1  前言 2005-3-2公司开会并分给我一个任务:写一个程序从福建移动的BOSS系统取出一些相关数据.我得到的资料仅仅有一个“福建移动BOSS与业务增值 ...

  5. 基于java自身技术实现消息方式的系统间通信

    这篇博客基本照搬了分布式java应用基础与实践一书的内容 java自带的远程调用分两种一种是rmi,一种是webservice 我们先看rmi(remote method invoke)# 使用rmi ...

  6. php soap实例讲解

    一,什么是soap,什么是wsdl,为什么要用他们 SOAP是基于XML和HTTP通信协议,xml各种平台,各种语言都支持的一个种语言.http呢它得到了所有的因特网浏览器及服务器的支持. WSDL ...

  7. JVM学习(1)——通过实例总结Java虚拟机的运行机制

    俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及到的知识点总结如下: JVM的历史 JVM的运行流程简介 JVM的组成(基于 Java 7) JVM调优参数:-Xmx和-Xms ...

  8. spring实战六之使用基于java配置的Spring

    之前接触的都是基于XML配置的Spring,Spring3.0开始可以几乎不使用XML而使用纯粹的java代码来配置Spring应用.使用基于java配置的Spring的步骤如下: 1. 创建基于ja ...

  9. 基于JAVA WEB技术旅游服务网站系统设计与实现网上程序代写

    基于JAVA WEB技术旅游服务网站系统设计与实现网上程序代写 专业程序代写服务(QQ:928900200) 随着社会的进步.服务行业的服务水平不断发展与提高,宾馆.酒店.旅游等服务行业的信息量和工作 ...

随机推荐

  1. C++之声明与定义的区别

    直接举例,在C++中,声明与定义的区别如下: extern int a;//若有extern关键字,则只是声明 int b;//若没有extern关键字,则为声明+定义 int a;//若之前已经声明 ...

  2. homebrew osx下面最优秀的包管理工具

    官方网站:https://brew.sh/index_zh-cn 安装 /usr/bin/ruby -e "$(curl -fsSL https://raw.githubuserconten ...

  3. GitHub的Fork 是什么意思

    现在有这样一种情形: 有一个叫做Joe的程序猿写了一个游戏程序,而你可能要去改进它.并且Joe将他的代码放在了GitHub仓库上. 下面是你要做的事情 fork并且更新GitHub仓库的图表演示 Fo ...

  4. Atitit.eclipse git使用

    Atitit.eclipse git使用 1. Git vs svn1 1.1. 直接记录快照,而非差异比较1 1.2. Git的patch则不依附于branch,commit和commit之间的关系 ...

  5. php新版本废弃 preg_replace /e 修饰符

    php新版本废弃 preg_replace /e 修饰符 分类: PHP -- : 3531人阅读 评论() 收藏 举报 php正则 最近服务器php版本升级到了 5.6 发现出了很多警告 [php] ...

  6. h5-文本框

    h5-文本框 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UT ...

  7. 第一个MICO CORBA demo实录

    因为忙于其他事情没有仔细去学习CORBA原理,也就大概根据网上的教程搭了一个使用MICO的demo 记录如下. 这里的话,代码我就不贴了,程序也不详细解释了,因为项目文件夹里有一个PPT详细解释了这个 ...

  8. protobuf java学习

    本文档为java编程人员使用protocol buffer提供了一个基本的介绍,通过一个简单的例程进行介绍.通过本文,你可以了解到如下信息: 1.在一个.proto文件中定义一个信息格式. 2.使用p ...

  9. PHP学习笔记(16)AJAX无刷新技术--深入理解

    Ajax里的onreadystatechange的作用是什么 发送一个请求后,客户端无法确定什么时候会完成这个请求,所以需要用事件机制来捕获请求的状态,XMLHttpRequest对象提供了onrea ...

  10. Hive学习笔记——基本配置及测试

    1.什么是Hive Hive 是建立在 Hadoop上的数据仓库基础构架.它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储.查询和分析存储在Hadoop中的大规模数据的机 ...