1. 环境
jdk1.6
2. 代码
public class XmlException extends RuntimeException {
private static final long serialVersionUID = 1L;
public XmlException(String message){
super(message);
}
public XmlException(String message, Throwable cause){
super(message, cause);
}
}
import org.xml.sax.ErrorHandler;
import org.xml.sax.SAXException;
import org.xml.sax.SAXParseException;
public class ForgivingErrorHandler implements ErrorHandler {
public void error(SAXParseException exception) throws SAXException {
System.out.println(exception.getMessage());
}
public void fatalError(SAXParseException exception) throws SAXException {
System.out.println(exception.getMessage());
}
public void warning(SAXParseException exception) throws SAXException {
System.out.println(exception.getMessage());
}
}
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.io.StringReader;
import javax.xml.XMLConstants;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import javax.xml.transform.Source;
import javax.xml.transform.stream.StreamSource;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import javax.xml.validation.Validator;
public class Jaxb {
public static <T extends Object> T parseFromString(Class<T> clazz, String xmlStr)throws XmlException{
return parse(clazz, new StringReader(xmlStr));
}
public static <T extends Object> T parse(Class<T> clazz, final String xmlFile)throws XmlException{
return parse(clazz, xmlFile, false);
}
public static <T extends Object> T parse(Class<T> clazz, final String xmlFile, final boolean isValidate)throws XmlException{
File f = new File(xmlFile);
if(!f.exists()){
return null;
}
if(isValidate && !validator(f)){
throw new XmlException("文件"+xmlFile+"验证失败");
}
T obj = null;
try {
obj = parse(clazz, new FileReader(f));
} catch (Exception e) {
throw new XmlException(e.getMessage(), e);
}
return obj;
}
public static <T extends Object> T parse(Class<T> clazz, InputStream is)throws XmlException{
return parse(clazz, is, "UTF-8");
}
public static <T extends Object> T parse(Class<T> clazz, InputStream is, final String encoding)throws XmlException{
T obj = null;
try {
obj = parse(clazz, new InputStreamReader(is, encoding));
is.close();
} catch (Exception e) {
throw new XmlException(e.getMessage(), e);
}
return obj;
}
public static <T extends Object> T parse(Class<T> clazz, Reader reader)throws XmlException{
T obj = null;
try {
JAXBContext context = JAXBContext.newInstance(clazz);
Unmarshaller um = context.createUnmarshaller();
obj = (T)um.unmarshal(reader);
reader.close();
} catch (Exception e) {
throw new XmlException(e.getMessage(), e);
}
return obj;
}
/**
* 验证文档是否有效
* @param f File
* @return
*/
public static boolean validator(final File f){
//加载一个模式工厂
SchemaFactory schemaFactory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
try {
//编译源文件中的模式
Schema schema = schemaFactory.newSchema();
//用编译后的模式创建一个验证程序
Validator validator = schema.newValidator();
validator.setErrorHandler(new ForgivingErrorHandler());
//为需要验证的文档创建Source对象。StreamSource通常最简单
Source source = new StreamSource(f);
//验证输入的源文档。如果文档无效,则抛出SAXException.否则什么也不显示
validator.validate(source);
} catch (Exception e) {
e.printStackTrace();
return false;
}
return true;
}
public static void write(Object obj , final String xmlFile)throws XmlException{
File f = new File(xmlFile);
try {
if(!f.exists()){
f.createNewFile();
}
JAXBContext context = JAXBContext.newInstance(obj.getClass());
Marshaller m = context.createMarshaller();
m.setProperty(Marshaller.JAXB_ENCODING, "UTF-8"); //指定已编组 XML 数据中的输出编码,默认为UTF-8
m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); //使用换行和缩排对已编组 XML 数据进行格式化,默认为false
FileWriter fw = new FileWriter(f);
m.marshal(obj, fw);
fw.close();
} catch (Exception e) {
throw new XmlException(e.getMessage(), e);
}
}
}
3. 使用的XSD文件books.xsd
<?xml version="1.0" encoding="UTF-8"?>
<!-- edited with XMLSpy v2008 (http://www.altova.com) by yuan (EMBRACE) -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="ENTER_NAME_OF_ROOT_ELEMENT_HERE">
<xs:annotation>
<xs:documentation>Comment describing your root element</xs:documentation>
</xs:annotation>
</xs:element>
<xs:element name="book">
<xs:complexType>
<xs:sequence>
<xs:element name="id" type="xs:string"/>
<xs:element name="name" type="xs:string"/>
<xs:element name="price" type="xs:int"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:element name="books">
<xs:complexType>
<xs:sequence>
<xs:element ref="book" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
4. 使用的xml文件books.xml
<?xml version="1.0"?>
<books>
<book>
<id>1</id>
<name>test</name>
<price>10</price>
</book>
</books>
5. 用法
1>根据schema生成java类
xjc -p test books.xsd
Book.java
Books.java
ObjectFactory.java
2>解析
Books books = Jaxb.parse(Books.class, "d:/test/books.xml");
for(Book book : books.getBook()){
System.out.println(book.getName() + ", " + book.getPrice());
}
分享到:
相关推荐
8. **XML处理**:如DOM和SAX解析器,以及JAXB绑定。 9. **JavaMail**:发送和接收电子邮件的API。 10. **Java加密**:提供密码学服务,如加密、解密、数字签名和哈希算法。 通过深入学习这份“java核心类库使用大全...
6. **XPath和XML处理**:JDK 1.6改进了XML处理,包括JAXB(Java Architecture for XML Binding)和JAXP(Java API for XML Processing),使得XML数据绑定和解析更加方便。 7. **增强的安全性**:1.6版本加强了Java...
1. **java.xml**:这部分源码涉及到Java的XML处理,包括解析、操作和生成XML文档的API,如DOM、SAX和JAXB。它涵盖了Java标准版中的XML支持,使开发者能够使用Java处理XML数据。 2. **jdk.management.agent**:这...
【标题】"JDK1.6缺省文件"指的是Java Development Kit 1.6版本的默认组件和库文件,这些文件通常包含在JDK的zip压缩包中,无需经过安装过程即可使用。JDK是Java编程语言的核心工具集,包含了编译器、解释器、调试器...
- 加强了XML处理,包括SAX和DOM解析器的性能提升,以及JAXB的增强。 - 引入了新的并发工具类,如ConcurrentHashMap和Fork/Join框架,帮助开发者编写更高效的多线程代码。 除此之外,JDK1.6还对垃圾收集机制进行了...
最后,"Java2_类库"还包含了许多其他的模块,如XML处理(DOM、SAX、JAXB)、国际化(I18N)、日志框架(java.util.logging)、定时任务(java.util.Timer)等。这些都极大地丰富了Java的开发环境,提高了开发效率。 ...
例如,JDK自带的`javax.xml.parsers.DocumentBuilderFactory`和`org.w3c.dom.Document`可用于构建和操作DOM树。 2. SAX解析: SAX解析器不将整个文档加载到内存,而是通过事件处理器接口(如`ContentHandler`)...
8. **Java XML处理**:包括SAX、DOM和JAXB等,用于解析、生成和操作XML文档。 三、JDK 1.6的新特性 1. **改进的泛型**:引入了类型推断,使泛型的使用更加简洁。 2. **增强的枚举**:添加了枚举实例的比较、遍历...
8. **XML支持**:增强了对XML的处理,包括SAX和DOM解析器,以及JAXB(Java Architecture for XML Binding),允许将Java对象和XML文档之间进行映射。 9. **网络编程**:引入了`SocketChannel`和`...
5. **XML处理**:JAXB(Java Architecture for XML Binding)和StAX(Streaming API for XML)得到增强,使XML处理更加便捷。 6. **NIO.2**:引入了新的文件系统API,提供了异步I/O操作和路径处理,增强了非阻塞I/O...
6. **XML处理**:JAXB 2.0提供了更方便的数据绑定,而StAX(Streaming API for XML)则提供了低级别的XML解析能力。 7. **改进的日志和诊断**:JDK 1.6提供了更强大的日志框架和JConsole等诊断工具,帮助开发者监控...
同时,JAXB(Java Architecture for XML Binding)允许开发者将Java对象直接转换为XML,反之亦然,极大地提高了XML处理的效率。 六、国际化 Java的国际化支持在6u30版本中进一步完善,包括日期时间格式化、数字和...
8. **XML处理**:JAXB 2.0和StAX API的引入,让XML的序列化和解析更为简单,提高了XML处理的灵活性。 9. **内存分析工具**:JDK 1.6提供了一些内存分析工具,如jmap、jhat等,帮助开发者诊断和解决内存泄漏问题。 ...
JDK 1.8 API包含多个核心模块,如基础类库、集合框架、I/O流、网络编程、多线程、反射、注解、XML处理等。这些模块为各种功能提供了基础支持: - **基础类库**:包括基本数据类型、异常处理、字符串操作、日期和...
6. XML处理:StAX API的集成使得处理XML文档更加高效,同时DOM4J和JAXB也进行了升级。 7. 安全性加强:JDK 1.6提升了加密算法和安全策略,增加了对数字签名和SSL/TLS协议的支持。 二、JDK 1.6的安装 1. 下载:你...
此外,JDK 6还引入了新的API和类库,例如NIO.2(New I/O API),提供了一套基于通道(Channel)和选择器(Selector)的异步I/O操作,这在处理大量并发连接时非常有用。 针对开发者工具,JDK 6中的JConsole提供了...
8. **JAXB 2.0**:Java Architecture for XML Binding的升级版,简化了XML和Java对象之间的绑定,提高了XML数据的处理效率。 9. **JDBC 4.0**:更新了Java Database Connectivity接口,增加了自动连接管理和新的SQL...
4. **改进的XML处理**:Java API for XML Processing (JAXP) 和Java Architecture for XML Binding (JAXB) 在1.6中得到升级,支持更高效的XML解析和转换。 5. **增强的安全性**:JDK 1.6增强了安全管理器,提供了更...
6. **XML处理改进**:JAXB 2.0引入了更强大的XML绑定功能,StAX(Streaming API for XML)提供了一种新的流式处理XML的方式。 7. **Scripting API**:JDK 6.0引入了JSR 223脚本引擎接口,允许在Java中嵌入和执行...
`JAXB 2.0`提供了XML到Java对象的自动绑定,简化了Web服务的开发。 5. **JDBC 4.0**:JDBC API在JDK 6中升级到了4.0版本,引入了自动连接管理、结果集的滚动和分页以及批处理更新等功能,提升了数据库访问的效率和...