文档章节

JAXB的CDATA节点处理

 海岸Thirty
发布于 2017/04/09 15:50
字数 605
阅读 63
收藏 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
博文 11
码字总数 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

没有更多内容

加载失败,请刷新页面

加载更多

下一页

阿里云API网关使用教程

API 网关(API Gateway)提供高性能、高可用的 API 托管服务,帮助用户对外开放其部署在 ECS、容器服务等阿里云产品上的应用,提供完整的 API 发布、管理、维护生命周期管理。用户只需进行简...

mcy0425
31分钟前
4
0
解决远程登陆误按ctrl+s锁屏假死恢复

使用putty时,偶尔发生屏幕假死,不能输入等情况。 后来发现,只要数据ctrl+s,就会假死;输入ctrl+q就可以恢复过来。 很多刚从windows转移到linux上来工作的朋友,在用vi/vim编辑文件时,常常...

HJCui
35分钟前
0
0
@Transactional

事务管理是应用系统开发中必不可少的一部分。Spring 为事务管理提供了丰富的功能支持。Spring 事务管理分为编程式和声明式的两种方式。编程式事务指的是通过编码方式实现事务;声明式事务基于...

asdf08442a
39分钟前
2
0
widows下强制解除8080端口占用问题

使用win+R打开命令窗口 输入以下命令查看哪个任务占用了8080端口 netstat -ano |findstr "8080" 然后通过任务id强制关闭占用该端口的进程 tskill 10044 // 自己的试情况而定,这个ID是LISTE...

_Artisan
48分钟前
2
0
productFlavors简单实用

最近项目中,不同环境需要配置的参数越来越多,为了减少修改代码次数。研究了一下productFlavors的使用方式,总结如下 1. as3.0以上版本使用productFlavors时需要指定一个flavorDimensions,...

火云
50分钟前
1
0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部