文档章节

JAXB的CDATA节点处理

 海岸Thirty
发布于 2017/04/09 15:50
字数 605
阅读 122
收藏 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序列化一些特殊节点的问题

这个是对象: 现在我要把这个对象用jaxb序列化为: 请问对象里的注解还需要怎么改才能实现出Filter这个节点的这种效果? 另外 这种好像也不能直接序列化出来?老是把尖括号转码……...

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注解来解决不起作用,请问各位大神这要如何解决?...

JavaJar
2016/08/05
806
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

没有更多内容

加载失败,请刷新页面

加载更多

数字3为分隔

http://www.fly63.com/article/detial/221

西园里的猫
14分钟前
2
0
文本处理工具 grep awk sed完全解读

文本处理工具 grep awk sed完全解读 正则表达式单字符 1特定字符 : 某个具体的字符 'a' 2范围内字符 : [a-zA-Z] 3任意字符 : . // grep . file // 如果点放到中括号中[.] 或者用反斜杠'\.' ...

BakerZhu
14分钟前
2
0
Centos 7 JDK、Tomcat9 安装并配置

Centos 7 JDK、Tomcat9 安装并配置 我是一座离岛 关注 2017.04.10 08:16* 字数 699 阅读 3442评论 0喜欢 1 一、JDK 安装 1.安装wget yum -y install wget 2.下载,输入指令 wget --no-chec...

linjin200
20分钟前
1
0
Spring boot遇到的问题

2018年12月11日 Ver:2.0.2升级到2.1.1文件上传遇到问题 The method setMaxFileSize(String) from the type MultipartConfigFactory is deprecated 是不是就不用设置了?...

夏碌冬藏
29分钟前
1
0
Spark sql操作Hive

这里说的是最简便的方法,通过Spark sql直接操作hive。前提是hive-site.xml等配置文件已经在Spark集群配置好。 val logger = LoggerFactory.getLogger(SevsSpark4.getClass) def main(args:...

守望者之父
29分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部