- 浏览: 932374 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (251)
- WebService (17)
- IBatis (22)
- Hibernate (1)
- SpringMVC - 基础篇 (32)
- Spring (15)
- Java (11)
- JVM及调优 - 基础篇 (4)
- 集群 (14)
- 数据库 (17)
- WebSphere (5)
- 多线程 (4)
- 集合、容器 (2)
- DB Pool (1)
- Power Designer (5)
- Maven基础 (5)
- JS (14)
- WEB 前端 (5)
- 实用小工具 (17)
- 社会、人 (2)
- 乱七八糟 (18)
- ASM&CGLIB - 基础篇 (12)
- 缓存 (1)
- 性能 (1)
- 设计之殇 (1)
- 分布式事务 (1)
- 单点登录 (11)
- 分布式 Session (4)
- Memcached - 基础篇 (6)
最新评论
-
一笑_奈何:
楼主写的还真行不错。
扫盲贴 - J2EE集群之JNDI集群实现 -
xuezhongyu01:
博主写的很详细,但最后还是没明白,最后调用BasicDataS ...
Spring中的destroy-method方法 -
Mr梁:
commons-fileupload.jar commons- ...
SpringMVC 中文件上传 MultipartResolver -
Eywa:
总结的很不错
ORACLE CASE WHEN 及 SELECT CASE WHEN的用法 -
TryRelax:
fastjson 比 jackson 好用吧?
Spring MVC Jackson DateFormat
WebService传递XML文档,当然也可以传递JSON对象。这节我只针对传递XML,那么JAVA绑定成XML,服务端将XML解析成Java对象有什么工具可用吗,其实这样的工具多的是。这里我选择一个比较简单的JAXB工具来讲解一下。
JAXB(Java Architecture for XML Binding)提供了一个快速而方便的方式绑定XML Schemas和java,使java程序员能够很方便的在java应用程序中处理XML数据。JAXB提供了将XML文档解组为java内容树的方法,以及将java内容树重新编组回XML文档的方法。JAXB同样也提供了一种从java对象生成XML Schema的方式。
一、JAXB充当的角色
JAXB中常用的注解
二、简单示例
1、@XmlRootElement
POJO:
package org.wy.pojo; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement public class User { private String name = "wy"; private String sex = "man"; public int age = 20; public String getName() { return name; } public void setName(String name) { this.name = name; } }
JaxbTest.java
package org.wy.jaxb; import java.io.StringReader; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Marshaller; import javax.xml.bind.Unmarshaller; import org.wy.pojo.User; public class JaxbTest { public static void main(String[] args) throws JAXBException { JAXBContext context = JAXBContext.newInstance(User.class); //JavaObject ---> XML Marshaller marshaller = context.createMarshaller(); User user = new User(); marshaller.marshal(user, System.out); System.out.println(); // XML---> JavaObject Unmarshaller unmarshaller = context.createUnmarshaller(); String str = "<user><age>23</age></user>"; user = (User)unmarshaller.unmarshal(new StringReader(str)); System.out.println(user.age); } }
输出结果:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><user><age>20</age><name>wy</name></user> 23
从输出结果看到 性别没有转换到xml中,原因可以从后接口XmlAccessorType.java中找到原因
我们可以看到如下
@Inherited @Retention(RUNTIME) @Target({PACKAGE, TYPE}) public @interface XmlAccessorType { /** * Specifies whether fields or properties are serialized. * * @see XmlAccessType */ XmlAccessType value() default XmlAccessType.PUBLIC_MEMBER; }
默认处理方式PUBLIC_MEMBER,处理public的。但是name是private的也转换成功了,原因是name被设置成了属性。
XmlAccessorType 有几种处理方式哪?
查看枚举类XmlAccessType.java
public enum XmlAccessType { /** * Every getter/setter pair in a JAXB-bound class will be automatically * bound to XML, unless annotated by {@link XmlTransient}. * * Fields are bound to XML only when they are explicitly annotated * by some of the JAXB annotations. */ PROPERTY, /** * Every non static, non transient field in a JAXB-bound class will be automatically * bound to XML, unless annotated by {@link XmlTransient}. * * Getter/setter pairs are bound to XML only when they are explicitly annotated * by some of the JAXB annotations. */ FIELD, /** * Every public getter/setter pair and every public field will be * automatically bound to XML, unless annotated by {@link XmlTransient}. * * Fields or getter/setter pairs that are private, protected, or * defaulted to package-only access are bound to XML only when they are * explicitly annotated by the appropriate JAXB annotations. */ PUBLIC_MEMBER, /** * None of the fields or properties is bound to XML unless they * are specifically annotated with some of the JAXB annotations. */ NONE }
当然JAXB也支持修改XML文档的根节点名称和命名空间,修改方式如下
@XmlRootElement(name="userwy", namespace="user-wy")
2、@XmlAccessorType
POJO:
package org.wy.pojo; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement @XmlAccessorType(XmlAccessType.PROPERTY) public class User { private String name = "wy"; private String sex = "man"; public int age = 20; public String getName() { return name; } public void setName(String name) { this.name = name; } }
输出结果:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><user><name>wy</name></user> 20
将@XmlAccessorType(XmlAccessType.FIELD)
输出结果:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><user><name>wy</name><sex>man</sex><age>20</age></user> 23
3、@XmlJavaTypeAdapter
复杂对象
POJO:
package org.wy.pojo; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlRootElement; import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter; @XmlRootElement @XmlAccessorType(XmlAccessType.PROPERTY) public class User { private String name = "wy"; private String sex = "man"; public int age = 20; private Address address; public String getName() { return name; } public void setName(String name) { this.name = name; } @XmlJavaTypeAdapter(AddressAdapter.class) public Address getAddress() { return address; } public void setAddress(Address address) { this.address = address; } }
Address.java接口
package org.wy.pojo; public interface Address { public String getAddress(); }
AddressImpl.java
package org.wy.pojo; public class AddressImpl implements Address{ private String address; public String getAddress() { return address; } public void setAddress(String address) { this.address = address; } }
AddressAdapter.java
package org.wy.pojo; import javax.xml.bind.annotation.adapters.XmlAdapter; public class AddressAdapter extends XmlAdapter<String, Address> { @Override public Address unmarshal(String v) throws Exception { AddressImpl address = new AddressImpl(); address.setAddress(v); return address; } @Override public String marshal(Address v) throws Exception { return v.getAddress(); } }
JaxbTest.java
package org.wy.jaxb; import java.io.StringReader; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Marshaller; import javax.xml.bind.Unmarshaller; import org.wy.pojo.AddressImpl; import org.wy.pojo.User; public class JaxbTest { public static void main(String[] args) throws JAXBException { JAXBContext context = JAXBContext.newInstance(User.class); //JavaObject ---> XML Marshaller marshaller = context.createMarshaller(); User user = new User(); AddressImpl address = new AddressImpl(); address.setAddress("BeiJing"); user.setAddress(address); marshaller.marshal(user, System.out); System.out.println(); // XML---> JavaObject Unmarshaller unmarshaller = context.createUnmarshaller(); String str = "<user><age>23</age></user>"; user = (User)unmarshaller.unmarshal(new StringReader(str)); System.out.println(user.age); } }
输出结果:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><user><address>BeiJing</address><name>wy</name></user> 20
发表评论
-
WebService CXF --- 传输文件MTOM
2011-12-25 14:06 13182一、几个相关的概念 ... -
WebService CXF SOAP基本结构
2011-12-24 18:20 2085SOAP 是基于 XML 的简易协议,可使应用程序在 HTTP ... -
WebService CXF WSDL描述
2011-12-24 18:16 1295原文http://www.ibm.com/develo ... -
Sping3+CXF Web应用
2011-12-24 00:21 1493一、准备环境 Apache Cxf 2.4.5 ... -
WebService CXF下的Service(URL, QName, WebServiceFeature[]) is undefined
2011-09-21 21:11 2699Service(URL, QName, WebServiceF ... -
WebService CXF 如何设置 timeout
2011-05-21 09:31 4378由于用CXF构建的webservice使用的是spring配置 ... -
让Apache CXF 支持传递java.sql.Timestamp和java.util.HashMap类型
2011-05-02 12:46 2483让Apache CXF 支持传递java.sql.Timest ... -
WebService CXF 中的拦截器(Interceptor)
2011-05-02 12:38 3592CXF的Interceptor在每个请求响应之前或响应之后,做 ... -
WebService CXF中传递复杂类型对象
2011-05-02 12:07 12977前面一篇文章介绍的都是传递简单的字符串,现在开始介绍传递复杂类 ... -
WebService CXF --- 由WSDL文件开发Client端
2011-04-30 17:49 3870WSDL文件:http://www.webxml.com.cn ... -
WebService CXF----JAX-RPC 与 JAX-WS
2011-04-30 10:00 4390Web服务: 1、SOAP 2、WSDL ... -
WebService CXF --- 创建基础的示例
2011-04-09 16:11 15751、开发环境: cxf-2.3.3 ... -
WebService CXF --- CXF简单介绍
2011-04-09 14:48 41781、WebService介绍 WebService让 ... -
Web Service中的XFire 传输List、Map 自定义对象
2011-04-05 09:14 7835简单记录XFire中怎么传输对象的实现,以备查阅;又不正确的地 ... -
一个基础的XFire WebService快速开发
2011-04-03 09:03 1564环境: XFire-1.2.6 JDK1.5 MyEcl ... -
axis和xfire以及CXF
2011-04-03 08:51 1549由于最近使用WebService,于是到网上疯狂搜索,找点资料 ...
相关推荐
WebService CXF 用了一天时间找,官网打不开,国内要积分,下下来又永不了。最后终于搞到手,上传上来分享给大家。 jdk版本 CXF版本 java 9及以上 3.3.x java 8 3.x java 7 2.2x --- 3.2之前版本 java 6 3.1 ...
**WebService CXF 详解** **一、WebService简介** WebService是一种基于标准的,可以在不同操作系统、编程语言之间交换数据的Web应用程序。它通过WSDL(Web服务描述语言)定义了服务接口,利用SOAP(简单对象访问...
**WebService CXF 对象传递详解** 在Web服务领域,CXF是一个非常重要的开源框架,它允许开发者创建和消费各种Web服务。CXF支持SOAP、RESTful等多种通信模式,并且能够处理复杂的对象传递,使得Web服务的数据交换...
做开发时,查了大量资料,发现一比较全面的资料,分享一下! WebService CXF学习——入门篇 1.CXF由来 2.HelloWorld 3.WSDL描述 WebService CXF学习——进阶篇 ...WebService CXF学习——JAXB剖析
4. 编码解码:CXF支持多种数据绑定技术,如JAXB(Java Architecture for XML Binding)和Aegis,用于XML与Java对象之间的转换。 5. 安全性:通过WSS,CXF提供了一套完整的安全解决方案,包括基本认证、数字签名、...
总的来说,"webservice使用cxf的实例"这个主题涵盖了从基础理论到实际操作的各个环节,包括CXF框架的使用、Web服务的创建与部署、客户端调用、数据绑定、安全性和Spring集成等多个方面。通过学习和实践,开发者可以...
【WebService CXF 使用详解】 WebService CXF 是一个开源框架,用于构建和开发符合 WS-* 标准的 Web 服务。它提供了丰富的功能,包括支持多种协议和服务风格,以及与 Spring 框架的深度集成。CXF 允许开发者轻松地...
WebService CXF和Mybatis是两种在Java开发中广泛使用的技术,它们分别用于构建Web服务和数据库操作。让我们深入了解这两个框架以及如何将它们与Spring框架结合使用。 **WebService CXF** CXF是一个开源的Java框架...
【标题】"webservice-cxf-spring-jar.zip" 是一个包含了使用Apache CXF与Spring框架集成开发Web服务的Java库集合。这个压缩包提供了一整套必要的JAR文件,以便于开发者在他们的项目中快速搭建和运行基于CXF的Web服务...
在本实例中,我们将探讨如何使用Eclipse IDE和Apache CXF来创建和发布一个简单的Web服务。首先,确保你已经安装了Eclipse IDE和Apache CXF的插件。这些插件通常可以在Eclipse Marketplace中找到,通过搜索"CXF"进行...
【标签】"webservice cxf jar包"强调了这是关于CXF框架的Web服务开发工具包,CXF是一个广泛使用的Java框架,它允许开发者通过SOAP和RESTful接口创建和消费Web服务。 以下是一些主要的jar文件及其在Web服务开发中的...
在提供的压缩包“ws_test”中,很可能包含了使用CXF实现的Web服务示例,包括JAX-WS和JAX-RS的服务端点,以及使用JAXB进行数据交换的类。这个实例可能是全部手写的,意味着它提供了一整套从创建服务到处理请求和响应...
使用jaxws开发webservice。 Webservice三要素 Wsdl(webservice使用说明书)重点掌握 Soap(jaxws开发webservice的传输协议)重点掌握 UDDI(了解) Webservice的使用场景分析(掌握) 学会jaxws基本开发方法...
确保包含了CXF的核心库和其他必要的依赖,如JAXB(Java Architecture for XML Binding)和WS-I Basic Profile等。 2. **配置CXF:** 创建并配置CXF的服务器端点(Endpoint)。这通常涉及创建一个实现你的服务接口的...
【WebService CXF】是Apache软件基金会的一个开源项目,专门用于构建和开发Web服务。CXF全称是"CXF: The Next Generation JAXWS & JAXRPC Stack",它提供了全面的工具和技术来支持Web服务的创建、部署和消费。Apache...
本篇文章将深入探讨如何使用CXF与Spring集成,以及在开发过程中所需的jar包。 首先,让我们理解Web服务的基本概念。Web服务是一种通过网络(通常基于HTTP协议)进行通信的应用程序接口(API)。它允许不同系统间的...
CXF 支持 JAXB(Java Architecture for XML Binding)和 Aegis 来进行对象到 XML 和 XML 到对象的转换,简化了数据交换过程。 6. **传输协议和绑定**: - HTTP/HTTPS:CXF 支持标准的 HTTP 和安全的 HTTPS 协议。...
【WebService CXF详解与入门】 WebService是一种允许不同系统之间进行通信和交互的标准协议,它基于HTTP协议,使得应用程序可以无视具体实现细节地调用互联网上的服务。这种技术使得分布式应用程序的发展成为可能,...
【标题】:“Webservice CXF 开发实战” 在IT行业中,Web服务是应用程序之间进行通信的一种标准方式,而Apache CXF则是一个强大的开源框架,用于构建和开发Web服务。本篇将深入探讨CXF框架在Webservice开发中的实战...
你只需要在Java类上使用特定的JAXB注解,如`@XmlRootElement`和`@XmlElement`,CXF就能理解并处理这些对象。 3. CXF整合Spring: Spring是一个流行的Java企业级应用框架,提供依赖注入和面向切面编程等功能。CXF...