jdk带了支持jaxb的包,为javax.xml.bind.*; ,主要用到该包中的JAXBContext、Marshaller、UmShaller对象。其中Mashaller对象中的mashal方法负责
将将xml对象树写道流或者文件中,而UnMarshaller对象中的unMarshal方法负责将流或者文件中的内容转换成java对象树。其中unMarshal方法返回的是
JAXBElement<xml模式中根元素的类型>,输入是xml文件或者InputStream流。Marshal方法输入是JAXBElement<根元素类型>和文件或者OutputStream流对象。
所以要调用上述两个方法时,都要用到JAXBElement<根元素类型>元素,建立方法为ObjectFactory factory=new ObjectFactory();factory.create(根元素)(根元素类型 变量)
实例程序如下:
(1)首先建立XMLSchema文档(存储路径为E:\jing\java\workplace\JAXB\schema\)
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="catalog" type="catalogType"/>
<xsd:complexType name="catalogType">
<xsd:sequence>
<xsd:element ref="journal" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
<xsd:attribute name="section" type="xsd:string"/>
<xsd:attribute name="publisher" type="xsd:string"/>
</xsd:complexType>
<xsd:element name="journal" type="journalType"/>
<xsd:complexType name="journalType">
<xsd:sequence>
<xsd:element ref="article" minOccurs="0" maxOccurs="unbounded"/>
</xsd:sequence>
</xsd:complexType>
<xsd:element name="article" type="articleType"/>
<xsd:complexType name="articleType">
<xsd:sequence>
<xsd:element name="title" type="xsd:string"/>
<xsd:element name="author" type="xsd:string"/>
</xsd:sequence>
<xsd:attribute name="level" type="xsd:string"/>
<xsd:attribute name="date" type="xsd:string"/>
</xsd:complexType>
</xsd:schema>
(2)利用JAXB形成对应于该XMLSchema的java类,执行的命令如下(也可以将如下命令写入Bat文件中,需要时只要双击运行bat文件就行,比较方便):
xjc -d "E:\jing\java\workplace\JAXB" -p "jing" "E:\jing\java\workplace\JAXB\schema\messages.xsd"
命令解释如下:
-d:代表将生成的类放在什么路径下
-p;代表生成的类所属于的包的名字
最后的引号的内的内容为所有用到的XMLSchema(包括存放的路径)
执行完上述命令后,如果你的XMLSchema文档没有语法错误就在名字为jing的包内生成该Schema对应的一些java类了,上述Schema文件生成的java类如下:
ArticleType.java
CatalogType.java
JournalType.java
ObjectFactory.java
(3)接下来可以用上述类来编程了
编写一个专门用来转换java类和XML文件之间的中间类,方便其他模块使用
package jing;
import java.io.*;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import java.net.*;
public class CatalogTypeUtils {
private static JAXBContext jaxbContext = null;
private static Marshaller marshaller = null;
private static ObjectFactory factory = null;
public static void buildXml(CatalogType catalogType, OutputStream out) {
try {
jaxbContext = JAXBContext.newInstance("jing");
marshaller = jaxbContext.createMarshaller();
ObjectFactory factory = new ObjectFactory();
JAXBElement<CatalogType> catalogElement = factory.createCatalog(catalogType);
//OutputStream out=socket.getOutputStream();
marshaller.marshal(catalogElement,out);
//out.close();
}/* catch (IOException d) {
d.printStackTrace();
} */catch (JAXBException e) {
e.printStackTrace();
}
}
public static CatalogType buildObject(InputStream in) {
JAXBElement<CatalogType> catalogElement = null;
try {
JAXBContext jaxbContext = JAXBContext.newInstance("jing");
Unmarshaller unMarshaller = jaxbContext.createUnmarshaller();
//InputStream in=socket.getInputStream();
catalogElement = (JAXBElement<CatalogType>) unMarshaller.unmarshal(in);
} catch (Exception e) {
e.printStackTrace();
}
return catalogElement.getValue();
}
}
说明:其中void buildXml(CatalogType catalogType, OutputStream out)负责将由catalogType为的根元素的xml文档转到out输出流中
其中buildObject(InputStream in)负责将输入流中的内容转换成java对象
(4)应用程序
package jing;
import java.io.File;
public class Main {
private ObjectFactory factory = new ObjectFactory();
/*
* @param xmlDocument is the output xml file
*/
public void testObject2Xml(File xmlDocument) {
CatalogType catalog = factory.createCatalogType();
assmbleCatalogForTest(catalog);
CatalogTypeUtils.buildXml(catalog,xmlDocument);
}
/*
* @param xmlDocument is the source xml file for generating Object
*/
public CatalogType testXml2Object(File xmlDocument){
return CatalogTypeUtils.buildObject(xmlDocument);
}
/*
* This function is used to assmble CatalogType object for test
*/
private CatalogType assmbleCatalogForTest(CatalogType catalog){
catalog.setSection("Java Technology");
catalog.setPublisher("IBM developerWorks");
JournalType journal = factory.createJournalType();
ArticleType article = factory.createArticleType();
article.setLevel("Intermediate");
article.setDate("January-2004");
article.setTitle("Service Oriented Architecture Frameworks");
article.setAuthor("Naveen Balani");
java.util.List journalList = catalog.getJournal();
journalList.add(journal);
java.util.List articleList = journal.getArticle();
articleList.add(article);
article = factory.createArticleType();
article.setLevel("Advanced");
article.setDate("October-2003");
article.setTitle("Advance DAO Programming");
article.setAuthor("Sean Sullivan");
articleList = journal.getArticle();
articleList.add(article);
article = factory.createArticleType();
article.setLevel("Advanced");
article.setDate("May-2002");
article.setTitle("Best Practices in EJB Exception Handling");
article.setAuthor("Srikanth Shenoy");
articleList = journal.getArticle();
articleList.add(article);
return catalog;
}
public static void main(String[] argv) {
Main test = new Main();
test.testObject2Xml(new File("E:\\hello.xml"));
CatalogType type = test.testXml2Object(new File("E:\\hello.xml"));
System.out.println(type.getPublisher());
}
}
分享到:
相关推荐
**JAXB(Java Architecture for XML Binding)** 是Java平台中用于处理XML的...通过深入学习和实践,你可以充分利用JAXB的强大功能,提升XML操作的效率和便捷性。在Java项目中,掌握JAXB技术将对处理XML数据大有裨益。
**JAXB(Java Architecture for XML Binding)**是Java平台上的一个标准API,它允许开发者将XML文档和Java对象之间进行...通过深入学习和实践,你将能够熟练运用JAXB进行XML的解析和编码,提高项目开发的效率和质量。
**JAXB(Java Architecture for XML Binding)学习笔记** JAXB是Java平台标准版(Java SE)的一部分,它提供了一种方便的方式来将XML数据绑定到Java对象上,以及将Java对象转换为XML数据。这个强大的工具使得开发...
通过实践和学习,开发者可以充分利用JAXB的潜力,提高XML处理的效率和可维护性。在提供的压缩包文件`JAXB_tests`中,可能包含了一些示例代码和测试用例,这将有助于更深入地理解JAXB的工作机制和用法。
总的来说,这份"JAXB资料集.rar"是一份全面学习JAXB的资源,包含了理论指导、实践示例和问题解决,适合对JAXB感兴趣的开发者进行深入学习。通过阅读和实践其中的内容,可以有效提升对XML数据处理的能力,并在实际...
在IT行业中,Web服务是一种广泛使用的通信协议,它允许不同系统之间通过互联网交换数据。Axis是Apache软件基金会开发的一个开放源代码SOAP(简单对象访问协议)堆栈...不断学习和实践,你将在Web服务领域变得更加专业。
**JAXB2 转换XML文档** JAXB(Java Architecture for XML Binding)是Java平台标准版(Java SE)的一部分,用于将Java对象绑定到XML文档,并...通过实践`jaxb2-demo`项目,可以进一步巩固这些概念并提升实际操作能力。
通过深入学习和实践以上知识点,开发者可以熟练地运用JAXB进行数据绑定,无论是在简单的数据交换,还是在复杂的业务场景中,都能发挥出JAXB的强大功能。对于“atf-TRUNK”这个文件名,可能是指一个软件项目的主分支...
此外,通过实践提供的实例代码,可以加深对JAXB工作原理的理解,提升实际编程技能。 总之,这个压缩包对于想要学习和提升JAXB技能的Java开发者来说是一个宝贵的资源,它可能涵盖了从基础概念到高级应用的各种教程和...
在提供的压缩包文件“webService服务接口方案”中,可能包含了具体的代码示例、配置文件和其他参考资料,这些都可以帮助你更好地理解和实践上述步骤。记得根据自己的项目需求进行适当的修改和调整。同时,参考其他...
"7-steps-to-solve-real-world-problem-using-JAXB-Java.pdf"这个文件可能包含了详细的示例和解释,可以作为学习JAXB的宝贵资源。而"JAXBFindbug.zip"可能包含了一个示例项目,展示了如何在实际开发中应用JAXB,并...
【标题】"jaxws-api-2.1_jaxb-api-2.1.jar"涉及到的主要是Java中的Web服务技术,主要包括JAX-WS(Java API for XML Web ...开发者可以利用这些资源来学习和实践如何在Java环境中使用JAX-WS和JAXB来开发和运行Web服务。
通过以上知识点的学习和实践,Java开发者可以顺利地将购物网站与网上银行、支付宝等支付接口集成,为用户提供安全便捷的在线支付体验。在实际项目中,还可能涉及更多的细节,如支付接口的异步处理、并发控制、性能...
总之,"java天气预报通过数据接口获取"是一个涵盖了网络编程、数据接口调用和数据解析等多个技术点的实践课题,对于提升Java开发者在实际项目中的技能和经验非常有价值。通过这样的实践,开发者不仅能学到具体的编程...
通过分析和实践"jaxb-examples"项目中的示例,开发者不仅可以掌握JAXB的基本用法,还能了解到如何在实际项目中有效地利用JAXB处理XML数据。对于Java开发者来说,这是深入理解XML与Java对象间转换的一个宝贵资源。
Java Architecture for XML Binding (JAXB) 是一个Java技术,它允许在Java对象和XML文档之间进行无缝转换。...这个项目为你提供了实践平台,加深对JAXB规范的理解,以及如何利用Javadoc和教程资源进行自我学习。
总之,通过《通过Nachos的道路图》这份文档的学习,我们可以深入了解Nachos系统的各个层面,从硬件架构到操作系统核心功能,再到实际编程实践。这对于学习操作系统原理和开发技能都具有重要意义。
这个"java的学习笔记.zip"文件很可能是对Java编程的详细学习记录,包含了一些关键概念、语法、类库和最佳实践。 在Java学习笔记中,可能会涵盖以下几个主要部分: 1. **基础概念**:这部分会介绍Java的基础,包括...
CXF不仅仅局限于Java,还支持其他语言,如C#、Python等,通过JAXB、JAXP等技术实现跨语言交互。 1.3.3 代码生成 CXF提供了强大的代码生成工具,可以从WSDL文件自动生成服务端和客户端代码,极大地简化了开发流程。 ...
本书从编程技术、项目实践以及软件工程的角度出发,如果大家想学习基础语法部分,建立去下载别的书籍。当然这本书也讲解了语法,是从实战的角度讲解的。 目录回到顶部↑第1章 进驻爪哇岛——JAVA的基本语法. 1 1.1 ...