`

jaxb接口学习实践

    博客分类:
  • XML
阅读更多
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 (XML操作)

    **JAXB(Java Architecture for XML Binding)** 是Java平台中用于处理XML的...通过深入学习和实践,你可以充分利用JAXB的强大功能,提升XML操作的效率和便捷性。在Java项目中,掌握JAXB技术将对处理XML数据大有裨益。

    最新JAXB解析XML教程

    **JAXB(Java Architecture for XML Binding)**是Java平台上的一个标准API,它允许开发者将XML文档和Java对象之间进行...通过深入学习和实践,你将能够熟练运用JAXB进行XML的解析和编码,提高项目开发的效率和质量。

    JAXB 学习笔记

    **JAXB(Java Architecture for XML Binding)学习笔记** JAXB是Java平台标准版(Java SE)的一部分,它提供了一种方便的方式来将XML数据绑定到Java对象上,以及将Java对象转换为XML数据。这个强大的工具使得开发...

    通过JAXB实现完成java对象和xml的互相转换

    通过实践和学习,开发者可以充分利用JAXB的潜力,提高XML处理的效率和可维护性。在提供的压缩包文件`JAXB_tests`中,可能包含了一些示例代码和测试用例,这将有助于更深入地理解JAXB的工作机制和用法。

    JAXB资料集.rar

    总的来说,这份"JAXB资料集.rar"是一份全面学习JAXB的资源,包含了理论指导、实践示例和问题解决,适合对JAXB感兴趣的开发者进行深入学习。通过阅读和实践其中的内容,可以有效提升对XML数据处理的能力,并在实际...

    axis部署WebServices 和 JAXB的使用

    在IT行业中,Web服务是一种广泛使用的通信协议,它允许不同系统之间通过互联网交换数据。Axis是Apache软件基金会开发的一个开放源代码SOAP(简单对象访问协议)堆栈...不断学习和实践,你将在Web服务领域变得更加专业。

    《Jaxb2 转换XML文档》学习笔记

    **JAXB2 转换XML文档** JAXB(Java Architecture for XML Binding)是Java平台标准版(Java SE)的一部分,用于将Java对象绑定到XML文档,并...通过实践`jaxb2-demo`项目,可以进一步巩固这些概念并提升实际操作能力。

    数据绑定之JAXB

    通过深入学习和实践以上知识点,开发者可以熟练地运用JAXB进行数据绑定,无论是在简单的数据交换,还是在复杂的业务场景中,都能发挥出JAXB的强大功能。对于“atf-TRUNK”这个文件名,可能是指一个软件项目的主分支...

    jaxb资料及实例,里面还包含了其他资料地址3

    此外,通过实践提供的实例代码,可以加深对JAXB工作原理的理解,提升实际编程技能。 总之,这个压缩包对于想要学习和提升JAXB技能的Java开发者来说是一个宝贵的资源,它可能涵盖了从基础概念到高级应用的各种教程和...

    发布webService服务接口与spring整合教程

    在提供的压缩包文件“webService服务接口方案”中,可能包含了具体的代码示例、配置文件和其他参考资料,这些都可以帮助你更好地理解和实践上述步骤。记得根据自己的项目需求进行适当的修改和调整。同时,参考其他...

    使用JAXB(用于XML绑定的Java API)解决现实世界问题的7个步骤

    "7-steps-to-solve-real-world-problem-using-JAXB-Java.pdf"这个文件可能包含了详细的示例和解释,可以作为学习JAXB的宝贵资源。而"JAXBFindbug.zip"可能包含了一个示例项目,展示了如何在实际开发中应用JAXB,并...

    jaxws-api-2.1_jaxb-api-2.1.jar

    【标题】"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天气预报通过数据接口获取

    总之,"java天气预报通过数据接口获取"是一个涵盖了网络编程、数据接口调用和数据解析等多个技术点的实践课题,对于提升Java开发者在实际项目中的技能和经验非常有价值。通过这样的实践,开发者不仅能学到具体的编程...

    jaxb-examples

    通过分析和实践"jaxb-examples"项目中的示例,开发者不仅可以掌握JAXB的基本用法,还能了解到如何在实际项目中有效地利用JAXB处理XML数据。对于Java开发者来说,这是深入理解XML与Java对象间转换的一个宝贵资源。

    jaxb-example

    Java Architecture for XML Binding (JAXB) 是一个Java技术,它允许在Java对象和XML文档之间进行无缝转换。...这个项目为你提供了实践平台,加深对JAXB规范的理解,以及如何利用Javadoc和教程资源进行自我学习。

    a road map through nachos

    总之,通过《通过Nachos的道路图》这份文档的学习,我们可以深入了解Nachos系统的各个层面,从硬件架构到操作系统核心功能,再到实际编程实践。这对于学习操作系统原理和开发技能都具有重要意义。

    java的学习笔记.zip

    这个"java的学习笔记.zip"文件很可能是对Java编程的详细学习记录,包含了一些关键概念、语法、类库和最佳实践。 在Java学习笔记中,可能会涵盖以下几个主要部分: 1. **基础概念**:这部分会介绍Java的基础,包括...

    Apache_cxf_学习笔记

    CXF不仅仅局限于Java,还支持其他语言,如C#、Python等,通过JAXB、JAXP等技术实现跨语言交互。 1.3.3 代码生成 CXF提供了强大的代码生成工具,可以从WSDL文件自动生成服务端和客户端代码,极大地简化了开发流程。 ...

    Java SE实践教程 源代码 下载

    本书从编程技术、项目实践以及软件工程的角度出发,如果大家想学习基础语法部分,建立去下载别的书籍。当然这本书也讲解了语法,是从实战的角度讲解的。 目录回到顶部↑第1章 进驻爪哇岛——JAVA的基本语法. 1 1.1 ...

Global site tag (gtag.js) - Google Analytics