xstream,节点属性起别名时这样的问题你遇到过吗

首先这是我自己定义的一个xstream,这个xstream是为了在处理xml时能够加上<![CDATA[------]]>而特别重写的。这个xstream是没有任何问题的。


	private static XStream xstream = new XStream(new XppDriver() {public HierarchicalStreamWriter createWriter(Writer out) {return new PrettyPrintWriter(out) {boolean cdata = true;@SuppressWarnings("rawtypes")public void startNode(String name, Class clazz) {super.startNode(name, clazz);}protected void writeText(QuickWriter writer, String text) {if (cdata) {writer.write("<![CDATA[");writer.write(text);writer.write("]]>");} else {writer.write(text);}}};}});

然后是我们要转换为xml文件的类,这里我实现了一个basemessage,用来包含所有消息都包含着的通用属性字段。然后实现了一个textmessage来专门处理文本消息,textmessage是集成了basemessage的。代码如下;


public class BaseMessage {private String ToUserName;private String FromUserName;private long CreateTime;private String MsgType;public String getToUserName() {return ToUserName;}public void setToUserName(String toUserName) {ToUserName = toUserName;}public String getFromUserName() {return FromUserName;}public void setFromUserName(String fromUserName) {FromUserName = fromUserName;}public long getCreateTime() {return CreateTime;}public void setCreateTime(long createTime) {CreateTime = createTime;}public String getMsgType() {return MsgType;}public void setMsgType(String msgType) {MsgType = msgType;}}

public class TextMessage extends BaseMessage {private String Content;public String getContent() {return Content;}public void setContent(String content) {this.Content = content;}}

