设为首页 收藏本站
查看: 892|回复: 0

[经验分享] 使用Apache cxf 和Spring在Tomcat下发布Webservice指南

[复制链接]

尚未签到

发表于 2015-8-1 14:23:07 | 显示全部楼层 |阅读模式
  转载 http://blog.iyunv.com/zhangzhaokun/article/details/4750021
  最近学习了如何使用apache cxf和Spring发布webservice,虽然网上的资料很多,但是没有一个文档可以让读者按照操作步骤来实现完整的发布流程,都需要多篇文件杂合在一起,互相参考才可以完成第一个HelloWorld形式的Webservice。现在将我利用apache cxf和Spring发布webservice的详细的发布过程记录下来,以供后来者参考。
  环境信息如下:
  JDK1.5.15
  Tomcat5.5.26
  Spring2.5.5
  apache-cxf-2.2.4
  具体实现步骤如下:
  (1)使用IDE建立WEB工程cxfservice
  工程目录结构如下:
DSC0000.gif
  其中的WEB-INF/lib目录下的jar包为直接将apache-cxf-2.2.4.zip下载包中的apache-cxf-2.2.4/lib目录下的全部的jar,在学习过程中这种办法是最简单的了。
  当然我们也可以用最少的Jar包来完成本实例的任务,首先要将cxf的依赖包加入,包括如下一些jar包:
  



