文档章节

JAXB的CDATA节点处理

 海岸Thirty
发布于 2017/04/09 15:50
字数 605
阅读 339
收藏 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
浦东
高级程序员
私信 提问
加载中

评论(0)

jaxb序列化一些特殊节点的问题

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

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

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

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

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

JavaJar
2016/08/05
1.1K
1
XML学习记录1-复习SAX,DOM和JAXB

  对xml文档的解析常见的有JDK中的sax,dom,jaxb,stax和JAVA类库JDOM和DOM4J,下面先说说前三个。   Java中解析XML的工具很多,像JDOM,DOM4J等,但Java标准库提供的两种解析XML文档解析器...

osc_sj1kgo4z
2018/04/22
8
0
DOM4J -(XML解析包)

DOM4J - 简介 是dom4j.org出品的一个开源XML解析包。Dom4j是一个易用的、开源的库,用于XML,XPath和XSLT。它应用于Java平台,采用了Java集合框架并完全支持DOM,SAX和JAXP。 DOM4J 使用起来...

osc_ibhs3ho3
2019/10/16
4
0

没有更多内容

加载失败,请刷新页面

加载更多

Kubernetes Ingress简单入门

本文转载自Rancher Labs 不知道你是否注意到一个奇怪的现象,尽管Kubernetes Ingress API仍然处于beta状态,但是已经有许多公司使用它来暴露Kubernetes服务。从事相关项目的工程师表示,Kub...

osc_slfjdpj6
11分钟前
8
0
ACCDB MDB Explorer for mac(数据库查看器)

想要更加直观的查看大数据,小编推荐使用mac数据查看工具ACCDB MDB Explorer Mac版,该软件能够将导入的数据库导出为XML,XLS,CSV和TXT格式的文件简便高效请添加链接描述,功能强大,需要的...

osc_63i522q0
13分钟前
0
0
二 javanio中的Channel transfer 内容

java nio中channel操作 分散 将channel中读取的数据分散写入多个buffer中 聚集 将多个buffer写入数据到同一个channel 应用 将消息头和消息体放入到不同buffer,便于分类处理应用 将消息头和消...

writeademo
13分钟前
26
0
如何更好的盘活和用好数据资产,企业如何构建数据竞争力的关键在这里!

在今年4月公布的《中共中央国务院关于构建更加完善的要素市场化配置体系机制的意见》中,“数据”首次作为一种新型生产要素写入中央文件中,与土地、劳动力、资本、技术等传统要素并列成为要...

osc_5asswvor
14分钟前
9
0
如何更好的盘活和用好数据资产,企业如何构建数据竞争力的关键在这里!

在今年4月公布的《中共中央国务院关于构建更加完善的要素市场化配置体系机制的意见》中,“数据”首次作为一种新型生产要素写入中央文件中,与土地、劳动力、资本、技术等传统要素并列成为要...

osc_e7clsgkf
15分钟前
12
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部