- 浏览: 5029150 次
- 性别:
- 来自: 南京
文章分类
- 全部博客 (2844)
- java (1094)
- hadoop (37)
- jvm (39)
- hbase (11)
- sql (25)
- 异常 (83)
- div css (6)
- 数据库 (95)
- 有趣的code (15)
- struts2 (6)
- spring (124)
- js (44)
- 算法 (65)
- linux (36)
- hibernate (7)
- 中间件 (78)
- 设计模式 (2)
- 架构 (275)
- 操作系统 (91)
- maven (35)
- tapestry (1)
- mybatis (9)
- MQ (101)
- zookeeper (18)
- 搜索引擎,爬虫 (208)
- 分布式计算 (45)
- c# (7)
- 抓包 (28)
- 开源框架 (45)
- 虚拟化 (12)
- mongodb (15)
- 计算机网络 (2)
- 缓存 (97)
- memcached (6)
- 分布式存储 (13)
- scala (5)
- 分词器 (24)
- spark (104)
- 工具 (23)
- netty (5)
- Mahout (6)
- neo4j (6)
- dubbo (36)
- canal (3)
- Hive (10)
- Vert.x (3)
- docker (115)
- 分布式追踪 (2)
- spring boot (5)
- 微服务 (56)
- 淘客 (5)
- mesos (67)
- php (3)
- etcd (2)
- jenkins (4)
- nginx (7)
- 区块链 (1)
- Kubernetes (92)
- 驾照 (1)
- 深度学习 (15)
- JGroups (1)
- 安全 (5)
- 测试 (16)
- 股票 (1)
- Android (2)
- 房产 (1)
- 运维 (6)
- 网关 (3)
最新评论
-
明兜3号:
部署落地+业务迁移 玩转k8s进阶与企业级实践技能(又名:Ku ...
Kubernetes系统常见运维技巧 -
q328965539:
牛掰啊 资料收集的很全面
HDFS小文件处理解决方案总结+facebook(HayStack) + 淘宝(TFS) -
guichou:
fluent挂载了/var/lib/kubelet/pods目 ...
kubernetes上部署Fluentd+Elasticsearch+kibana日志收集系统 -
xu982604405:
System.setProperty("java.r ...
jmx rmi 穿越防火墙问题及jmxmp的替代方案 -
大漠小帆:
麻烦问下,“获取每个Item相似性最高的前N个Item”,这个 ...
协同过滤推荐算法在MapReduce与Spark上实现对比
一、前言。
最近正在做一个项目,根据需求计划需要一种 Object <--> XML的工具,而JAXB就非常符合需求,于是以下是近天来的研究心得。
二、JAXB技术介绍
1. 什么是JAXB?
Java Architecture for XML Binding (JAXB) 是一个业界的标准,是一项可以根据XML Schema产生Java类的技术。该过程中,JAXB也提供了将XML实例文档反向生成Java对象树的方法,并能将Java对象树的内容重新写到XML实例文档。从另一方面来讲,JAXB提供了快速而简便的方法将XML模式绑定到Java表示,从而使得Java开发者在Java应用程序中能方便地结合XML数据和处理函数。
这意味着你不需要处理甚至不需要知道XML编程技巧就能在Java应用程序中利用平台核心XML数据的灵活性。而且,可以充分利用XML的优势而不用依赖于复杂的XML处理模型如SAX或DOM。JAXB 隐藏了细节并且取消了SAX和DOM中没用的关系——生成的JAXB类仅描述原始模型中定义的关系。其结果是结合了高度可移植Java代码和高度可移植的XML数据。其中这些代码可用来创建灵活、轻便的应用程序和Web服务。
2. JAXB的体系结构
JAXB的体系结构和应用过程如图所示,一般来说包含以下几个步骤:
1) 根据你的应用程序所要操作的XML数据格式,撰写相应的XML Schema,有关XML Schema的知识,请参阅“参考资料”
2) 使用JAXB 所带的编译工具(Binding Compiler),将这个XML Schema文件作为输入,产生一系列相关的Java Class和Interface
3) 在使用JAXB编译工具的时候,可以有选择性的提供一个配置文件(图的虚线部分),来控制JAXB编译工具的一些高级属性。
4) 这些Java Class和Interface是你的应用程序操纵XML数据的主要接口和方法。
5) 通过JAXB对XML文档进行的操作主要包括:将符合XML Schema规定的XML文档解析生成一组相应的Java对象;对这些对象进行操作(修改、增加和删除对象的属性等等);然后将这些对象的内容保存到这个XML文档中。
三、安装介绍
1. 开发环境准备
1) Java 1.5 JDK/JRE
(*) 你必须安装java运行环境
2) Eclipse SDK 3.2.x
Eclipse推荐下载的版本是3.2.1 。
3) My Eclipse 5.x (推荐使用)
能为你的XML编写提供帮助,与Eclipse SDK 3.2.x配套使用。
2. 开始安装:
1) 需要下载的软件
A. 下载开发工具包:Java Web Services Developer Pack 2.0
JAXB2.0的正式版本的一个实现(大家一定要记住,JAXB只是一个标准,Sun公司提供的此工具包只能说是这个标准的一个实现)已经发布了。由于XML在Web Services中的大量应用,所以,JAXB2.0作为Web Services 开发包的一部分,可以从SUN的官方网站下载。其中jaxb包含在jaxb子目录下。
B. XML文档解析:xerces-2_9_0
Xerces是由Apache组织所推动的一项XML文档解析开源项目,jwsdp提供的xerces似乎有Bug,建议下载最新版本,下载请到Apache的官方网站下载。
2) 环境变量配置 JAVA_HOME=D:/java/jdk1.5.0 JWSDP_HOME=D:/Sun/jwsdp-2.0 JAXB_HOME=%JWSDP_HOME%/jaxb JAXB_LIBS=%JAXB_HOME%/lib JAXP_LIBS=%JWSDP_HOME%/jaxp/lib JWSDP_LIBS=%JWSDP_HOME%/jwsdp-shared/lib PATH=%JAXB_HOME%/bin;%JWSDP_HOME%/jwsdp-shared/bin;%PATH% CLASSPATH= %JWSDP_HOME%/jaxb/lib/jaxb-api.jar; %JWSDP_HOME%/jaxb/lib/jaxb-impl.jar; %JWSDP_HOME%/jaxb/lib/jaxb-xjc.jar; %JWSDP_HOME%/jwsdp-shared/lib/activation.jar; %JWSDP_HOME%/sjsxp/lib/jsr173_api.jar; %JWSDP_HOME%/sjsxp/lib/sjsxp.jar;
要使用JAXB,在下载JAXB开发包以后,还要设置一些环境变量,主要是设置classpath的路径,以提供JAXB包所带的库文件的位置。
注:注意自己原来的CLASSPATH设置,不要覆盖了。
3) Eclipse 工程构建路径配置:
注:如图所示的JAR都添加到工程的构建路径中。
四、实例分析
1. 确定XML Schema <?xml version="1.0" encoding="UTF-8"?> <users> <user> <name>小李</name> <sex>男</sex> <age>24</age> </user> <user> <name>小丽</name> <sex>女</sex> <age>18</age> </user> <user> <name>小王</name> <sex>男</sex> <age>22</age> </user> </users> <?xml version="1.0" encoding="UTF-8"?> <schema targetNamespace="us" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:tns="us"> <simpleType name="Sex"> <restriction base="string"> <enumeration value="男"></enumeration> <enumeration value="女"></enumeration> </restriction> </simpleType> <complexType name="User"> <sequence> <element name="name" type="string"></element> <element name="age" type="int"></element> <element name="sex" type="tns:Sex"></element> </sequence> </complexType> <element name="user" type="tns:User"></element> <complexType name="Users"> <sequence> <element ref="tns:user" minOccurs="1" maxOccurs="unbounded"> </element> </sequence> </complexType> <element name="users" type="tns:Users"></element> </schema>
要确定XML Schema意味着你要确定一个规则,来约束你的XML文档,使所有符合这个规则的XML文档看上去都很类似。例如,在这个例子中,我们希望XML文档的格式如下:
XML文档所包含的意思:一个用户组 <users> 里面有多个 <user>,而每个 <user> 又包括<name><sex><age>这些信息,而要在应用程序中想要操纵此XML文档,还要根据这个XML文档,产生一个Schema文档。
Schema和XML文档之间的关系,就好像Java中类与实例的关系。每个符合 schema的XML文档,都是这个Schema的一个实例;而Schema本身是一个模板,它规定了XML文档应该是什么样的。这个Schema描述了对xml文档的约束:
1) 它规定了<users>这个节点内可以包含一个或多个<user>的节点。
2) 每个<user>节点包括名字、年龄、性别这几个信息
3) 规定了<sex>属性由“男”和“女”组成
2. 使用编译工具生成相应的Java类
有了Schema文件以后,我们就可以利用JAXB工具包,让它来替我们生成操纵符合这个Schema规定的所有XML实例文档的所有Java源代码。
如果已经设置好了环境变量的话(请参考“设置环境变量”),那么只需要运行JAXB包所带的“xjc”运行程序,例如
%JAXB_HOME%/bin/xjc.bat userSchema.xsd -d src –p primer.userinfo
其中:
A. %JAXB_HOME%是你安装JAXB工具包的位置,通常在jwsdp工具包的子目录下。
B. userSchema.xsd 是Schema的文件名,一般以xsd作为文件名的后缀。
C. -d 的选项,是指定系统生成的Java源代码所放置的目录,示例中为:src
D. -p 的选项,是指定系统生成的Java源代码所在的Java Package的名称,示例中为:primer.userinfo
E. 还有更多的选项,请参考JAXB的相关文档。
如果运行成功的话,就会在你"-d"选项指定的目录下产生一些java代码文件:
3. 在应用程序中使用这些代码
下面我们分析一下如何在我们的应用程序中使用JAXB工具包替我们生成的代码。
1) JAXBContext 提供了一个入口,通过这个入口可以管理必要的XML/Java绑定信息。客户端应用程序通过newInstance(contextPath)方法得到该类的新实例。contextPath 参数包含一个或多个Java包名,这些Java包就是了JAXB编译器所产生的接口代码所在的Java包。该参数值初始化JAXBContext 对象,使得它能够管理JAXB编译器产生的接口。 JAXBContext jc = JAXBContext.newInstance("primer.userinfo");
2) 而通过ObjectFactory,可以直接生成根节点java对象Users 和子对象User。 User userA = objFactory.createUser(); Users users = objFactory.createUsers();
3) 对于Marshaller和Unmarshaller,这两个对象主要是用于Java对象和XML文档互相转换的主要接口(Marshaller负责从Java对象到XML文档的转换,Unmarshaller负责从XML文档到Java对象的转换)。 JAXBElement usersE = objFactory.createUsers(users); Marshaller marshaller = jc.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE); marshaller.marshal( usersE,new FileOutputStream("src/test.xml")); JAXBElement usersE = (JAXBElement)jc.createUnmarshaller().unmarshal(new File("src/test.xml")); Users users = (Users)usersE.getValue();
Marshaller能把Users 对象转换成XML文件
Unmarshaller能把 XML文件转换成Users对象
4. 实例代码 public void javaToXml() { try { JAXBContext jc = JAXBContext.newInstance("primer.userinfo"); //参数为JAXB生成的java文件所在包名 ObjectFactory objFactory = new ObjectFactory(); //生成对象工厂 User userA = objFactory.createUser(); userA.setName("西瓜"); userA.setAge(26); userA.setSex(Sex.男); User userB = objFactory.createUser(); userB.setName("冬瓜"); userB.setAge(19); userB.setSex(Sex.女); User userC = objFactory.createUser(); userC.setName("南瓜"); userC.setAge(22); userC.setSex(Sex.男); Users users = objFactory.createUsers(); List<User> list = users.getUser(); list.add(userA); list.add(userB); list.add(userC); JAXBElement usersE = objFactory.createUsers(users); Marshaller marshaller = jc.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE); marshaller.marshal( usersE,new FileOutputStream("src/test.xml")); } catch (Exception e) { e.printStackTrace(); } }
五、参考资料
1. JAXB
http://java.sun.com/webservices/jaxb/
2. XML Schema
http://www.w3.org/1999/05/06-xmlschema-1/
http://www.w3.org/1999/05/06-xmlschema-2/
转载————————————————————————————————
发表评论
-
Kryo 使用指南
2017-12-05 20:14 20071、Kryo 的简介 Kryo 是一个快速序列化/ ... -
spring session序列化问题排查
2017-12-01 19:07 6264严重: Servlet.service() for ser ... -
利用junit对springMVC的Controller进行测试
2017-11-30 16:26 1441平时对junit测试service/D ... -
Java内存模型之重排序
2017-11-29 09:44 858在执行程序时,为了提供性能,处理器和编译器常常会对指令进行重 ... -
pmd spotbugs 文档
2017-11-28 10:02 0https://pmd.github.io/pmd/pmd ... -
PMD、FindBug、checkstyle、sonar这些代码检查工具的区别?各自的侧重点是什么?
2017-11-28 10:01 2142可以说都是代码静态分析工具,但侧重点不同。pmd:基于源代码 ... -
阿里巴巴Java代码规约插件p3c-pmd使用指南与实现解析
2017-11-23 17:09 1602阿里巴巴Java代码规约插件安装 阿里Java代码规 ... -
静态分析工具PMD使用说明 (文章来源: Java Eye)
2017-11-23 17:07 1140质量是衡量一个软件是否成功的关键要素。而对于商业软件系统,尤 ... -
MyBatis 使用 MyCat 实现多租户的一种简单思路
2017-11-20 18:27 2836本文的多租户是基于多数据库进行实现的,数据是通过不同数据库进 ... -
Spring+MyBatis实现数据库读写分离方案
2017-11-20 17:15 1075百度关键词:spring mybatis 多数据源 读写分离 ... -
数据库连接池druid wallfilter配置
2017-11-20 11:38 1335使用缺省配置的WallFilter <be ... -
java restful 实体封装
2017-11-16 09:47 1588package com.mogoroom.bs.commo ... -
dak
2017-11-15 11:21 0package zzm; import jodd.ht ... -
Java内存模型之从JMM角度分析DCL
2017-11-15 09:35 635DCL,即Double Check Lock,中卫双重检查锁 ... -
Java 打印堆栈的几种方法
2017-11-14 09:36 4741java 中可以通过 eclipse 等工具直接打印堆栈, ... -
Servlet Session学习
2017-11-10 09:25 548HTTP 是一种"无状 ... -
浅析Cookie中的Path与domain
2017-11-10 09:26 1057Path – 路径。指定与co ... -
入分析volatile的实现原理
2017-11-08 09:47 683通过前面一章我们了解了synchronized是一个重量级的 ... -
Spring MVC-ContextLoaderListener和DispatcherServlet
2017-11-15 09:35 681Tomcat或Jetty作为Servlet ... -
搭建spring框架的时候,web.xml中的spring相关配置,可以不用配置ContextLoaderListener(即只配DispatcherServl
2017-11-07 18:27 1432搭建spring框架的时候,web.xml中的sprin ...
相关推荐
### JWSDP学习笔记知识点详解 #### 一、概述 JWSDP(Java Web Services Developer Pack)是一套由Sun Microsystems发布的开源工具包,旨在为Java开发者提供一系列库和工具来辅助开发、测试Web服务应用。它包含了多...
tomcat50-jwsdp.zip tomcat50-jwsdp.zip tomcat50-jwsdp.zip tomcat50-jwsdp.zip tomcat50-jwsdp.zip tomcat50-jwsdp.zip tomcat50-jwsdp.zip tomcat50-jwsdp.zip
jwsdp-2_0-windows-i586.exe jwsdp-2_0-windows-i586.exe jwsdp-2_0-windows-i586.exe jwsdp-2_0-windows-i586.exe jwsdp-2_0-windows-i586.exe jwsdp-2_0-windows-i586.exe jwsdp-2_0-windows-i586.exe jwsdp-2_0-...
看到網上JWSDP系列軟件越來越少,特此上傳一個1.2版本的供大家下載
1. **安装JWSDP 1.5**:将JWSDP 1.5安装到一个合适的目录下。 2. **设置CLASSPATH环境变量**: - 添加以下JAR文件到CLASSPATH环境变量中: - JWSDP/jaxb/lib/jaxb-api.jar - JWSDP/jaxb/lib/jaxb-impl.jar - ...
使用 Eclipse JavaEE 开发 WebService 时,若选择手动创建原生的JAX-WS服务,需要导入此jar资源(教程详见我的博文https://blog.csdn.net/weixin_50604409/article/details/116399530)。 如果您同时装有 IntelliJ ...
- `d:\jwsdp-2.0\jwsdp-shared\bin;` - `%java_home%\jdk1.6.0_02\bin;` - `%java_home%\jre1.6.0_02\bin` - `JAVA_HOME`: `D:\jdk1.6.0_02;D:\jre1.6.0_02;` - `CLASSPATH`: `.;%java_home%\jdk1.6.0_01\bin` ...
·提供使用Sun JWSDP 1.0、BEA Weblogic 7.0、Apache Axis 1.0B3、Systinet WASP 4.0、Exolab CASTOR、IBM XML安全套件和Micorsoft.NET的大量示例。 作者简介:Ramesh Nagappan是Sun Java中心的Enterprise Java...
3. **安装Tomcat5.0 for Java WSDP 1.4**:这是一个专门为Java WebServices Developer Pack (JWSDP)制作的Web Container版本。 4. **安装JWSDP 1.4**:这是Java构建WebService的相关工具集合。 **安装Tomcat5.0 for...
为了能够使用JWSDP工具包中的工具进行证书转换,需要下载并安装`jwsdp-2_0-windows-i586.exe`。该工具包包含了用于PFX转JKS所需的命令行工具。 #### 创建JKS Keystore文件 接下来,需要使用`keytool`命令创建一个...
jwsdp.pdf文件可能包含了JWSDP的详细使用指南、API参考或者教程,涵盖了如何使用Java来创建、部署和消费Web服务。 在实际开发中,开发者可能会使用如Apache CXF、Axis2这样的开源框架来简化Web服务的实现,它们提供...
5. JWSDP(Java Web Services Developer Pack)是为开发Web服务提供的一套集成工具包,它包括了JAX-RPC、JAX-WS、Java WSDP Registry Server等技术,使得开发者能够轻松地构造、测试和部署Web服务。 6. JAX-RPC...
利用JWSDP中的技术,如JAXR、JAX-RPC和Java WSDP Registry Server,可以更容易地实现UDDI注册中心的建立,完成服务的发布、查找和调用。 ### 知识点六:JAXR、JAX-RPC和Java WSDP Registry Server - **JAXR(Java ...
最后,要学习构建Web服务的相关API,如JAX-RPC、SAAJ、JAXB、JAXM、JAXR、JWSDP,以及轻量级应用程序框架,如Spring、PicoContainer、Avalon,它们的IoC/DI风格对于模块化和松耦合的系统设计非常有用。 总之,学习...
- SUN JWSDP 开发包:Java Web Services Developer Pack,提供了开发Web Service所需的API和工具。 - Axis 开发包:Apache Axis是用于构建Web Service的开源框架,简化了服务的创建、部署和消费。 - Eclipse IDE:...
10. **XML处理和Web服务**:掌握XML解析API(如JAXP、JDOM、DOM4J、JAXR),以及构建WebService的相关API(如JAX-RPC、SAAJ、JAXB、JAXM、JAXR、JWSDP)。 11. **轻量级框架**:理解IoC/DI(控制反转/依赖注入)...
在实际操作中,首先需要确保环境变量设置正确,包含JWSDP(Java Web Services Development Pack)的bin目录。然后,根据JAX-RPC的流程,使用`wscompile`生成占位类,使用`wsdeploy`生成约束,并启动Tomcat服务器来...
1. **环境配置**:使用JDK 1.5、JWSDP 2.0、Ant 1.6。 2. **引入JAXB的jar包**:确保项目中包含了JAXB所需的库文件。 3. **编写Ant构建文件**:设置项目的构建路径、属性等。 4. **编写XML文档**:创建一个XML文档...
例如,安装Sun的Java JDK 1.5,Apache Tomcat服务器,SUN JWSDP开发包,Axis开发包以及Eclipse集成开发环境。此外,还可以借助特定的Eclipse插件如Workshop Studio或Netbeans来简化开发流程。通过阅读《Tomcat5.0.28...
**JAXM**:Java API for XML Messaging是另一种用于处理XML消息的API,虽然它并不包含在JWSDP中,但同样支持SOAP消息处理。JAXM最初设计用于支持非SOAP的XML消息,但在后来的版本中,它也被扩展来支持SOAP消息处理。...