文档章节

JAXB的CDATA节点处理

 海岸Thirty
发布于 2017/04/09 15:50
字数 605
阅读 100
收藏 0

JAXB的CDATA节点,参考了很多网上的博文,主要有:

1、通过@XmlJavaTypeAdapter,主要由于转义被省略了,放弃。

http://zhaoyx.iteye.com/blog/1856259

2、借助SunAPI版本编写XMLSerializer,这种蛮好的,但是我的Maven编译不下去

http://blog.csdn.net/wantken/article/details/50675549

     这位介绍了两种,第二种好长。。。。

3、似乎还有一种用XStream,先看了下性能比较就没尝试了(1C 1G的小水管伤不起)

http://www.cnblogs.com/tang9139/p/4825610.html

4、还有一种使用apache的OutputFormat,感觉不是很灵活,没去尝试

http://blog.csdn.net/u010648555/article/details/51681695

5、最后采用eclipselink的

第一步:修改pom.xml增加eclipselink依赖

看到最新的2.6.3了

<dependency>
	<groupId>org.eclipse.persistence</groupId>
	<artifactId>org.eclipse.persistence.moxy</artifactId>
	<version>2.6.3</version>
</dependency>

如果使用maven打包,build->resources节点要修改下,否则后面的jaxb.properties打不进去

<resources>
	<resource>
		<directory>src/main/java</directory>
		<includes>
            <!-- 不加这个java目录下的properties不会打进war包 -->
			<include>**/*.properties</include>
		</includes>
	</resource>
    <!-- 上面的改完后不加这个,resources目录下的内容打不进war包了,烦躁啊...我传了两个版本 -->
	<resource>
		<directory>src/main/resources</directory>
	</resource>
</resources>

第二步:在bean的同级目录增加jaxb.properties文件

 

 

 

 

文件内容:

javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory

 

第三步:增加@XmlCDATA注解咯

package pub.thirty.tbk.module.wx.domain.xml;

import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

import org.eclipse.persistence.oxm.annotations.XmlCDATA;



@XmlRootElement(name="xml")
// 这里不自动映射了,默认的映射会去找public,注解在field上就冲突了,要报错的哟
@XmlAccessorType(XmlAccessType.NONE)
public class WXMessage {
	
	@XmlElement(name="ToUserName")
	@XmlCDATA
	String toUserName;
	@XmlElement(name="Encrypt")
	@XmlCDATA
	String encrypt;
	@XmlElement(name="FromUserName")
	@XmlCDATA
	String fromUserName;
	@XmlElement(name="CreateTime")
	Long createTime;
	@XmlElement(name="MsgType")
	@XmlCDATA
	String msgType;
	@XmlElement(name="Content")
	@XmlCDATA
	String content;
	@XmlElement(name="MsgId")
	String msgId;
	// 返回签名
	@XmlElement(name="MsgSignature")
	@XmlCDATA
	String msgSignature;
	// 返回时间戳
	@XmlElement(name="TimeStamp")
	String timeStamp;
	@XmlElement(name="Nonce")
	String nonce;

    /*** getter and setter ***/
}

 

其他一些:

   省略掉xml头(有人说叫序言),就是<?xml version="1.0" encoding="UTF-8"?>这段咯

@Bean
public Jaxb2Marshaller jaxb2Marshaller(){
	Jaxb2Marshaller bean = new Jaxb2Marshaller();
	bean.setClassesToBeBound(
		WXMessage.class
	);
	Map<String,Object> props = new HashMap<>();
	props.put(Marshaller.JAXB_FORMATTED_OUTPUT, true);
	props.put(Marshaller.JAXB_FRAGMENT, true);
    //如果是Marshaller对象用下面的,我这里时丢给spring viewResolver的
	//bean.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
	bean.setMarshallerProperties(props);
	return bean;
}

 

效果:

<xml>
	<ToUserName><![CDATA[22222222]]></ToUserName>
	<FromUserName><![CDATA[1111111]]></FromUserName>
	<CreateTime>1491718078829</CreateTime>
	<MsgType><![CDATA[text]]></MsgType>
	<Content><![CDATA[您可以回复以下内容]]></Content>
</xml> 

 

PS:第一次写,感觉码云这个页面风格挺喜欢的。8错

 

© 著作权归作者所有

共有 人打赏支持
粉丝 3
博文 12
码字总数 4670
作品 0
浦东
高级程序员
jaxb序列化一些特殊节点的问题

这个是对象: @XmlAccessorType(XmlAccessType.FIELD)@XmlType(name = "", propOrder = { })@XmlRootElement(name = "SubmitXml")public class SubmitXml { } 现在我要把这个对象用jaxb序列化......

Carlos_Tse
2015/06/22
1K
2
JAXBContext返回生成XML

用java 生成XML 1,需要的包 2,XML中有 用回复微信消息做实例 检查XML实体类 为了生成CDATA需要一个jaxb.properties 文件 需要和需要生成的java类放在同一个目录javax.xml.bind.context.fact...

T_kress
2015/12/24
68
0
Jaxb无法直接通过JavaBean生成含有CDATA元素的XML

Jaxb无法直接生成含有CDATA元素的XML,试了很多方法,都不太理想,通过引入org.eclipse.persistence.oxm.annotations.XmlCDATA注解来解决不起作用,请问各位大神这要如何解决?...

蜡_小新
2016/08/05
652
1
javascript学习笔记:DOM节点概述

0x01: DOM是javascript操作网页的接口,全称为文档对象模型(Document Object Model)。它的作用是将网页转为一个javascript对象,从而可以使用javascript对网页进行各种操作(比如增删内容)。...

wt7315
06/26
0
0
python处理xml

python处理xml python xml 读取xml 获取dom对象 获取文档对象 节点属性 子节点的访问 文本节点 获取节点属性 小结:使用minidom来读取XML中的信息 编辑xml 生成dom对象 显示生成的xml内容 获...

hgfgoodcreate
2015/09/17
127
0

没有更多内容

加载失败,请刷新页面

加载更多

20181018 上课截图

![](https://oscimg.oschina.net/oscnet/49f66c08ab8c59a21a3b98889d961672f30.jpg) ![](https://oscimg.oschina.net/oscnet/a61bc2d618b403650dbd4bf68a671fabecb.jpg)......

小丑鱼00
17分钟前
0
0
WinDbg

参考来自:http://www.cnit.net.cn/?id=225 SRV*C:\Symbols*http://msdl.microsoft.com/download/symbols ctrl + d to open dump_file Microsoft (R) Windows Debugger Version 6.12.0002.633......

xueyuse0012
今天
2
0
OSChina 周五乱弹 —— 想不想把92年的萝莉退货

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @罗马的王:分享松澤由美的单曲《地球ぎ》 很久没看圣斗士星矢了 《地球ぎ》- 松澤由美 手机党少年们想听歌,请使劲儿戳(这里) @开源中国首...

小小编辑
今天
14
2
springBoot条件配置

本篇介绍下,如何通过springboot的条件配置,控制Bean的创建 介绍下开发环境 JDK版本1.8 springboot版本是1.5.2 开发工具为 intellij idea(2018.2) 开发环境为 15款MacBook Pro 前言 很多时候,...

贺小五
今天
1
0
javascript source map 的使用

之前发现VS.NET会为压缩的js文添加一个与文件名同名的.map文件,一直没有搞懂他是用来做什么的,直接删除掉运行时浏览器又会报错,后来google了一直才真正搞懂了这个小小的map文件背后的巨大...

粒子数反转
昨天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部