- 浏览: 383103 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
fuchenggangs:
手动抛出异常后想要自动回滚@Transactional(rol ...
spring mvc 与JPA/Hibernate的整合示例 -
springdata_spring:
可以参考最新的文档:如何在eclipse jee中检出项目并转 ...
利用eclipse构建和部署maven工程 -
hzw2312:
好像这个事务不起作用呀!
@Transactional(rea ...
spring mvc 与JPA/Hibernate的整合示例 -
huhuhuhh:
类目清晰,感谢分享!
spring mvc 与JPA/Hibernate的整合示例 -
endual:
菜鸟问下,<!-- Spring Data Jpa配置 ...
spring mvc 与JPA/Hibernate的整合示例
设计思路,创建一个人员注册的web服务。接受客户端传递的人员信息并注册到系统中。而这个人员信息是一个复杂对象。
一、服务端
1、创建人员类
2、定义服务接口
3、定义服务接口的实现类
4、发布web服务,这里借助spring
5、测试服务是否发布成功
(1)、部署web工程,并启动web容器
(2)、在地址栏中输入:http://localhost:9090/cxfServer/ws/register?wsdl
如果能得到如下图的效果,说明服务发布成功。
二、客户端
可以另建一个java工程来作为上面发布的web服务的客户端,通过调用该服务将人员信息注册到服务端。在java工程创建并加入cxf依赖包后,开始以下步骤:
1、创建服务接口在客户端的引用
打开dos窗口,找到cxf目前的bin目录(前提是你已经下载cxf项目并解压到本地)
执行命令:
这一命令会在bin目录下生成一个包目录,包含多个java文件。
将这个包目录移到java工程中。我们可以查看生成了哪些文件:
ObjectFactory.java
package-info.java
Person.java
RegisterWebService.java
ToRegister.java
ToRegisterResponse.java
另外还有一个实现类的包,有1个java文件:
HelloWorldImplService.java
我们只关注两个类就可以了:
一个是Person.java,这是web服务接口中的形参,我们要将数据封装到这个对象中,传递给服务端。
另外一个是RegisterWebService.java,它就是web服务类,我们要调用它的接口。
2、调用web服务接口
可以创建一个JUnit测试类,来测试一下:
如果没个步骤都做对了,你会发现复杂对象Person已经被传递到服务端了。
3、注意:
(1)wsdl2java命令在客户端生成的类,除了与用来封装数据的复杂对象和服务接口类,其它都不是必须的,你也不一定非要用wsdl2java命令,如果对wsdl文档理解得很好完全可以自己写出这2个类
(2)客户端例子中没有用spring.如果用spring.则须在spring的配置文件中加上
然后在测试类中先获取叫"client"的引用
一、服务端
1、创建人员类
package cn.ibeans.ws.pojo; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement public class Person { private String name; private String sex; /*public Person(String name, String sex) { super(); this.name = name; this.sex = sex; }*/ public String getName() { return name; } public void setName(String name) { this.name = name; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } @Override public String toString() { return "Person [name=" + name + ", sex=" + sex + "]"; } }
2、定义服务接口
package cn.ibeans.ws; import javax.jws.WebService; import cn.ibeans.ws.pojo.Person; /** * 设计一个人员报名的web服务,人员信息是一个复杂对象。 * 服务端接收该对象后进行必要的处理,并将报名结果回传客户端 * @author llf * */ @WebService public interface RegisterWebService { public String toRegister(Person person); public String toBatchRegister(List<Person> persons); }
3、定义服务接口的实现类
/** * */ package cn.ibeans.ws.impl; import javax.jws.WebMethod; import javax.jws.WebService; import cn.ibeans.ws.RegisterWebService; import cn.ibeans.ws.pojo.Person; /** * @author llf * */ @WebService(endpointInterface="cn.ibeans.ws.RegisterWebService") public class RegisterWebServiceImpl implements RegisterWebService { /* (non-Javadoc) * @see cn.ibeans.ws.PersonWebService#toRegister(cn.ibeans.ws.pojo.Person) */ @Override public String toRegister(Person person) { if(person!=null){ System.out.print("注册信息是:"+person); } return person.getName(); } @Override public String toBatchRegister(List<Person> persons) { if(persons!=null){ for(Person person:persons){ System.out.println(person); } } return "ok"; } }
4、发布web服务,这里借助spring
<?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" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.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" /> <jaxws:endpoint id="register" implementor="cn.ibeans.ws.impl.RegisterWebServiceImpl" address="/ws/register"/> </beans>
5、测试服务是否发布成功
(1)、部署web工程,并启动web容器
(2)、在地址栏中输入:http://localhost:9090/cxfServer/ws/register?wsdl
如果能得到如下图的效果,说明服务发布成功。
二、客户端
可以另建一个java工程来作为上面发布的web服务的客户端,通过调用该服务将人员信息注册到服务端。在java工程创建并加入cxf依赖包后,开始以下步骤:
1、创建服务接口在客户端的引用
打开dos窗口,找到cxf目前的bin目录(前提是你已经下载cxf项目并解压到本地)
执行命令:
wsdl2java http://localhost:9090/cxfServer/ws/register?wsdl
这一命令会在bin目录下生成一个包目录,包含多个java文件。
将这个包目录移到java工程中。我们可以查看生成了哪些文件:
引用
ObjectFactory.java
package-info.java
Person.java
RegisterWebService.java
ToRegister.java
ToRegisterResponse.java
另外还有一个实现类的包,有1个java文件:
引用
HelloWorldImplService.java
一个是Person.java,这是web服务接口中的形参,我们要将数据封装到这个对象中,传递给服务端。
另外一个是RegisterWebService.java,它就是web服务类,我们要调用它的接口。
2、调用web服务接口
可以创建一个JUnit测试类,来测试一下:
/** * */ package cn.ibeans.test.ws.client; import junit.framework.Assert; import org.apache.cxf.jaxws.JaxWsProxyFactoryBean; import org.junit.Before; import org.junit.Test; import cn.ibeans.ws.Person; import cn.ibeans.ws.RegisterWebService; /** * @author llf * */ public class RegisterWSTest { //RegisterWebService registerClient = (RegisterWebService)new RegisterWebServiceImplService(); //registerClient.toRegister(null); private JaxWsProxyFactoryBean factory; private Person person; @Before public void setUp() throws Exception { factory = new JaxWsProxyFactoryBean(); person = new Person(); person.setName("zhangsan"); person.setSex("man"); } @Test public void testRegister(){ factory.setServiceClass(RegisterWebService.class); factory.setAddress("http://localhost:9090/cxfServer/ws/register"); RegisterWebService client = (RegisterWebService)factory.create(); String result = client.toRegister(person); Assert.assertEquals("zhangsan", result); } @Test public void testBatchRegister(){ factory.setServiceClass(RegisterWebService.class); factory.setAddress("http://localhost:9090/cxfServer/ws/register"); RegisterWebService client = (RegisterWebService)factory.create(); //以上语句的功能 可以通过spring来实现 Person p1 = new Person(); p1.setName("zhangsan"); p1.setSex("man"); Person p2 = new Person(); p2.setName("lishi"); p2.setSex("man"); Person p3 = new Person(); p3.setName("wangwu"); p3.setSex("woman"); persons = new ArrayList<Person>(); persons.add(p1); persons.add(p2); persons.add(p3); String result = client.toBatchRegister(persons); System.out.println("web service调用结果是:"+result); Assert.assertEquals("ok", result); } }
如果没个步骤都做对了,你会发现复杂对象Person已经被传递到服务端了。
3、注意:
(1)wsdl2java命令在客户端生成的类,除了与用来封装数据的复杂对象和服务接口类,其它都不是必须的,你也不一定非要用wsdl2java命令,如果对wsdl文档理解得很好完全可以自己写出这2个类
(2)客户端例子中没有用spring.如果用spring.则须在spring的配置文件中加上
<jaxws:endpoint id="client" serviceClass="cn.ibeans.ws.RegisterWebService" address="http://localhost:9090/cxfServer/ws/register"/>
然后在测试类中先获取叫"client"的引用
发表评论
-
spring mvc 与JPA/Hibernate的整合示例
2013-07-17 16:53 35991一、首先通过maven加入spring、jpa和hiberna ... -
【JPA】基础知识
2012-03-04 20:22 1034JPA是java编程领域的ORM标准。最著名的参考实现是hib ... -
JAXB的基本应用
2012-02-29 00:13 1322JAXB(Java API for XML Binding)是 ... -
log4j的应用与配置
2012-01-31 22:25 1193在java编程领域,log4j已经是事实上的日志输出工具。不但 ... -
springsecurity学习笔之二:实现一个基于数据库的简单权限系统
2012-01-23 14:35 2010这里在一个web工程中,通过三张表,实现用户、角色、权限的关系 ... -
springsecurity学习笔记之一:安全架构的理解
2012-01-20 09:45 1486计划将springsecurity的引入新的项目中。开始学习。 ... -
activeMO学习笔记二:发布和订阅
2012-01-16 14:57 1452其实学习activeMQ的初衷就是要找一个能够实现异步消息的发 ... -
activeMO学习笔记一:开始自己的第一个mq
2012-01-14 14:01 1542因为项目的需要,在构思系统的架构设计上,想到了ActiveMQ ... -
cxf学习笔记之传递附件
2012-01-12 09:34 4637cxf是jws的实现,上传二进制文件主要借助MTOM来实现,只 ... -
ie的进度条总也走不完
2011-01-11 21:06 1142多年前就发现跑着的系统中,时常看见ie的进度条总也走不完。但事 ... -
什么是工作流?
2010-12-29 18:53 938项目要用到工作流,给自己补一课。 就是“业务过程的部分或整体 ... -
特定环境下的应用服务器的时差问题
2010-04-02 10:59 1198最近遇到希望的问题。在window2008+weblogic1 ... -
给tomcat的Dos窗口命名
2010-01-07 14:04 3124做javaee开发,离不了web容器,tomcat可以说是最常 ... -
cxf学习笔记之结合spring创建客户端
2009-12-28 18:46 1541这个比较迷惑人。。。至少对我这个初学者来说是如此。后面解释原因 ... -
cxf学习笔记之结合spring创建服务端
2009-12-28 18:43 2144刚起步时实际上服务端是最简单的。 一、加入cxf支持 简单的说 ... -
cxf学些过程中的一些问题
2009-12-27 18:24 37721、 2009-12-27 18:19:02 org.apac ... -
数据源的两种配置
2009-10-09 10:27 1162开发的应用系统通常可以对数据源进行多种配置。 1、开发过程中往 ... -
常量类与属性文件在开发中的使用技巧
2009-08-13 16:48 1026开发中经常会将一些常用的或常修改的数据记录到常量类或属性文件中 ... -
过滤器在web开发中的应用
2009-04-07 15:53 1033在现在的web开发中,使用Filter来完成一些支撑性的工作是 ... -
mvn and ssh融合问题及解决办法
2009-03-27 09:32 3528通过maven融合ssh(struts2+spring2.5+ ...
相关推荐
CXF学习笔记.docx ) CXF学习笔记.docx ) CXF学习笔记.docx ) CXF学习笔记.docx ) CXF学习笔记.docx ) CXF学习笔记.docx ) CXF学习笔记.docx )
Apache cxf 学习笔记.pdfApache cxf 学习笔记.pdf
这里的Interceptor就和Filter、Struts的Interceptor很类似,提供它的主要作用就是为了很好的降低代码的耦合性,提供...参照网址:http://www.cnblogs.com/hoojo/archive/2011/03/30/1999587.html,cxf入门很不错的哦!
Apache cxf 学习笔记,供大家参考
Axis2版本学习笔记,CXF版学习笔记,WebServices学习笔记
CXF例子 创建服务端、客户端、相关xml的配置和环境jar说明
NULL 博文链接:https://ll-feng.iteye.com/blog/558518
cxf学习笔记.详细的描述了我学习cxf的过程.服务端采用 cxf+spring的方式;客户端采用spring+struts的方法。内容如下 1:最简单的hello world 2:集合类的传输 3:大数据的传输(上传下载) 4:安全性 4.1:用户令牌...
做开发时,查了大量资料,发现一比较全面的资料,分享一下!...对象传递 WebService CXF学习——高级篇(一)(二) 1.整合Spring框架 2.CXF+Spring+Hibernate 3.WS-Security WebService CXF学习——JAXB剖析
NULL 博文链接:https://michael-wang.iteye.com/blog/1565142
spring,cxf,restful发布webservice传递复杂对象,例如List,Map,List<Map>
cxf3.0 spirng 集成笔记, CXF 部署说明 CXF 教程
Apache_cxf_学习笔记,学习cxf技术,以及有关webservice接口的使用
CXF 包含了大量的功能特性,但是主要集中在以下几个方面: 支持 Web Services 标准:CXF 支持多种 Web Services 标准,包含 SOAP、Basic Profile、WS-Addressing、WS-Policy、WS-ReliableMessaging 和 WS-Security。...
CXF处理复杂类型,关于接口的处理,这里是从网上搜索整理的资料,看看吧
CXF 是Celtix + Xfire的结合体,Apache CXF 的前身叫 Apache CeltiXfire,现在已经正式更名为 Apache CXF 了。CXF 继承了 Celtix 和 XFire 两大开源项目的精华,提供了对 JAX-WS 全面的支持,并且提供了多种 Binding...
cxf学习资料,基本教程,啊啊啊啊啊啊啊啊啊啊!
一、CXF WebService准备工作 二、CXF 入门示例 三、CXF对Interceptor拦截器的支持 四、CXF WebService中传递复杂类型对象 五、CXF整合Spring