- 浏览: 1098413 次
- 性别:
- 来自: 成都
文章分类
最新评论
-
skyesx:
这是2PC实现,更常用的是一个柔性事务的实现,可以参考http ...
Spring分布式事务实现 -
ddbird:
这第一句就不严谨“分布式事务是指操作多个数据库之间的事务”,显 ...
Spring分布式事务实现 -
呵呵6666:
基于互联网支付系统的微服务架构分布式事务解决方案http:// ...
Spring分布式事务实现 -
小黄牛:
写得不错,交流群:472213887
Spring分布式事务实现 -
jiaoqf321456:
这明明是用的apache的压缩,给ant.jar有半毛钱关系吗 ...
使用ant.jar进行文件zip压缩
一、接口与实现
二、相关POJO
三、类型转换适配器
四、发布WebService
五、配置spring客户端
六、测试代码
@WebService @SOAPBinding(style=Style.RPC) public interface IHelloWorld { public String sayHelloWorld(String name); public List<String> getStringList(List<String> strList); public List<User> getUserList(List<User> userList); @XmlJavaTypeAdapter(XMLMapAdapter.class) public Map<String,Object> getMapData(@XmlJavaTypeAdapter(XMLMapAdapter.class) Map<String,Object> data); }
@Repository @WebService(endpointInterface = "net.log_cd.ws.IHelloWorld") public class HelloWorldImpl implements IHelloWorld { @Override public String sayHelloWorld(String name) { return "hi " + name + ", Hello World!"; } @Override public List<String> getStringList(List<String> strList) { return strList; } @Override public List<User> getUserList(List<User> userList) { return userList; } @Override public Map<String, Object> getMapData(Map<String,Object> data) { return data; } }
二、相关POJO
@XmlRootElement(name = "user") @XmlAccessorType(XmlAccessType.FIELD) public class User implements Serializable{ private static final long serialVersionUID = 1L; private String id; private String name; private String password; private Address address; @XmlJavaTypeAdapter(XMLTimestampAdapter.class) private Timestamp registerDate; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } public Address getAddress() { return address; } public void setAddress(Address address) { this.address = address; } public Timestamp getRegisterDate() { return registerDate; } public void setRegisterDate(Timestamp registerDate) { this.registerDate = registerDate; } @Override public String toString(){ return "ID:"+this.getId()+"-Name:"+this.getName()+"-Password:"+this.getPassword() +"-Address:"+this.getAddress().toString()+"-RegisterDate:"+this.getRegisterDate(); } }
public class Address implements Serializable { private static final long serialVersionUID = 1L; private String street; private String postcode; public String getStreet() { return street; } public void setStreet(String street) { this.street = street; } public String getPostcode() { return postcode; } public void setPostcode(String postcode) { this.postcode = postcode; } @Override public String toString(){ return this.street+","+this.postcode; } }
@XmlType(name = "MapConvertor") @XmlAccessorType(XmlAccessType.FIELD) public class MapConvertor { private List<MapEntry> entries = new ArrayList<MapEntry>(); public void addEntry(MapEntry entry) { entries.add(entry); } public List<MapEntry> getEntries() { return entries; } public static class MapEntry { private String key; private Object value; public MapEntry() { super(); } public MapEntry(String key, Object value) { super(); this.key = key; this.value = value; } public String getKey() { return key; } public void setKey(String key) { this.key = key; } public Object getValue() { return value; } public void setValue(Object value) { this.value = value; } } }
三、类型转换适配器
/** * adapter: Timestamp to String */ public class XMLTimestampAdapter extends XmlAdapter<String, Timestamp>{ private static final String DEFAULT_FORMAT = "yyyy-MM-dd HH:mm:ss"; @Override public String marshal(Timestamp time) throws Exception { Date date = new Date(time.getTime()); return new SimpleDateFormat(DEFAULT_FORMAT).format(date); } @Override public Timestamp unmarshal(String timeStr) throws Exception { Date date = new SimpleDateFormat(DEFAULT_FORMAT).parse(timeStr); return new Timestamp(date.getTime()); } }
/** * 通过继承XmlAdapter<ValueType,BoundType>类型,将CXF不能处理的类型进行转换 * valuType是能够处理的类型,boundType是不能处理的类型: * 转化的实质是将不能处理的类型,如Map,定义一个类来模拟Map。 */ public class XMLMapAdapter extends XmlAdapter<MapConvertor, Map<String, Object>> { @Override public MapConvertor marshal(Map<String, Object> map) throws Exception { MapConvertor convertor = new MapConvertor(); for (Map.Entry<String, Object> entry : map.entrySet()) { MapConvertor.MapEntry e = new MapConvertor.MapEntry(entry.getKey(), entry.getValue()); convertor.addEntry(e); } return convertor; } @Override public Map<String, Object> unmarshal(MapConvertor map) throws Exception { Map<String, Object> result = new HashMap<String, Object>(); for (MapConvertor.MapEntry e : map.getEntries()) { result.put(e.getKey(), e.getValue()); } return result; } }
四、发布WebService
<?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:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-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-servlet.xml" /> <context:component-scan base-package="net.log_cd.ws"/> <jaxws:server id="helloWorldWebService" serviceClass="net.log_cd.ws.IHelloWorld" address="/helloWorld"> <jaxws:serviceBean> <ref bean="helloWorldImpl"/> </jaxws:serviceBean> </jaxws:server> </beans>
五、配置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:jaxws="http://cxf.apache.org/jaxws" xmlns:context="http://www.springframework.org/schema/context" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd"> <context:component-scan base-package="com.log_cd.ws" /> <!-- org.apache.cxf.bus.spring.SpringBus: under bean name 'cxf' just bound one --> <jaxws:client id="helloClient" serviceClass="net.log_cd.ws.IHelloWorld" address="http://localhost:8080/cxf/ws/helloWorld" /> </beans>
六、测试代码
@ContextConfiguration("classpath:cxf-ws-client.xml") public class CXFWebServiceTest extends AbstractJUnit4SpringContextTests { @Resource private IHelloWorld helloClient; @Ignore public void testInvokeWithJaxWsProxyFactory() { JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); factory.setServiceClass(IHelloWorld.class); factory.setAddress("http://localhost:8080/cxf/ws/helloWorld"); IHelloWorld service = (IHelloWorld) factory.create(); System.out.println(service.sayHelloWorld("JaxWsProxyFactory")); } @Ignore public void testInvokeFromApplicationContext() { System.out.println(helloClient.sayHelloWorld("ApplicationContext")); } @Ignore public void testStringList() { List<String> strList = new ArrayList<String>(); strList.addAll(Arrays.asList("lucy,lily,frank,steve".split(","))); List<String> retStrList = helloClient.getStringList(strList); for (String str : retStrList) { System.out.println(str); } } @Ignore public void testUserList() { List<User> userList = new ArrayList<User>(); for (int i = 1; i <= 10; i++) { User user = new User(); user.setId("" + i); user.setName("user_" + i); user.setPassword("password_" + i); user.setRegisterDate(new Timestamp(System.currentTimeMillis())); Address address = new Address(); address.setStreet("street_" + i); address.setPostcode(String.valueOf(Math.round((Math.random() * 1000000f)))); user.setAddress(address); userList.add(user); } List<User> retList = helloClient.getUserList(userList); for (User user : retList) { System.out.println(user.toString()); } } @Test public void testMapData() { Map<String, Object> data = new HashMap<String, Object>(); data.put("name", "vajra"); data.put("weight", "70KG"); data.put("height", "165cm"); data.put("descript", "fat man"); Map<String, Object> retMap = helloClient.getMapData(data); for (Map.Entry<String, Object> entry : retMap.entrySet()) { System.out.println(entry.getKey() + "=" + entry.getValue()); } } }
发表评论
-
SpringBoot开发WebService之Axis
2019-07-14 23:56 4892一、服务器端发布WebService服务 1、POM.xml文 ... -
SpringBoot开发WebService之CXF
2019-07-14 23:56 1352一、在服务器端的WebSerivce服务发布 1、POM.xm ... -
JDK6开发WebService及用户认证
2015-08-21 13:50 1430一、编写服务端并发布 1、定义接口 public inte ... -
WebService之CXF使用Session
2015-08-20 13:53 2007一、接口与实现 @WebService public i ... -
以多种方式访问WebService
2015-08-20 13:58 6455一、Java访问WebService (1)使用Axis ... -
Exporting beans as web services using XFire
2015-08-20 14:07 1160Once XFire is in your buil ... -
Spring中的远程访问和web服务
2010-05-23 23:17 4533一、介绍 目前,Sp ... -
集成axis开发webservice
2009-09-16 09:09 3055一、基础知识 Web S ... -
spring使用RMI暴露服务
2008-07-11 14:03 3766(1)定义接口: package com.logcd.spri ... -
java RMI
2008-06-25 13:31 5182RMI限java之间,且使用Stream 技术(seri ...
相关推荐
- **反序列化**:同样,服务方法返回的对象也会被CXF转换为XML,然后发送回客户端。 5. **JAXB的使用** - **注解Java类**:使用`@XmlRootElement`注解标记Java类,使其可作为XML根元素,如: ```java @...
这些组件协同工作,处理服务的生命周期、消息传递和协议转换。 3. **创建Web服务**:使用CXF,你可以通过简单的注解在Java类上定义服务接口和实现。例如,使用`@WebService`注解声明一个服务接口,`@WebMethod`注解...
【WebService CXF详解与入门】 WebService是一种允许不同系统之间进行通信和交互的标准协议,它基于HTTP协议,使得应用程序可以无视具体实现细节地调用互联网上的服务。这种技术使得分布式应用程序的发展成为可能,...
**WebService CXF 详解** **一、WebService简介** WebService是一种基于标准的,可以在不同操作系统、编程语言之间交换数据的Web应用程序。它通过WSDL(Web服务描述语言)定义了服务接口,利用SOAP(简单对象访问...
**WebService之CXF开发指南** 在IT行业中,WebService是一种基于开放标准(如WSDL、SOAP和UDDI)的通信协议,它允许不同系统之间进行互操作性交互。CXF,全称Apache CXF,是一个开源的Java框架,用于构建和开发高...
CXF 支持 JAXB(Java Architecture for XML Binding)和 Aegis 来进行对象到 XML 和 XML 到对象的转换,简化了数据交换过程。 6. **传输协议和绑定**: - HTTP/HTTPS:CXF 支持标准的 HTTP 和安全的 HTTPS 协议。...
【标题】"webservice cxf_demo" 涉及到的是使用Apache CXF框架创建的Web服务示例项目。在Web服务的世界里,CXF是一个流行的开源工具,它支持SOAP和RESTful风格的服务,用于构建和消费Web服务。这个"CXF_demo"很可能...
4. 编码解码:CXF支持多种数据绑定技术,如JAXB(Java Architecture for XML Binding)和Aegis,用于XML与Java对象之间的转换。 5. 安全性:通过WSS,CXF提供了一套完整的安全解决方案,包括基本认证、数字签名、...
在这个主题中,我们将深入探讨CXF的Interceptor拦截器、处理复杂类型对象的传递以及如何结合Spring进行集成,最后我们将学习如何使用ANT工具快速构建和部署CXF工程。 1. CXF Interceptor拦截器: 拦截器是CXF框架...
【WebService_CXF学习】系列主要关注的是Java平台上的Web服务实现,特别是JAX-WS规范和CXF框架的应用。JAX-WS(Java API for XML Web Services)是一种用于构建和部署XML Web服务的API,它使得开发者能以简单的方式...
- **数据绑定**:CXF支持JAXB(Java Architecture for XML Binding)进行对象到XML的自动转换。 - **安全**:通过WS-Security,CXF可以实现基于证书的身份验证和消息加密。 - **拦截器**:可以自定义拦截器来处理...
从简单的"HelloWorld"到处理复杂数据类型,再到文件的上传和下载,CXF提供了全面的支持。通过这个"CXF WebService实例",开发者可以深入理解如何利用CXF实现各种Web服务功能,并将其应用于实际项目中。
这篇博客文章“WebService之CXF(二、客户端的生成与调用)”将深入探讨如何使用CXF来创建和调用Web服务客户端。下面我们将详细解析这一主题。 首先,了解CXF的基本概念至关重要。CXF不仅支持SOAP(简单对象访问...
CXF允许开发者以他们熟悉的编程模型(如JavaBeans或JAX-RS)来编写服务,然后自动将其转换为SOAP或RESTful WebService。CXF不仅支持SOAP 1.1/1.2,还支持WS-*(如WS-Security, WS-ReliableMessaging等)标准,以及...
1. **数据绑定**:CXF支持JAXB(Java Architecture for XML Binding)进行数据绑定,可以将XML数据自动转换为Java对象,反之亦然,简化了数据处理。 2. **安全性**:CXF提供多种安全机制,如SSL/TLS加密、WS-...
这些JAR包包含了CXF框架的核心组件、XML处理库、数据序列化工具、缓存机制、消息队列通信以及Spring框架的支持。 1. `cxf-core-3.2.4.jar`: 这是CXF的核心模块,包含了处理SOAP消息、WSDL定义解析、服务实例化等...
本文将详细探讨如何处理Map等CXF无法自动转换的复合数据类型的形参和返回值,这对于提升服务功能和用户体验至关重要。 首先,我们需要理解CXF的工作原理。CXF提供了一种直观的方式来创建和消费Web服务,它通过Java...
通过使用camel-cxf,你可以利用Camel的灵活性和路由能力来处理Web服务的调用和响应。 在camel-cxf中,你可以: 1. **定义路由**:使用Camel的DSL(Domain Specific Language)或者XML配置文件,定义从何处获取输入...
为了支持不同数据类型的传输,例如JSON字符串,我们可以使用CXF的JAXB绑定,将对象自动转换为XML或JSON格式。此外,CXF还支持MTOM(Message Transmission Optimization Mechanism)和SwA(Swapped Attachments)来...