Java框架组件
XML、JSON解析,日志,测试,文档,注释
2015年7月24日
目标:将XML、JSON等交换格式与Java对象进行映射。类似Hibernate。
原理:使用不同的Driver,将XML/JSON信息提取/写入,根据映射配置与POJO转换。
方法:XStream
参考:http://x-stream.github.io/download.html
https://en.wikipedia.org/wiki/XStream
参考:http://x-stream.github.io/tutorial.html
需要将XStream,XPP3,XmlPull的支持。将jar要放入buildpath和webapp的lib中。
示例:
XStream xs=new XStream();
classGCJPoint{
public int status;
public String info;
public String locations;
}
默认的映射为类名(含包名)就是XML的节点名。
示例:
xs.alias("response",GCJPoint.class);
示例:
//pojo to xml
GCJPoint pt1=new GCJPoint();
pt1.status=1;
pt1.info="xx";
pt1.locations="x,y";
String strXML=xs.toXML(pt1);
示例
//xml to pojo
GCJPointpt2=(GCJPoint)xs.fromXML(strResponse);
System.out.println("fromXML=status:"+pt2.status+",info:"+pt2.info+",locations:"+pt2.locations);
参考:http://x-stream.github.io/json-tutorial.html
JsonHierarchicalStreamDriver只能将POJO转换为JSON。效率高,内置。
JettisonMappedXmlDriver可以双向转换。需要jettison-1.2.jar支持。
示例:
//json writer
XStream xsJson=new XStream(newJsonHierarchicalStreamDriver());
//json reader
XStream xsJson2=new XStream(new JettisonMappedXmlDriver());
同XML。
同XML。
String strJson=xsJson.toXML(pt2);
System.out.println("toJSON="+strJson);
StringstrMyJson="{\"response\": {\"status\":200,\"info\": \"ok2\",\"locations\":\"116.006363,40.000666\"}}";
GCJPoint pt3=(GCJPoint)xsJson2.fromXML(strMyJson);
classGCJPointTranslator{
public GCJPointTranslator(StringstrResponse) {
// TODO Auto-generated constructorstub
XStream xs=new XStream();
//map
xs.alias("response",GCJPoint.class);
//pojo to xml
GCJPoint pt1=new GCJPoint();
pt1.status=1;
pt1.info="xx";
pt1.locations="x,y";
String strXML=xs.toXML(pt1);
System.out.println("toXML="+strXML);
//xml to pojo
GCJPointpt2=(GCJPoint)xs.fromXML(strResponse);
System.out.println("fromXML=status:"+pt2.status+",info:"+pt2.info+",locations:"+pt2.locations);
//json writer
XStream xsJson=new XStream(newJsonHierarchicalStreamDriver());
xsJson.alias("response",GCJPoint.class);
String strJson=xsJson.toXML(pt2);
System.out.println("toJSON="+strJson);
//json reader
XStream xsJson2=new XStream(newJettisonMappedXmlDriver());
xsJson2.alias("response",GCJPoint.class);
String strMyJson="{\"response\":{\"status\": 200,\"info\":\"ok2\",\"locations\":\"116.006363,40.000666\"}}";
GCJPoint pt3=(GCJPoint)xsJson2.fromXML(strMyJson);
System.out.println("fromJSON=status:"+pt3.status+",info:"+pt3.info+",locations:"+pt3.locations);
}
}
classGCJPoint{
public int status;
public String info;
public String locations;
}
结果:
toXML=<response>
<status>1</status>
<info>xx</info>
<locations>x,y</locations>
</response>
fromXML=status:1,info:ok,locations:114.006377,38.000677
toJSON={"response":{
"status": 1,
"info": "ok",
"locations":"114.006377,38.000677"
}}
fromJSON=status:200,info:ok2,locations:116.006363,40.000666
目标:解析XML中所有元素及组织级别,读写XMLL。
原理:将XML按照树形结构映射。
方法:Dom4J树形DOM结构逐级操作。较XStream(推荐)底层。
参考:http://blog.csdn.net/chenghui0317/article/details/11486271
http://sourceforge.net/projects/dom4j/
参见:Java日志-Log4j2.docx
参见:Java日志-Slf4J.docx
参见:Java单元测试-JUnit.docx
目标:根据程序中的注释,自动生成源码对应的帮助文档。
原理:javadoc.exe自动处理源码中的特殊注释。
方法:规则注释+javadoc自动生成文档。
示例:
/**
* show 方法的简述.
* <p>show 方法的详细说明第一行<br>
* show 方法的详细说明第二行
* @param b true 表示显示,false 表示隐藏
* @return 没有返回值
*/
public void show(boolean b) {
frame.show(b);
}
可以使用HTML标签。
包括作者@author,版本号@version,引用@see,参数@param,返回值@return,异常@exception或@throws,JDK范围@since,废弃@deprecated。
参考:http://kelaocai.iteye.com/blog/227822
http://baike.baidu.com/link?url=wELgmIInoD-ql7c1ThToqclQi78YN0u_AyQGkK_AXAkhCrFx27r9ediDx6JbxtnW3nS81wP9z8iMk67A8O0zYa
格式:javadoc opts packagename src
详见javadoc说明。
将在当前文件夹下生成HTML文档。
示例:
package com.test;
importorg.apache.logging.log4j.LogManager;
importorg.apache.logging.log4j.Logger;
importorg.slf4j.LoggerFactory;
public class TestMain {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("Hello,print");
slf4jTest();
}
/**
* this is simple review.
* this is detail view.
* <p>3rd.
* <br>4th.
* @param a 1st argument
* @param b 2nd argument
* @return sum of a and b.
*/
public int sum(int a,int b){
return a+b;
}
public static void log(){
Logger logger=LogManager.getLogger();
logger.error("this is error");
logger.info("this is info.");
Logger myLogger=LogManager.getLogger("com.test.loggerxx");
myLogger.error("myLogger:this is error");
myLogger.info("myLogger:this is info.");
}
public static void slf4jTest(){
org.slf4j.Loggerlogger=LoggerFactory.getLogger("root");
logger.error("this is error");
logger.info("this is info.");
org.slf4j.LoggermyLogger=LoggerFactory.getLogger("com.test.loggerxx");
myLogger.error("myLogger:this is error");
myLogger.info("myLogger:this is info.");
}
}
参考:
http://zhidao.baidu.com/link?url=YXiX8TOfria0caUvzirb9rDPiHAx-ePQjLtFvqoWVIJxcTUi6lDDqMA_Ga6jXh3bqrvWcSJlMYQxWSwB68mYl_
目标:设置自动添加注释的模板。
方法:Eclipse注释模板。
参考:http://blog.sina.com.cn/s/blog_4080505a0101guoh.html
http://jingyan.baidu.com/article/a501d80c09dab1ec620f5e4b.html