[c-sharp] view plaincopy

  • commons-logging-1.1.1.jar
  • geronimo-activation_1.1_spec-1.0.2.jar (or Sun's Activation jar)
  • geronimo-annotation_1.0_spec-1.1.1.jar (JSR 250)
  • geronimo-javamail_1.4_spec-1.6.jar (or Sun's JavaMail jar)
  • geronimo-servlet_2.5_spec-1.2.jar (or Sun's Servlet jar)
  • geronimo-ws-metadata_2.0_spec-1.1.2.jar (JSR 181)
  • geronimo-jaxws_2.1_spec-1.0.jar (or Sun's jaxws-api-2.1.jar)
  • geronimo-stax-api_1.0_spec-1.0.1.jar (or other stax-api jar)
  • jaxb-api-2.1.jar
  • jaxb-impl-2.1.12.jar
  • jetty-6.1.21.jar
  • jetty-util-6.1.21.jar
  • neethi-2.0.4.jar
  • saaj-api-1.3.jar
  • saaj-impl-1.3.2.jar
  • wsdl4j-1.6.2.jar
  • wstx-asl-3.2.8.jar
  • XmlSchema-1.4.5.jar
  • xml-resolver-1.2.jar
    
  再就是Spring的包了,包括如下一些
  



[c-sharp] view plaincopy

  • aopalliance-1.0.jar
  • spring-core-2.5.5.jar
  • spring-beans-2.5.5.jar
  • spring-context-2.5.5.jar
  • spring-web-2.5.5.jar
  
  最后就是apache cxf本身的包了
  



[c-sharp] view plaincopy

  • cxf-2.2.3.jar
  
  
  (2)配置文件说明
  applicationContext.xml文件的内容如下:
  



[c-sharp] view plaincopy



  •    
  •    
  •    
  •    

  
  services.xml文件的内容如下:
  



[c-sharp] view plaincopy



  •    

  
  web.xml文件的内容如下:
  



[c-sharp] view plaincopy



  •     cxfservice
  •    
  •         contextConfigLocation
  •         WEB-INF/classes/applicationContext.xml
  •    
  •    
  •         
  •             org.springframework.web.context.ContextLoaderListener
  •         
  •    
  •    
  •         CXFServlet
  •         
  •             org.apache.cxf.transport.servlet.CXFServlet
  •         
  •    
  •    
  •         CXFServlet
  •         /services/*
  •    

  •    
  •         index.html
  •         index.htm
  •         index.jsp
  •         default.html
  •         default.htm
  •         default.jsp
  •    

  
  (3)发布的HelloWord服务说明
  要发布的HelloWorld服务的接口定义文件com.cxf.test.interfaces.HelloWorld:
  



[java] view plaincopy

  • package com.cxf.test.interfaces;

  • import javax.jws.WebParam;
  • import javax.jws.WebResult;
  • import javax.jws.WebService;

  • @WebService
  • public interface HelloWorld
  • {
  •     /*
  •      * 一个简单的方法,返回一个字符串
  •      *
  •      * @param hello
  •      *
  •      * @return
  •      */
  •     String say(String hello);

  •     /**
  •      * 稍微复杂一些的方法,传递一个对象给服务端处理
  •      *
  •      * @param user
  •      * @return
  •      */
  •     String sayUserName(@WebParam(name = "user") UserDTO user);

  •     /**
  •      * 最复杂的方法,返回一个List封装的对象集合
  •      *
  •      * @return
  •      */
  •     public @WebResult(partName = "o") ListObject findUsers();
  • }
  
  要发布的HelloWorld服务的接口实现类com.cxf.test.interfaces.HelloWorldImpl:
  



[java] view plaincopy

  • package com.cxf.test.interfaces;

  • import java.util.ArrayList;

  • import javax.jws.WebService;

  • /**
  • * @author zhangzk
  • *
  • */
  • /**
  • * WebService实现类.
  • *
  • * 使用@WebService指向Interface定义类即可.
  • */
  • @WebService(endpointInterface = "com.cxf.test.interfaces.HelloWorld")
  • public class HelloWorldImpl implements HelloWorld
  • {
  •     public String sayUserName(UserDTO user)
  •     {
  •         return "hello " + user.getName();
  •     }

  •     public String say(String hello)
  •     {
  •         return "hello " + hello;
  •     }

  •     public ListObject findUsers()
  •     {
  •         ArrayList list = new ArrayList();

  •         list.add(instancUser(1, "lib"));
  •         list.add(instancUser(2, "mld"));
  •         list.add(instancUser(3, "lq"));
  •         list.add(instancUser(4, "gj"));
  •         ListObject o = new ListObject();
  •         o.setList(list);
  •         return o;
  •     }

  •     private UserDTO instancUser(Integer id, String name)
  •     {
  •         UserDTO user = new UserDTO();
  •         user.setId(id);
  •         user.setName(name);
  •         return user;
  •     }
  • }
  
  findUsers()接口返回的参数对象定义文件com.cxf.test.interfaces.ListObject:
  



[c-sharp] view plaincopy

  • package com.cxf.test.interfaces;

  • import java.util.ArrayList;
  • import java.util.List;

  • import javax.xml.bind.annotation.XmlAccessType;
  • import javax.xml.bind.annotation.XmlAccessorType;
  • import javax.xml.bind.annotation.XmlElement;
  • import javax.xml.bind.annotation.XmlType;

  • @XmlAccessorType(XmlAccessType.FIELD)
  • @XmlType(name = "listObject", propOrder ={ "list" })
  • public class ListObject
  • {
  •     @XmlElement(nillable = true)
  •     protected List list;

  •     /**
  •      * Gets the value of the list property.
  •      *
  •      *
  •      * This accessor method returns a reference to the live list, not a snapshot. Therefore any modification you make to the returned list will be
  •      * present inside the JAXB object. This is why there is not a set method for the list property.
  •      *
  •      *
  •      * For example, to add a new item, do as follows:
  •      *
  •      *
  •      * getList().add(newItem);
  •      *
  •      *
  •      *
  •      *
  •      * Objects of the following type(s) are allowed in the list {@link Object }
  •      *
  •      *
  •      */
  •     public List getList()
  •     {
  •         if (list == null)
  •         {
  •             list = new ArrayList();
  •         }
  •         return this.list;
  •     }

  •     public void setList(ArrayList list)
  •     {
  •         this.list = list;
  •     }

  • }
  
  UserDTO instancUser(Integer id, String name)接口返回的对象定义文件com.cxf.test.interfaces.UserDTO:
  



[c-sharp] view plaincopy

  • package com.cxf.test.interfaces;

  • import javax.xml.bind.annotation.XmlAccessType;
  • import javax.xml.bind.annotation.XmlAccessorType;
  • import javax.xml.bind.annotation.XmlType;

  • /**
  • * Web Service传输User信息的DTO.
  • *
  • * 分离entity类与web service接口间的耦合,隔绝entity类的修改对接口的影响. 使用JAXB 2.0的annotation标注JAVA-XML映射,尽量使用默认约定.
  • *
  • */
  • @XmlAccessorType(XmlAccessType.FIELD)
  • @XmlType(name = "User")
  • public class UserDTO
  • {

  •     protected Integer id;

  •     protected String name;

  •     public Integer getId()
  •     {
  •         return id;
  •     }

  •     public void setId(Integer value)
  •     {
  •         id = value;
  •     }

  •     public String getName()
  •     {
  •         return name;
  •     }

  •     public void setName(String value)
  •     {
  •         name = value;
  •     }
  • }
  
  (4)将WEB工程发布到Tomcat下作为一个WEB应用,webContext为cxfservice,Port为9000
  启动Tomcat后,以如下方式访问http://localhost:9000/cxfservice/services/HelloWorld?wsdl即可看到我们发布的Webservices服务HelloWorld了。在浏览器中将看到的WSDL文件另存为HelloWorld.xml即为发布的Webservice的WSDL文件。后续的调用过程与其它的操作方式完全相同。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-93080-1-1.html 上篇帖子: apache服务器安装以及使用passenger插件部署rails应用,基于ubuntu 12.04 LTS 下篇帖子: squid(双向转发+缓存)+apache(双向转发)+web服务器配置详细
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表