- 浏览: 391182 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
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的整合示例
cxf是jws的实现,上传二进制文件主要借助MTOM来实现,只须在发布服务时进行简单的配置即可。
一、服务端
先建web工程
1、创建包括附件的复杂对象
2、创建web服务接口
3、创建web服务接口的实现类
4、在spring中配置web服务
4、发布web服务
启动web应用,并测试
二、客户端
1、创建web服务接口在客户端的副本和用来传递DTO对象
可以通过wsdl2java,如果有条件了可直接从服务端copy过来
3、调用web服务,上传递附件
写一个JUnit类,测试一下:
4、就是测试了,运行测试类,会发现服务调用成功。检查web工程下的upload目录,查看服务是否传递过来了。
三、注意事项
1、服务端和客户端的数据对象中,用来存储附件的属性都要用“@XmlMimeType("application/octet-stream")”进行注解,如下:
2、服务端和客户端的web服务配置都要声明mtom-enabled=true
服务端如果在spring中配置,如下:
客户端,如果用代码配置(也可用spring配置,类似服务端),如下:
一、服务端
先建web工程
1、创建包括附件的复杂对象
package cn.ibeans.ws.pojo; import javax.activation.DataHandler; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlMimeType; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement @XmlAccessorType(XmlAccessType.FIELD) public class Person { private String name; private String sex; @XmlMimeType("application/octet-stream") //注意,必不可少 private DataHandler photo; /*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; } public DataHandler getPhoto() { return photo; } public void setPhoto(DataHandler photo) { this.photo = photo; } @Override public String toString() { return "Person [name=" + name + ", sex=" + sex + "]"; } }
2、创建web服务接口
package cn.ibeans.ws; import java.util.List; 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、创建web服务接口的实现类
package cn.ibeans.ws.impl; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.List; import javax.activation.DataHandler; import javax.jws.WebService; import org.springframework.web.context.ContextLoader; import org.springframework.web.context.WebApplicationContext; import cn.ibeans.ws.RegisterWebService; import cn.ibeans.ws.pojo.Person; /** * @author llf * */ @WebService(endpointInterface="cn.ibeans.ws.RegisterWebService") public class RegisterWebServiceImpl implements RegisterWebService { @Override public String toRegister(Person person) { if(person!=null){ System.out.print("注册信息是:"+person); //处理附件 DataHandler data = person.getPhoto(); try { //定义客户端上传的附件在服务器的存储路径和名称 String path = this.getClass().getResource("/").getPath(); //类路径(classes)在服务器上约绝对地址 System.out.println(":"+path); WebApplicationContext ctx = ContextLoader.getCurrentWebApplicationContext();//获得web应用的上下文对象 String root = ctx.getServletContext().getRealPath("/"); //获得web应用在服务器的根路径的绝对地址 root+="upload"; File f = new File(root,person.getName()+".png"); //进行流操作,将附件写到服务器硬盘 InputStream is = data.getInputStream(); OutputStream os = new FileOutputStream(f); byte[] bytes = new byte[1024]; int len = 0; while((len=is.read(bytes))>0){ os.write(bytes, 0, len); } is.close(); os.close(); } catch (IOException e) { e.printStackTrace(); } } return person.getName(); } @Override public String toBatchRegister(List<Person> persons) { if(persons!=null){ for(Person person:persons){ System.out.println(person); } } return "ok"; } }
4、在spring中配置web服务
<?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"> <jaxws:properties> <entry key="mtom-enabled" value="true"/> <!--注意:传递附件的必须配置--> </jaxws:properties> </jaxws:endpoint> </beans>
4、发布web服务
启动web应用,并测试
二、客户端
1、创建web服务接口在客户端的副本和用来传递DTO对象
可以通过wsdl2java,如果有条件了可直接从服务端copy过来
package cn.ibeans.ws; import javax.activation.DataHandler; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlMimeType; import javax.xml.bind.annotation.XmlType; /** * <p>Java class for person complex type. * * */ @XmlAccessorType(XmlAccessType.FIELD) //@XmlType(name = "person", propOrder = {"name", "sex"}) public class Person { protected String name; protected String sex; @XmlMimeType("application/octet-stream") //注意,传递附件的必要配置 private DataHandler photo; public String getName() { return name; } public void setName(String value) { this.name = value; } public String getSex() { return sex; } public void setSex(String value) { this.sex = value; } public DataHandler getPhoto() { return photo; } public void setPhoto(DataHandler photo) { this.photo = photo; } }
package cn.ibeans.ws; import java.util.List; import javax.jws.WebParam; import javax.jws.WebService; /** * This class was generated by Apache CXF 2.3.0 * Tue Jan 10 12:58:50 CST 2012 * Generated source version: 2.3.0 * */ @WebService(targetNamespace = "http://ws.ibeans.cn/", name = "RegisterWebService") //@XmlSeeAlso({ObjectFactory.class}) public interface RegisterWebService { public java.lang.String toRegister(@WebParam(name = "arg0", targetNamespace = "") cn.ibeans.ws.Person arg0); public String toBatchRegister(List<Person> persons); }
3、调用web服务,上传递附件
写一个JUnit类,测试一下:
/** * */ package cn.ibeans.test.ws.client; import java.io.File; import java.util.HashMap; import java.util.List; import java.util.Map; import javax.activation.DataHandler; import javax.activation.DataSource; import javax.activation.FileDataSource; 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 { private JaxWsProxyFactoryBean factory; private Person person; private List<Person> persons; @Before public void setUp() throws Exception { factory = new JaxWsProxyFactoryBean(); } @Test public void testRegister(){ factory.setServiceClass(RegisterWebService.class); factory.setAddress("http://localhost:9090/cxfServer/ws/register"); //以下三行设置客激活mtom功能,必不可少, Map<String,Object> map = new HashMap<String,Object>(); map.put("mtom-enabled", true); factory.setProperties(map); RegisterWebService client = (RegisterWebService)factory.create(); //若没有上面三行,此处创建不成功 //以上语句的功能 可以通过spring来实现 person = new Person(); person.setName("zhangsan"); person.setSex("man"); DataSource ds = new FileDataSource(new File("D://wsdl.png"));//注意! person.setPhoto(new DataHandler(ds)); // String result = client.toRegister(person); System.out.println("web service调用结果是:"+result); Assert.assertEquals("zhangsan", result); } }
4、就是测试了,运行测试类,会发现服务调用成功。检查web工程下的upload目录,查看服务是否传递过来了。
三、注意事项
1、服务端和客户端的数据对象中,用来存储附件的属性都要用“@XmlMimeType("application/octet-stream")”进行注解,如下:
@XmlMimeType("application/octet-stream") private DataHandler photo;
2、服务端和客户端的web服务配置都要声明mtom-enabled=true
服务端如果在spring中配置,如下:
<jaxws:endpoint id="register" implementor="cn.ibeans.ws.impl.RegisterWebServiceImpl" address="/ws/register"> <jaxws:properties> <entry key="mtom-enabled" value="true"/> </jaxws:properties> </jaxws:endpoint>
客户端,如果用代码配置(也可用spring配置,类似服务端),如下:
Map<String,Object> map = new HashMap<String,Object>(); map.put("mtom-enabled", true); factory.setProperties(map);
发表评论
-
spring mvc 与JPA/Hibernate的整合示例
2013-07-17 16:53 36082一、首先通过maven加入spring、jpa和hiberna ... -
【JPA】基础知识
2012-03-04 20:22 1072JPA是java编程领域的ORM标准。最著名的参考实现是hib ... -
JAXB的基本应用
2012-02-29 00:13 1385JAXB(Java API for XML Binding)是 ... -
log4j的应用与配置
2012-01-31 22:25 1310在java编程领域,log4j已经是事实上的日志输出工具。不但 ... -
springsecurity学习笔之二:实现一个基于数据库的简单权限系统
2012-01-23 14:35 2136这里在一个web工程中,通过三张表,实现用户、角色、权限的关系 ... -
springsecurity学习笔记之一:安全架构的理解
2012-01-20 09:45 1613计划将springsecurity的引入新的项目中。开始学习。 ... -
activeMO学习笔记二:发布和订阅
2012-01-16 14:57 1535其实学习activeMQ的初衷就是要找一个能够实现异步消息的发 ... -
activeMO学习笔记一:开始自己的第一个mq
2012-01-14 14:01 1602因为项目的需要,在构思系统的架构设计上,想到了ActiveMQ ... -
cxf学习笔记之传递复杂对象
2012-01-10 14:52 3794设计思路,创建一个人员注册的web服务。接受客户端传递的人员信 ... -
ie的进度条总也走不完
2011-01-11 21:06 1210多年前就发现跑着的系统中,时常看见ie的进度条总也走不完。但事 ... -
什么是工作流?
2010-12-29 18:53 982项目要用到工作流,给自己补一课。 就是“业务过程的部分或整体 ... -
特定环境下的应用服务器的时差问题
2010-04-02 10:59 1305最近遇到希望的问题。在window2008+weblogic1 ... -
给tomcat的Dos窗口命名
2010-01-07 14:04 3207做javaee开发,离不了web容器,tomcat可以说是最常 ... -
cxf学习笔记之结合spring创建客户端
2009-12-28 18:46 1588这个比较迷惑人。。。至少对我这个初学者来说是如此。后面解释原因 ... -
cxf学习笔记之结合spring创建服务端
2009-12-28 18:43 2186刚起步时实际上服务端是最简单的。 一、加入cxf支持 简单的说 ... -
cxf学些过程中的一些问题
2009-12-27 18:24 38111、 2009-12-27 18:19:02 org.apac ... -
数据源的两种配置
2009-10-09 10:27 1199开发的应用系统通常可以对数据源进行多种配置。 1、开发过程中往 ... -
常量类与属性文件在开发中的使用技巧
2009-08-13 16:48 1065开发中经常会将一些常用的或常修改的数据记录到常量类或属性文件中 ... -
过滤器在web开发中的应用
2009-04-07 15:53 1081在现在的web开发中,使用Filter来完成一些支撑性的工作是 ... -
mvn and ssh融合问题及解决办法
2009-03-27 09:32 3623通过maven融合ssh(struts2+spring2.5+ ...
相关推荐
【WebService的实现——CXF学习笔记】 在Java世界中,WebService是一种通过标准协议(如SOAP)进行跨平台、跨语言通信的技术。CXF是Apache软件基金会的一个开源项目,它提供了构建和消费Web服务的工具和库。CXF支持...
CXF(CXF: Composite eXtensible Framework)是一个开源的Java框架,它主要用于构建和服务导向架构(Service-Oriented Architecture, SOA)中的Web服务。CXF允许开发者通过多种方式来创建和消费Web服务,无论是基于...
在IT行业中,CXF是一个广泛使用的开源框架,用于构建和服务导向架构(SOA)的应用程序。本篇将探讨如何结合Spring框架创建一个CXF客户端,从而实现服务的调用。首先,我们需要理解CXF和Spring的基本概念。 **CXF** ...
本学习笔记旨在提供对Apache CXF的基本理解、功能特性和实际操作指导。 **1. CXF 简介** 1.1 CXF概述 Apache CXF是一个全面的服务开发框架,它允许开发者创建和部署各种类型的Web服务,包括基于SOAP、RESTful、WS-...
Apache CXF 是一个开源的Java框架,它主要用于构建和开发服务导向架构(Service-Oriented Architecture, SOA)的应用程序。...通过深入学习和实践,开发者可以充分利用CXF的优势,提高软件开发的效率和质量。
当我们谈论“Axis2,CXF版本学习笔记”时,这通常涉及到两个主要的Java Web服务框架:Apache Axis2和Apache CXF。这两个框架都用于构建和部署SOAP(简单对象访问协议)和RESTful(Representational State Transfer)...
### CXF学习笔记知识点 #### 1. 面向服务的架构 (SOA) 和 Web Service - **SOA**:面向服务的架构(Service-Oriented Architecture),它是一种架构模型,强调通过服务来设计、构建和管理软件系统。SOA的核心理念...
**WebService CXF 对象传递详解** 在Web服务领域,CXF是一个非常重要的开源框架,它允许开发者创建和消费各种Web服务。CXF支持SOAP、RESTful等多种通信模式,并且能够处理复杂的对象传递,使得Web服务的数据交换...
WebService CXF学习——入门篇 1.CXF由来 2.HelloWorld 3.WSDL描述 WebService CXF学习——进阶篇 1.SOAP讲解 2.JAX-WS讲解 3.对象传递 WebService CXF学习——高级篇(一)(二) 1.整合Spring框架 2.CXF...
CXF 包含了大量的功能特性,但是主要集中在以下几个方面: 支持 Web Services 标准:CXF 支持多种 Web Services 标准,包含 SOAP、Basic Profile、WS-Addressing、WS-Policy、WS-ReliableMessaging 和 WS-Security。...
### Apache CXF 学习笔记知识点汇总 #### 一、CXF简介 ##### 1.1 CXF概述 - **背景介绍**:Apache CXF 是一个高性能、功能丰富的开源框架,用于构建和消费 Web 服务。它融合了 Celtix 和 XFire 两个开源项目的...
总的来说,这份“webservice+cxf基础笔记和视频”资源将引导你进入Web服务的世界,通过学习和实践,你可以掌握使用CXF和Spring进行Web服务开发的基本技能。无论你是初学者还是有一定经验的开发者,这都将是一份有...
在本文中,我们将探讨如何将Apache CXF 3.0.2版本集成到Spring框架中,以及在这个过程中可能遇到的问题和解决方案。Apache CXF是一个开源的SOA(Service-Oriented Architecture)框架,它允许开发人员创建和消费各种...
Apache CXF是一个强大的开源Web服务框架,源自Celtix和XFire两个项目的合并,现在作为Apache软件基金会的顶级项目存在。...无论是新手还是经验丰富的开发者,都可以通过CXF的学习和实践,提升Web服务开发的效率和质量。
### CXF应用整理学习资料详解 #### 一、CXF简介与HelloWorld示例 Apache CXF是一个开源的框架,用于构建和消费基于SOAP、XML、REST等协议的Web服务。CXF支持JAX-WS和JAX-RS标准,为Java开发人员提供了丰富的API,...
本学习文档将深入探讨CXF的核心特性、使用场景以及如何进行实际操作。 **1. CXF 简介** 1.1 CXF概述 Apache CXF,原名为XFire,是一个用于构建和服务消费的开源框架。它允许开发者以Java编程模型来创建和调用Web...
总结,这个例子是一个很好的学习资源,它覆盖了CXF框架下Web服务端和客户端的创建、参数传递、测试等核心知识点。对于初学者而言,通过实践这个demo,可以深入理解Web服务的工作原理,以及CXF框架的使用方式。在实际...
这个压缩包包含了一个实际的CXF示例项目以及作者的学习笔记,可以帮助我们深入理解CXF的工作原理和使用方法。 在【描述】中提到,这个例子是一个CXF的demo,它展示了如何通过CXF创建和运行Web服务。CXF支持多种协议...