- 浏览: 922157 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (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 13136一、几个相关的概念 ... -
WebService CXF SOAP基本结构
2011-12-24 18:20 2051SOAP 是基于 XML 的简易协议,可使应用程序在 HTTP ... -
WebService CXF WSDL描述
2011-12-24 18:16 1266原文http://www.ibm.com/develo ... -
Sping3+CXF Web应用
2011-12-24 00:21 1462一、准备环境 Apache Cxf 2.4.5 ... -
WebService CXF下的Service(URL, QName, WebServiceFeature[]) is undefined
2011-09-21 21:11 2631Service(URL, QName, WebServiceF ... -
WebService CXF 如何设置 timeout
2011-05-21 09:31 4346由于用CXF构建的webservice使用的是spring配置 ... -
让Apache CXF 支持传递java.sql.Timestamp和java.util.HashMap类型
2011-05-02 12:46 2450让Apache CXF 支持传递java.sql.Timest ... -
WebService CXF 中的拦截器(Interceptor)
2011-05-02 12:38 3564CXF的Interceptor在每个请求响应之前或响应之后,做 ... -
WebService CXF中传递复杂类型对象
2011-05-02 12:07 12931前面一篇文章介绍的都是传递简单的字符串,现在开始介绍传递复杂类 ... -
WebService CXF --- 由WSDL文件开发Client端
2011-04-30 17:49 3820WSDL文件:http://www.webxml.com.cn ... -
WebService CXF----JAX-RPC 与 JAX-WS
2011-04-30 10:00 4355Web服务: 1、SOAP 2、WSDL ... -
WebService CXF --- 创建基础的示例
2011-04-09 16:11 15411、开发环境: cxf-2.3.3 ... -
WebService CXF --- CXF简单介绍
2011-04-09 14:48 41421、WebService介绍 WebService让 ... -
Web Service中的XFire 传输List、Map 自定义对象
2011-04-05 09:14 7808简单记录XFire中怎么传输对象的实现,以备查阅;又不正确的地 ... -
一个基础的XFire WebService快速开发
2011-04-03 09:03 1539环境: XFire-1.2.6 JDK1.5 MyEcl ... -
axis和xfire以及CXF
2011-04-03 08:51 1506由于最近使用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学习——入门篇 1.CXF由来 2.HelloWorld 3.WSDL描述 WebService CXF学习——进阶篇 ...WebService CXF学习——JAXB剖析
处理cxf版本和jaxb包中冲突问题,解决webservice中遇到的版本问题
webservice实例 CXF的JAXWS和JAXRS实现 及JAXB标准接口实现带jar包 全部手写,保证质量,导入就可以用
cxf-services-sts-core-2.6.3.jar cxf-services-wsn-api-2.6.3.jar cxf-services-wsn-core-2.6.3.jar cxf-xjc-boolean-2.6.0.jar cxf-xjc-bug671-2.6.0.jar cxf-xjc-dv-2.6.0.jar cxf-xjc-runtime-2.6.0.jar cxf-xjc...
自己在网上找了很多cxf实现rest风格的文章也不少,但是都讲的不全面,也没有lib包,所以自己参考网上零散的文章,搞了大半天才成功的。现在把源码发上来,java代码只有12K,主要是lib里面的全部jar包(spring、cxf等...
cxf的webservice, 基于soap的协议,soapui测试。 三大接口,jaxb解析XML
利用Apache CXF开发webservice接口需要用到的jar集合 cxf-core-3.0.15.jar cxf-rt-bindings-soap-3.0.15.jar cxf-rt-bindings-xml-3.0.15.jar cxf-rt-databinding-jaxb-3.0.15.jar cxf-rt-frontend-jaxws-3.0.15.jar...
//第三方系统的webservice Client client = dcf.createClient("http://localhost:9010/CxfWebservice?wsdl"); //第三方系统的webservice参数个数 Object[] obj = new Object[2]; obj[0]="CxfWebservice"; obj...
cxf与spring集成 需要最少的jar如下: cxf-2.3.3.jar geronimo-annotation_1.0_spec-1.1.1.jar geronimo-jaxws_2.2_spec-1.0.jar geronimo-stax-api_1.0_spec-1.0.1.jar geronimo-ws-metadata_2.0_spec-1.1.3.jar ...
apache-cxf-3.3.4.zip wsdl webservice 通过wsdl2java的命令生成客户端代码 进入dos窗口,进入apache-cxf-2.3.1\bin所在的目录,输入指令: wsdl2java -p com.jaxb.client -d ../src -all E:\webService\**...
为了解决cxf webservice访问与jdk1.6版本之间不兼容问题
用java开发WebService应用时,如果使用到cxf,那么jaxb包是必须的辅助包,这里提供jaxb2.1.12包下载,用到的各位自然知道用处;
cxf-2.2.9.jar geronimo-javamail_1.4_spec-1.7.1.jar geronimo-jaxws_2.2_spec-1.1.jar geronimo-jms_1.1_spec-1.1.1.jar geronimo-servlet_3.0_spec-1.0.jar jaxb-api-2.2.6.jar jaxb-impl-2.2.6.jar neethi-3.0.1...
但随着JAXWS2.0、2.1版本的发布,通过大量使用JAVAannotation特性,以及运用JAXB20规范来统一数据展示,从而大大简化和规范了开发过程,一些新的开源框架也随之诞生。ApacheCXF就是其中的佼佼者。它实现了JCP与...
axis调用第三方webservice接口所需的jar包,包括axis-1.4.jar,axis-jaxrpc-1.3.jar,axis-jaxrpc-1.4.jar,commons-discovery-0.5.jar,commons-logging-1.2.jar,cxf-rt-databinding-jaxb-3.3.1.jar,javax.mail-...
向您展示如何设置一个简单的Spring Boot应用程序以及如何在嵌入式Tomcat中引导可运行的CXF-Framework。 从流行的汲取灵感,继承了一个完全更改的示例WebService-Definition作为WSDL 展示如何在构建时使用JAX-WS ...