- 浏览: 115595 次
- 性别:
- 来自: 广州
文章分类
最新评论
-
ron.luo:
干货,必须得顶。
JAXB使用经验总结 -
csdn_zuoqiang:
能否看下DWR的配置情况?谢谢
结合webservice实现dwr推送 -
友友水:
。。。。不好意思,无心之失,删不掉前一条评论
JAXB使用经验总结 -
友友水:
[/flash][/flash][/flash]</td ...
JAXB使用经验总结 -
lihong11:
大哥,加加注释好不?看不懂唉
小玩dwr实现服务器推送
使用JAXB首先要知道它是干什么的
当然,切入正题
很多时候我们需要把认知世界转化为我们熟悉的java对象,以供方便操作。这里,JAXB可以把xml对象转化为我们的java对象,也可以把java对象转化为xml对象。这时候我们就得知道它的两个转化方法。
一个是unmarshal(),一个是marshal()
unmarshal()是把xml对象转化为我们需要的java对象的方法,自然marshal()是把java对象转化为xml对象的一个过程。
我们需要的估计就是这两个方法的精华,只需要用到这么多就可以完成很多的事情了。下面看代码:
这里templateFile 和 template 都是xml文件对象,这样的两个overload method就可以完成由xml对象转化为java对象了。
marshal()方法也贡献上。
方法都具备了 可以开工了。
工具方法都上齐了,你就可以在你需要的地方调用了。当然,我还没讲我们的java操作对象。
下面举个例子,比如上面出现的chart 就是我们需要操纵的对象,它可能是一个xml对象,而我们需要操作的是java对象,晕了吧:
比如我们的chart是在页面需要显示的图形,比如fusioncharts 的某个图,先定义为chart,它会是一个接口类,是所有xxxChart的父类。 比如我的具体chart名叫GaugeChart。
代码如下,别说晕说郁闷了:
上面那一堆的注解来自jaxb的jar包,下哪些包我就不说了。估计应该能看懂个所以然吧,那些属性都是这个gaugeChart所需要的图形显示属性,不必去细究,它需要什么,我们按上面添加就是了,不过貌似没有get()方法,不需要这个。里面注解的像这样的@XmlElement(name = "annotationGroup") ,这个annotationGroup也是像GaugeChart这样的java对象,需要被定义。
接下来我们可以在action中调用了。
这样的一个方法返回的就是一个xml的string型对象了,我们只需要在页面拿到这个string型的xml ,就可以通过fusioncharts(当然是我这里用了fusioncharts)来调用它并显示相应的图形了。
当然,切入正题
很多时候我们需要把认知世界转化为我们熟悉的java对象,以供方便操作。这里,JAXB可以把xml对象转化为我们的java对象,也可以把java对象转化为xml对象。这时候我们就得知道它的两个转化方法。
一个是unmarshal(),一个是marshal()
unmarshal()是把xml对象转化为我们需要的java对象的方法,自然marshal()是把java对象转化为xml对象的一个过程。
我们需要的估计就是这两个方法的精华,只需要用到这么多就可以完成很多的事情了。下面看代码:
private static <T> T unmarshal(File templateFile, JAXBContext context) throws JAXBException { final Unmarshaller unmarshaller = context.createUnmarshaller(); // Unmarshal the XML in the stringWriter back into an object final T chart = (T) unmarshaller.unmarshal(templateFile); return chart; } @SuppressWarnings("unchecked") private static <T> T unmarshal(String template, JAXBContext context) throws JAXBException { final Unmarshaller unmarshaller = context.createUnmarshaller(); // Unmarshal the XML in the stringWriter back into an object final T chart = (T) unmarshaller.unmarshal(new StringReader(template)); return chart; }
这里templateFile 和 template 都是xml文件对象,这样的两个overload method就可以完成由xml对象转化为java对象了。
private static <T> String marshal(JAXBContext context, final T chart) throws JAXBException { // Create the marshaller, this is the nifty little thing that will // actually transform the object into XML final Marshaller marshaller = context.createMarshaller(); // Create a stringWriter to hold the XML final StringWriter stringWriter = new StringWriter(); // Marshal the javaObject and write the XML to the stringWriter marshaller.marshal(chart, stringWriter); String chartXml = stringWriter.toString(); return chartXml; }
marshal()方法也贡献上。
方法都具备了 可以开工了。
public static <T> String process(File templateFile, Class<T> type, ChartFiller<T> filler) { String chartXml = null; try { JAXBContext context = JAXBContext.newInstance(type); final T chart = (T) unmarshal(templateFile, context); filler.fill(chart); chartXml = marshal(context, chart); } catch (JAXBException e) { log.error(e.getMessage(), e); } return chartXml; } public static <T> String process(String template, Class<T> type, ChartFiller<T> filler) { String chartXml = null; try { JAXBContext context = JAXBContext.newInstance(type); final T chart = (T) unmarshal(template, context); filler.fill(chart); chartXml = marshal(context, chart); } catch (JAXBException e) { log.error(e.getMessage(), e); } return chartXml; } public interface ChartFiller<T> { void fill(T chart); }
工具方法都上齐了,你就可以在你需要的地方调用了。当然,我还没讲我们的java操作对象。
下面举个例子,比如上面出现的chart 就是我们需要操纵的对象,它可能是一个xml对象,而我们需要操作的是java对象,晕了吧:
比如我们的chart是在页面需要显示的图形,比如fusioncharts 的某个图,先定义为chart,它会是一个接口类,是所有xxxChart的父类。 比如我的具体chart名叫GaugeChart。
代码如下,别说晕说郁闷了:
public interface Chart { }
@XmlRootElement(name = "chart") public class GaugeChart implements Chart { @XmlAttribute private String lowerLimit; @XmlAttribute private String upperLimit; @XmlAttribute private String lowerLimitDisplay; @XmlAttribute private String upperLimitDisplay; @XmlAttribute private String majorTMNumber; @XmlAttribute private String majorTMColor; @XmlAttribute private String majorTMHeight; @XmlAttribute private String minorTMNumber; @XmlAttribute private String minorTMColor; @XmlAttribute private String minorTMHeight; @XmlAttribute private String displayValueDistance; @XmlAttribute private String tickValueDistance; @XmlAttribute private String gaugeStartAngle; @XmlAttribute private String gaugeEndAngle; @XmlAttribute private String palette; @XmlAttribute private String showValue; @XmlAttribute private String numberSuffix; @XmlElementWrapper(name = "colorRange") @XmlElement(name = "color") private List<Color> colors; @XmlElementWrapper(name = "dials") @XmlElement(name = "dial") private List<Dial> dials; @XmlElementWrapper(name = "annotations") @XmlElement(name = "annotationGroup") private List<AnnotationGroup> annotations; public void addAnnotationGroup(AnnotationGroup annotationGroup) { if (annotations == null) annotations = new LinkedList<AnnotationGroup>(); this.annotations.add(annotationGroup); } public void addDials(Dial dial) { if (dials == null) dials = new LinkedList<Dial>(); this.dials.add(dial); } public void setAnnotations(List<AnnotationGroup> annotations) { this.annotations = annotations; } public void setDials(List<Dial> dials) { this.dials = dials; } public void setColors(List<Color> colors) { this.colors = colors; } public void addColor(Color color) { if (color == null) colors = new LinkedList<Color>(); this.colors.add(color); } public void setLowerLimit(String lowerLimit) { this.lowerLimit = lowerLimit; } public void setUpperLimit(String upperLimit) { this.upperLimit = upperLimit; } public void setLowerLimitDisplay(String lowerLimitDisplay) { this.lowerLimitDisplay = lowerLimitDisplay; } public void setUpperLimitDisplay(String upperLimitDisplay) { this.upperLimitDisplay = upperLimitDisplay; } public void setMajorTMNumber(String majorTMNumber) { this.majorTMNumber = majorTMNumber; } public void setMajorTMColor(String majorTMColor) { this.majorTMColor = majorTMColor; } public void setMajorTMHeight(String majorTMHeight) { this.majorTMHeight = majorTMHeight; } public void setMinorTMNumber(String minorTMNumber) { this.minorTMNumber = minorTMNumber; } public void setMinorTMColor(String minorTMColor) { this.minorTMColor = minorTMColor; } public void setMinorTMHeight(String minorTMHeight) { this.minorTMHeight = minorTMHeight; } public void setDisplayValueDistance(String displayValueDistance) { this.displayValueDistance = displayValueDistance; } public void setTickValueDistance(String tickValueDistance) { this.tickValueDistance = tickValueDistance; } public void setGaugeStartAngle(String gaugeStartAngle) { this.gaugeStartAngle = gaugeStartAngle; } public void setGaugeEndAngle(String gaugeEndAngle) { this.gaugeEndAngle = gaugeEndAngle; } public void setPalette(String palette) { this.palette = palette; } public void setShowValue(String showValue) { this.showValue = showValue; } public void setNumberSuffix(String numberSuffix) { this.numberSuffix = numberSuffix; } @Override public String toString() { return ToStringBuilder.reflectionToString(this); } }
上面那一堆的注解来自jaxb的jar包,下哪些包我就不说了。估计应该能看懂个所以然吧,那些属性都是这个gaugeChart所需要的图形显示属性,不必去细究,它需要什么,我们按上面添加就是了,不过貌似没有get()方法,不需要这个。里面注解的像这样的@XmlElement(name = "annotationGroup") ,这个annotationGroup也是像GaugeChart这样的java对象,需要被定义。
接下来我们可以在action中调用了。
private String getXxxXml() { String template = getTemplate(); String chartXml = JAXBUtils.process(template, GaugeChart.class, new JAXBUtils.ChartFiller<GaugeChart>() { public void fill(final GaugeChart chart) { Dial dial1 = new Dial(); dial1.setValue(""); dial1.setRearExtension("10"); chart.addDials(dial1); } }); return chartXml; }
这样的一个方法返回的就是一个xml的string型对象了,我们只需要在页面拿到这个string型的xml ,就可以通过fusioncharts(当然是我这里用了fusioncharts)来调用它并显示相应的图形了。
评论
3 楼
ron.luo
2014-12-31
干货,必须得顶。
2 楼
友友水
2013-06-08
。。。。不好意思,无心之失,删不掉前一条评论
1 楼
友友水
2013-06-08
[/flash][/flash][/flash][/flash][/flash][/flash][/flash][/flash][/flash][/flash][/flash][/flash][/flash][/flash][/flash][/flash][/flash][/flash][/flash]
发表评论
-
http简易工具类
2018-09-21 09:20 456http简易工具类, 方便http调用 -
微信JSSDK之添加微信卡券
2016-05-31 09:37 780微信卡券的使用,是在之前的微信jsapi基础上,再加上一次卡券 ... -
hibernate延迟加载 与 web应用 独立缓存架构的冲突
2013-04-26 11:03 1136延迟加载(Lazy Loading)是 ... -
jquery验证框架使用
2013-03-27 16:57 13251.使用jquery的表单验证框架,需要导入jquery的库文 ... -
结合webservice实现dwr推送
2012-08-22 13:26 5323情景: 客户端需要实时提醒服务,比如某个日程已过期的提醒, ... -
copy到粘贴板
2012-05-22 11:39 1184直接上代码,实现了IE和火狐下的copy content ... -
webService使用总结
2012-04-28 15:08 1272webService 是什么就不解释了,webservice有 ... -
小玩dwr实现服务器推送
2012-01-19 17:01 5607最近项目有需要用到‘推’,就是服务器端自动把消息推给客户端,就 ... -
jquery之事件error小提醒
2011-12-13 15:27 1418今天用到jquery的事件中的error方法,发现当标签img ... -
小想法
2011-10-17 16:48 0刚才有个想法,不知道是由什么联想而来,最近淘宝大战,看了些文章 ... -
原来这个如此容易 ---- 点击弹出确认框
2011-10-12 15:51 1302今天无意识的看到了点击按钮弹出确认框的 javascri ... -
groovy 小应用
2011-09-30 10:25 1184昨天使用groovy脚本生成大量的sql,实在是爽! 现 ... -
Jquery资料链接(供学习)
2011-08-08 17:16 697提供些资料链接,以备查找 http://jquery.com ... -
dwr使用小结
2011-08-05 15:32 1119很久没上来冒泡了 ,把dwr的使用经验搁上来,以后备用。 ... -
实践中filter的配置
2011-04-26 09:23 896配置一个权限filter,拦截一切没有登录却想访问只有登录后才 ... -
JSTL问题解决之-->报找不到C标签
2011-03-30 13:51 3087当jsp页面显示报找不到C:标签时的解决办法 在li ... -
jsp之自定义标签
2011-03-29 11:09 886http://javakeith.iteye.com/blog ... -
jsp之session对象
2011-03-29 11:06 880http://javakeith.iteye.com/blo ... -
jsp内置对象
2011-03-29 11:04 1007感谢兄弟的总结 http://javakeith.iteye. ... -
JSTL自定义标签过程
2011-03-29 10:39 7313要定义自己的标签,首先写个java类,extends TagS ...
相关推荐
"jaxb使用文档.doc"是作者根据个人经验和测试结果编写的说明文档,它详细解释了JAXB 2.0的关键概念、使用方法和注意事项,是学习和掌握JAXB的重要参考资料。文档中可能包括了如何创建和使用绑定文件,如何处理XML...
Web服务在IT行业中扮演着重要的角色,允许不同的系统和应用程序之间进行通信和数据交换。CXF是一个流行的开源框架...无论是对于新手还是有经验的开发者,都能从中获益,掌握如何在Java环境中高效地构建和使用Web服务。
本书内容非常全面,涵盖了多册J2EE书籍所有知识要点,并结合作者自己经验总结而编写,内容相当丰富 众所周知,一般书籍为了销售需要,往往很少的知识点,却需要添加大量的废话、例子,以增加书本厚度,使得阅读者...
例如,使用Java的JAXB(Java Architecture for XML Binding)框架可以将Java对象直接转换为XML,反之亦然,大大简化了数据交换的过程。 总结来说,XML是数据交换的通用格式,HTML是构建网页的基石,而Java作为后端...
在Java面试中,面试官经常考察候选人的基础知识、问题解决能力和实际编程经验。本篇将重点讨论如何使用Java解析XML文档,这是一个常见的面试题。 XML(eXtensible Markup Language)是一种用于标记数据的语言,常...
- **第三方对象工厂**:支持使用XMLBeans、JAXB等第三方框架来创建对象实例。 - **监听Dozer事件**:可以通过注册监听器来监控Dozer执行过程中的各种事件。 **2.9 PDF文档** Dozer提供了详细的PDF文档供用户参考,...
- **JAXB**: 使用Java Architecture for XML Binding(JAXB)进行XML到Java对象的转换。 ### 总结 Apache Axis2是一个强大的Web服务框架,其API提供了高度的灵活性和可扩展性。通过深入理解Axis2的API和充分利用...
《深入理解DOM4J:基于2.1.0版本》 DOM4J是Java社区中广泛使用的XML处理库,它的全称是“Document Object Model for ...无论是新手还是经验丰富的开发者,都可以从中找到合适的工具和方法,实现高效、精准的XML操作。
本书不仅是一份开发指南,更是一个实践经验的总结。虽然没有涵盖XFire的所有方面,但对于开发者来说,本书所提供的信息足以帮助他们快速上手并深入理解XFire的核心概念和技术细节。对于那些想要深入了解XFire特性和...
Java 2 库类查询工具是一款专为Java开发者设计的小巧型软件,它提供了一个高效且便捷的方式来查找和理解Java库中的类和方法。...无论你是初学者还是经验丰富的开发者,都应该尝试使用这款工具,让开发过程更加顺畅。
6. **设计模式**: 设计模式是软件开发中的经验总结,例如工厂模式、单例模式、观察者模式、装饰者模式等。在实际工作中,可能会遇到工厂模式用于创建对象,单例模式保证类只有一个实例,观察者模式实现发布/订阅,...
- 支持JAXB(Java Architecture for XML Binding),可以将feed对象序列化为XML,反之亦然。 5. **Rome与XML解析** - Rome库底层使用了JDOM和StAX等XML解析技术,但对开发者隐藏了这些细节,提供了一致的API。 -...
**Java EE(J2EE)API文档** Java EE(以前称为J2EE)是Java平台上用于构建企业级分布式应用程序的...无论是初学者还是经验丰富的开发人员,都应该熟悉并经常查阅这些文档,以保持对Java EE最新特性和最佳实践的了解。
- **数据绑定**:CXF支持JAXB(Java Architecture for XML Binding)和Aegis绑定,用于对象到XML和XML到对象的转换。 - **MTOM/XOP**:CXF支持Binary Attachments for XML(MTOM)和XML Inline Binary Data(XOP)...
### JAX-WS 教程:服务器端与客户端详解 #### 概览 JAX-WS(Java API for XML Web Services)是Java平台标准的一部分,用于开发和...无论是对于初学者还是有经验的开发者而言,JAX-WS 都是一个值得学习和使用的API。