- 浏览: 744019 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
nmgrd:
赞一个,在分析AQS源码的博客当中,楼主是写的最细致,最易懂, ...
java并发编程--AbstractQueuedSynchronizer公平锁和非公平锁分析(三) -
ljzxloaf:
阻塞和等待不一样吧,condition持有等待队列,而AQS持 ...
java并发编程--AbstractQueuedSynchronizer加锁和解锁分析(二) -
DaCang4535:
楼主,不知道你那个book类有什么作用。setBook那个方法 ...
JAXB--简单应用(一) -
yuhui0531:
f-u-c-k!!!!!!!!!!!!!!!!!!!!!!!! ...
java线程常见的几种死锁模式和解决方法 -
刘文超:
form提交的几种方法
当java对象的某个属性使用泛型时,普通对象都没问题,但是遇到HashSet这种集合类封装的元素时,就会出现元素内容序列化不出来的问题,详见如下:
一、示例:
第一步:定义java对象
package step3; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlRootElement; @XmlRootElement @XmlAccessorType(value = XmlAccessType.PROPERTY) public class Customer<T> { String name; int age; int id; T t; public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public int getId() { return id; } public void setId(int id) { this.id = id; } @Override public String toString() { return "Customer [id=" + id + ",name=" + name + ",age=" + age + ",t=" + t + "]"; } public T getT() { return t; } public void setT(T t) { this.t = t; } }
package step3; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; @XmlAccessorType(value = XmlAccessType.PROPERTY) public class Book { private String id; private String name; private float price; public String getId() { return id; } public void setId(String id) { this.id = id; } public String getName() { return name; } public void setName(String name) { this.name = name; } public float getPrice() { return price; } public void setPrice(float price) { this.price = price; } @Override public String toString() { return "Book [id=" + id + ",name=" + name + ",price=" + price + "]"; } }
第二步:编组(JAXBContext.newInstance(Customer.class,HashSet.class);方法添加了
HashSet的class对象,以提供给JAXBContext使用。)
package step3; import java.io.File; import java.util.HashSet; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Marshaller; //Marshaller public class Object2XmlDemo { public static void main(String[] args) { Customer<HashSet<Book>> customer = new Customer<HashSet<Book>>(); customer.setId(100); customer.setName("suo"); customer.setAge(29); Book book = new Book(); book.setId("1"); book.setName("哈里波特"); book.setPrice(100); Book book2 = new Book(); book2.setId("2"); book2.setName("苹果"); book2.setPrice(50); HashSet<Book> bookSet = new HashSet<Book>(); bookSet.add(book); bookSet.add(book2); customer.setT(bookSet); try { File file = new File("C:\\file1.xml"); JAXBContext jaxbContext = JAXBContext.newInstance(Customer.class, HashSet.class); Marshaller jaxbMarshaller = jaxbContext.createMarshaller(); // output pretty printed jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); jaxbMarshaller.marshal(customer, file); jaxbMarshaller.marshal(customer, System.out); } catch (JAXBException e) { e.printStackTrace(); } } }
得到的xml:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <customer> <age>29</age> <id>100</id> <name>suo</name> <t xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="hashSet"/> </customer>
注:
1.泛型使用集合元素替代时,泛型属性所对应的xml没有序列化出来。
2.若JAXBContext.newInstance(Customer.class,HashSet.class);不添加HashSet
的class对象,则报错:
[javax.xml.bind.JAXBException: class java.util.HashSet nor any of its super class is known to this context.]
解决办法:
第一步:新增HashSet的包装类
Book类和Customer类相关代码均不需要改变,新增一个HashSet的包装类,定义如下:
package step4; import java.util.HashSet; import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlElementWrapper; public class BookSet { private HashSet<Book> bookSet = new HashSet<Book>(); //仅包含get方法,未包含set方法 @XmlElementWrapper(name = "bookSet")//该注解非必须,仅是标注集合元素 @XmlElement(name="book") public HashSet<Book> getBookSet() { return bookSet; } public void addBook(Book book){ bookSet.add(book); } }
注:
1.BookSet类内部使用HashSet实现.
2.BookSet类在get方法上添加了@XmlElementWrapper(name = "bookSet")注解。
第二步:编组
package step4; import java.io.File; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Marshaller; //Marshaller public class Object2XmlDemo { public static void main(String[] args) { Customer<BookSet> customer = new Customer<BookSet>(); customer.setId(100); customer.setName("suo"); customer.setAge(29); Book book = new Book(); book.setId("1"); book.setName("哈里波特"); book.setPrice(100); Book book2 = new Book(); book2.setId("2"); book2.setName("苹果"); book2.setPrice(50); BookSet bookSet = new BookSet(); bookSet.addBook(book); bookSet.addBook(book2); customer.setT(bookSet); try { File file = new File("C:\\file1.xml"); JAXBContext jaxbContext = JAXBContext.newInstance(Customer.class, BookSet.class); Marshaller jaxbMarshaller = jaxbContext.createMarshaller(); // output pretty printed jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true); jaxbMarshaller.marshal(customer, file); jaxbMarshaller.marshal(customer, System.out); } catch (JAXBException e) { e.printStackTrace(); } } }
注:
1.定义Customer对象时,使用包装类,即:
Customer<BookSet> customer = new Customer<BookSet>();
2.JAXBContext调用newInstance()方法时,传入BookSet的class对象,告知BookSet的类型,即:JAXBContext.newInstance(Customer.class,BookSet.class);
得到的xml:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <customer> <age>29</age> <id>100</id> <name>suo</name> <t xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="bookSet"> <bookSet> <book> <id>2</id> <name>苹果</name> <price>50.0</price> </book> <book> <id>1</id> <name>哈里波特</name> <price>100.0</price> </book> </bookSet> </t> </customer>
发表评论
-
thread方法分析
2012-02-02 13:36 0t.join();表示当前线程停止执行直到t线程运行完毕 ... -
线程池--jetty中QueuedThreadPool分析(一)
2012-02-02 11:09 15687jetty版本:jetty-6.1.26 1.由于jetty ... -
线程池--jetty中QueuedThreadPool分析(一)
2012-02-02 10:48 0d -
java并发编程--ThreadLocal的用法和分析
2012-01-11 22:55 17700ThreadLocal这个类,理解起来比较简单,但是使用时, ... -
java并发编程--Semaphore信号量分析(七)
2012-01-08 22:25 0Mutex是一把钥匙,一个人拿了就可进入一个房间,出来的时候把 ... -
java并发编程--AbstractQueuedSynchronizer的tryLock()方法分析(六)
2012-01-05 14:40 2345tryLock()仅尝试一次获取锁,不管成功与否,都将返回结 ... -
java并发编程--AbstractQueuedSynchronizer的lock()和lockInterruptibly()方法分析(五)
2011-12-31 11:19 5866lock 与 lockInterruptibly比较区别 ... -
java并发编程--AbstractQueuedSynchronizer条件锁分析(四)
2011-12-30 17:10 2290前一篇J.U.C的 ... -
java并发编程--AbstractQueuedSynchronizer公平锁和非公平锁分析(三)
2011-12-30 14:40 3939juc包中,aqs实现的公平锁和非公平锁的最主要的区别是:非 ... -
java并发编程--AbstractQueuedSynchronizer加锁和解锁分析(二)
2011-12-29 22:07 8613在java.util.concurrent.locks ... -
JAXB--@XmlType注解标注xml生成顺序(四)
2011-11-03 17:01 34446默认情况下,Jaxb编组出来的xml中的字段顺序是随机的,你可 ... -
JAXB--@XmlElementWrapper注解(二)
2011-11-03 15:49 32503在JAXB标准中,@XmlElementWrapper注解表示 ... -
JAXB--简单应用(一)
2011-11-03 15:09 50477一、简介 1、概念是什么:(Java Archite ... -
Java线程:新特征-锁
2011-10-28 17:39 0在Java5中,专门提供了锁对象,利用锁可以方便的实现资源的 ... -
java线程常见的几种死锁模式和解决方法
2011-10-18 23:09 2239待续 -
利用object.wait()和实现生产者和消费者模式
2011-10-18 23:08 2608其实生产者和消费者模式概念很简单,就是生产者将生产出来 ... -
java线程的同步互斥和通讯
2011-10-18 23:01 3655一、同步和锁定 1、锁的原理 Ja ... -
HtmlParser学习笔记(四)-- 使用Filter过滤结点
2010-01-12 12:48 11274使用TagNameFilter过滤所有table标签结 ... -
HtmlParser学习笔记(三)-- 使用Visitor访问结点
2010-01-12 12:48 5442使用NodeVisitor方式访问html结点,代码如 ... -
HtmlParser学习笔记(二)-- 遍历结点
2010-01-12 12:47 4374这次主要演示下,如何迭代一个Node结点的所有根子结点。 ...
相关推荐
标题中的"jaxb-impl-2.3.0、jaxb-core-2.3.0、jaxb-api-2.3.0"是JAXB的不同组件版本号,它们在处理XML到Java对象之间的转换时起到关键作用。在描述中提到的“Maven项目中缺少jaxb-api的异常报错”,通常指的是在运行...
在使用这两个库文件时,通常需要同时包含`jaxb-api.jar`和`jaxb-impl.jar`,因为API库提供了接口定义,而实现库提供了具体的实现。有时候,为了完整支持JAXB功能,可能还需要其他相关库,如`activation.jar`...
赠送jar包:jaxb-api-2.3.1.jar; 赠送原API文档:jaxb-api-2.3.1-javadoc.jar; 赠送源代码:jaxb-api-2.3.1-sources.jar; 赠送Maven依赖信息文件:jaxb-api-2.3.1.pom; 包含翻译后的API文档:jaxb-api-2.3.1-...
赠送jar包:jaxb-runtime-2.3.5.jar; 赠送原API文档:jaxb-runtime-2.3.5-javadoc.jar; 赠送源代码:jaxb-runtime-2.3.5-sources.jar; 赠送Maven依赖信息文件:jaxb-runtime-2.3.5.pom; 包含翻译后的API文档:...
赠送jar包:jaxb-runtime-2.3.5.jar; 赠送原API文档:jaxb-runtime-2.3.5-javadoc.jar; 赠送源代码:jaxb-runtime-2.3.5-sources.jar; 赠送Maven依赖信息文件:jaxb-runtime-2.3.5.pom; 包含翻译后的API文档:...
1. **jaxb-api.jar**:这是JAXB2的主要API接口定义,包含了所有的注解和接口,如`@XmlRootElement`、`@XmlElement`等,以及用于转换的核心类,如`Unmarshaller`和`Marshaller`。这个jar文件提供了与XML绑定的基本...
赠送jar包:jackson-module-jaxb-annotations-2.7.8.jar; 赠送原API文档:jackson-module-jaxb-annotations-2.7.8-javadoc.jar; 赠送源代码:jackson-module-jaxb-annotations-2.7.8-sources.jar; 赠送Maven依赖...
这个实现库通常与`jaxb-api.jar`一起使用,因为后者包含了JAXB的API定义,但不包含具体实现。 `jaxb-api.jar`则包含了JAXB的公共API,这是开发人员在编写JAXB应用程序时需要导入的库。它定义了如`javax.xml.bind....
它通常与jaxb-api.jar一起使用,以提供完整的JAXB功能。 5. **jaxb-xjc.jar**:这个库包含了XJC工具,它是JAXB编译器,可以将XML Schema转换为对应的Java源代码。通过XJC,开发者可以直接从XML Schema生成Java类,...
**冲突解决** 当使用CXF框架并遇到与JDK 6内置JAXB库的冲突时,可以通过引入外部的`jaxb-api.jar`和`jaxws-api.jar`来解决。这两个jar文件提供了与CXF兼容的JAXB和JAX-WS实现,避免了与系统默认库的冲突。 **...
赠送jar包:jaxb-svg11-1.0.2.jar; 赠送原API文档:jaxb-svg11-1.0.2-javadoc.jar; 赠送源代码:jaxb-svg11-1.0.2-sources.jar; 赠送Maven依赖信息文件:jaxb-svg11-1.0.2.pom; 包含翻译后的API文档:jaxb-svg11...
有关Maven项目中缺少jaxb-api的异常报错解决,jaxb-core-2.3.0.jar
赠送jar包:jackson-module-jaxb-annotations-2.2.3.jar; 赠送原API文档:jackson-module-jaxb-annotations-2.2.3-javadoc.jar; 赠送源代码:jackson-module-jaxb-annotations-2.2.3-sources.jar; 赠送Maven依赖...
在使用`jaxb-api-2.1.13.jar`和`jaxb-impl-2.1.13.jar`时,需要注意它们是针对JAXB 2.1版本的。随着JAXB的发展,新的版本可能会添加更多的特性,修复已知问题,因此在选择版本时应确保与项目的其他依赖兼容。同时,...
赠送jar包:jaxb-core-2.2.10-b140310.1920.jar; 赠送原API文档:jaxb-core-2.2.10-b140310.1920-javadoc.jar; 赠送源代码:jaxb-core-2.2.10-b140310.1920-sources.jar; 赠送Maven依赖信息文件:jaxb-core-...
赠送jar包:jaxb-impl-2.2.10-b140310.1920.jar; 赠送原API文档:jaxb-impl-2.2.10-b140310.1920-javadoc.jar; 赠送源代码:jaxb-impl-2.2.10-b140310.1920-sources.jar; 赠送Maven依赖信息文件:jaxb-impl-...
在使用webservice,mule esb等需要jaxb的项目里经常会出现 JAXB 2.0 API is being loaded from the bootstrap classloader这个错误,按照打出的信息Use the endorsed directory mechanism to place jaxb-api.jar in ...
赠送jar包:jersey-media-jaxb-2.22.2.jar; 赠送原API文档:jersey-media-jaxb-2.22.2-javadoc.jar; 赠送源代码:jersey-media-jaxb-2.22.2-sources.jar; 赠送Maven依赖信息文件:jersey-media-jaxb-2.22.2.pom;...
有关Maven项目中缺少jaxb-api的异常报错解决,jaxb-impl-2.3.0.jar
了解并熟练掌握JAXB和JAX-WS的使用,对于任何Java开发者来说都是至关重要的,特别是那些涉及Web服务和XML数据交换的项目。这些技术不仅简化了开发流程,还提高了代码的可维护性和可扩展性。通过合理利用这些库,...