然后用xstream做如下的测试:

	public static void main(String[] args) throws Exception {TextMessage message = new TextMessage();message.setFromUserName("1");message.setToUserName("2");message.setCreateTime(System.currentTimeMillis());message.setMsgType("art");message.setContent("133");xstream.alias("xml", message.getClass());// 这里指定TextMessage中的ToUserName变为属性xstream.useAttributeFor(TextMessage.class, "ToUserName");// 指定TextMessage中的Content变为属性,别名为c_cxstream.aliasAttribute(TextMessage.class, "Content", "c_c");// 指定TextMessage中的MsgType变为属性,别名为mtypexstream.aliasAttribute(TextMessage.class, "MsgType", "mtype");// 指定BaseMessage中的FromUserName变为属性,别名为ffxstream.aliasAttribute(BaseMessage.class, "FromUserName", "ff");String result = xstream.toXML(message);System.out.println(result);// StringReader readers = new StringReader(result);// InputSource inputSource = new InputSource(readers);// SAXReader reader = new SAXReader();// Document document = null;// document = reader.read(inputSource);// Map<String, String> map = new HashMap<String, String>();// Element root = document.getRootElement();// System.out.println(root.attributeValue("ff"));// List<Element> elements = root.elements();// for (Element e : elements) {// System.out.println(e.getName() + "------" + e.getText() + "---");// }}


运行程序后得到结果如下:

<xml ToUserName="2" ff="1" MsgType="art" c__c="133"><CreateTime><![CDATA[1447310176809]]></CreateTime>
</xml>

分析结果,我们可以看到如下的现象:1.指定TextMessage中的ToUserName变为属性是成功的。2.指定TextMessage中的Content变为属性,别名为c_c是成功的,而// 指定TextMessage中的MsgType变为属性,别名为mtype则只做到了将MsgType变成了属性,却没有起别名。3.指定BaseMessage中的FromUserName变为属性,别名为ff是成功的。

通过上边这些现象,我是不是可以这样理解?一个类从另一个类中集成了某些属性的时候,通过这个类来为继承的属性器别名是不行的,而通过基类为这个继承的属性来起别名就可以。然而如果不起别名,那么可以通过useAttributeFor来将继承的字段指定为xml文件的属性呢?实际测试是这样的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/569289.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

20190624 Oracle 表分析

dbms_stats.gather_table_stats&#xff08;。。。&#xff09; 参数要注意 正常情况只是为了分析表&#xff0c;也可以通过方法创建记录表 分析的结果会记录的记录表中&#xff0c;当然每次运行会有覆盖&#xff0c;主要分析后的结果。 分析表&#xff0c;记录了目前此表的情况…

用spring搭建微信公众号开发者模式下服务器处理用户消息的加密传输构架(java)

要搭建加密传输的微信公众号消息传输&#xff0c;首先要在开发这平台下载一下微信加密的相关jar包&#xff0c;并做一些准备。准备的步骤如下&#xff1a; 1.打开开发者文档&#xff0c;找到消息加减密--->接入指引&#xff0c;如下图所示&#xff1a; 2.在页面底部找到实例…

Redis 常用命令

1 运行cmd 到redis安装目录&#xff0c;cmd输入redis-cli.exe -h 127.0.0.1 -p 6379 2 密码登录 auth 输入密码 3 设置和获取 set "hello" get "hello" 4 清空 flushall转载于:https://www.cnblogs.com/hanjun0612/p/11078915.html

Spring中AOP的使用

问题&#xff1a;什么是AOP&#xff1f; 答&#xff1a;AOP基本概念&#xff1a;Aspect-Oriented Programming&#xff0c;面向方面编程的简称&#xff0c;Aspect是一种新的模块化机制&#xff0c;用来描述分散在对象、类或方法中的横切关注点(crosscutting concern)&#xff…

Mybatis generator(复制粘贴完成)

命令行模式 1、java -jar mybatis-generator-core-x.x.x.jar -configfile generatorConfig.xml 2、Maven plugin(mybatis-generator-maven-plugin) 常用 2.1、mvn mybatis-generator:generate 2.2、${basedir}/src/main/resources/generatorConfig.xml 默认读取这个文件&#x…

mybatis自己学习的一些总结

以前一直在使用spring的JDBCTEMPLATE和hibernate做项目&#xff1b;两个都还不错&#xff0c;spring的jdbctemplate用起来比较麻烦&#xff0c;虽然很简单。而hibernate呢&#xff0c;用起来很好用&#xff0c;很方便&#xff0c;但是很多规矩&#xff0c;规则还有方法到现在都…

利用python模拟菜刀反弹shell绕过限制

有的时候我们在获取到目标电脑时候如果对方电脑又python 编译环境时可以利用python 反弹shell 主要用到python os库和sokect库 这里的服务端在目标机上运行 from socket import * from os import * ssocket(AF_INET,SOCK_STREAM)#IVP4 寻址 tcp协议 s.bind((,6666))#补丁端口 …

SpringBoot配置logback-spring.xml日志

SpringBoot配置logback-spring.xml日志 https://blog.csdn.net/qq_35618489/article/details/87709409 在SpringBoot新建 logback-spring.xml 配置文件&#xff0c;因为SPringBoot官方是推荐这个方式 内容&#xff0c;拷贝复制下来就可以了 <?xml version"1.0" e…

SSL的TCP通信

一切尽在代码中&#xff0c;额&#xff0c;自己测试的小例子&#xff0c;感觉很有用&#xff0c;做个记录。 服务器端&#xff1a; </pre><pre name"code" class"java">package com.mpc.test.clazz;import java.io.BufferedReader; import ja…

Java-ArrayList使用技巧---从第一个List中去除所有第二个List中与之重复的元素

需求&#xff1a;从 mAllList 中去除所有 mSubList 中与之重复的元素 测试数据&#xff1a;mAllList 中包含100000个无序无重复字符串&#xff0c;mSubList 中包含50000个无序无重复字符串 方法一、ArrayList中提供的removeAll方法&#xff08;效率最低&#xff09; mAllList.r…

JAVA对时间的几个处理小方法

获得两天之间相差的天数。 private static int daysBetween(Date date1, Date date2) {Calendar cal Calendar.getInstance();cal.setTime(date1);long time1 cal.getTimeInMillis();cal.setTime(date2);long time2 cal.getTimeInMillis();long between_days (time2 - time…

java反射的使用概览

额&#xff0c;研究过这个的人很多很多&#xff0c;但是我没有很深入的研究过&#xff0c;所以谁也拦不住我去研究研究&#xff0c;然后记录下来如有雷同那就雷同了请多多包涵。 首先是整个项目的结构&#xff1a; 使用到的类&#xff1a; package reflect.demo;public class D…

moodle3.7中文语言包

Moodle官方有中文语言包&#xff0c;但是还有没有翻译的&#xff0c;为了提高用户体验&#xff0c;可以将部分未翻译的应用在Moodle网站管理中自己修改。 具体步骤&#xff1a; 先确定需要修改的关键字&#xff0c;也就是网站中没有翻译成中文的文字在centos中定位到moodle网站…

如何在视图中启用thymeleaf

在HTML标签中引入一个属性 1 <html xmlns:th"http://www.thymeleaf.org"> 转载于:https://www.cnblogs.com/q2546/p/11093852.html

pushlet单播与多播

最近要弄一个消息推送的功能&#xff0c;在网上找了很多的关于pushlet的文章&#xff0c;虽然写的都很详细&#xff0c;但是本人看了以后却总觉得是模棱两可不知道如何下手&#xff0c;最终参考了这些文章中的一些内容&#xff0c;并结合官网的源代码&#xff0c;做了自己的修改…

两个小程序大概的了解一下java的线程

一、java的notify与wait package org.calonlan.soulpower;public class MyThreadTest implements Runnable {private String name;private Object prev;private Object self;public MyThreadTest(String name, Object prev, Object self) {super();this.name name;this.prev …

HttpContext HttpRuntime

问题引出 HttpContext.Current.Cache .VS. HttpRuntime.Cache HttpRuntime.Cache&#xff1a;获取当前应用程序的CacheHttpContext.Current.Cache&#xff1a;为当前HTTP请求获取Cache对象&#xff0c;跨线程可用&#xff0c;在APM模式或创建了子线程的场景中不能用HttpContext…

sudo apt-get常用命令

一、卸载 1. sudo apt-get autoclean 如果你的硬盘空间不大的话&#xff0c;可以定期运行这个程序&#xff0c;将已经删除了的软件包的.deb安装文件从硬盘中删除掉。如果你仍然需要硬盘空间的话&#xff0c;可以试试apt-get clean&#xff0c;这会把你已安装的软件包的安装包也…

Spring项目中使用webservice实现h5的websocket通信

一、在项目中建立一个webservice来做后台操作。 package org.calonlan.soulpower.websocket;import java.text.SimpleDateFormat; import java.util.Date;import javax.websocket.OnClose; import javax.websocket.OnError; import javax.websocket.OnMessage; import javax.we…

c++简单桶排序

c简单桶排序 题目一样&#xff0c;还是排序 桶排序是排序算法里比较快的 代码 注释 #include <bits/stdc.h> using namespace std; int main() {int b[100];//b[]的大小是你排的数字的最大值 1 int n;int k;memset(b,0,sizeof(b));//把b[]数组清零 cin >> n;for…