根据XML格式数据源生成Java代码是ArbitraryGen的一个基本能力,如果在没有任何的扩展情况下使用这个能力,并不是我们所推荐的。
下面我们先讲述下如何使用ArbitraryGen通过XML数据源生成Java代码。
ArbitraryGen参数配置
在ArbitraryGen的通用参数配置中配置XML格式文件的后缀名,如示例中配置了"xml","db","greendao", "event"四个后缀名。
arbitraryGen {
templateDir "${project.rootDir.getAbsolutePath()}/ArbitraryGen/template-libs"
srcDir "${project.projectDir.absolutePath}/ag-datasrc"
destDir "$buildDir/generated/source/ag-gen"
general {
enable true
// suffix list
format "xml","db","greendao", "event" // Use XML format parser.
}
}
ArbitraryGen将会扫描${project.projectDir.absolutePath}/ag-datasrc这个目录下,所有满足general.format中配置的后缀的文件,并交予ArbitraryGen的默认源数据Parser解析并由默认的Converter转换成Java代码。
编辑XML文件
import="java.lang.String,java.io.Serializable">
this.name = name;
name
XML文件中的根节点的package属性定义了这个文件中所有以及子节点生成出来的Java类的package,每一个一级子节点都对应着独立的Java文件,一个Java类。
描述Java类的节点
对于一个描述Java类相关信息的XML节点(如上示例中的一级节点),其属性包括name,parent,interface,import,static和final,这些都是和Java类(文件)中的各属性相对应的。(如果name属性没填,则使用节点名作为类名)
其子节点中的节点是用来声明其成员变量的,field标签里面包括name、type、default、static和final。
节点是用来描述类里面的方法定义的,其中属性包括name、type、static和final,其子节点中用于描述方法的参数定义(其属性包括name和type),子节点是方法体中的代码,子节点是return的代码。
除了上述的和之外的子节点,都被视为一个内部类的描述节点。
注:上述XML节点的属性值,如果是支持列表的(如import、interface等)都是通过“,”作为分隔符。
根据上面的规则生成的代码如下:
package cc.suitalk.arbitrarygen.demo.xmlparser;
import java.lang.String;
import java.io.Serializable;
public class XmlTest extends Object implements Serializable {
public String name = null;
public int type = 0;
public Data data = new Data();
public void TestMethod() {
}
public String getName(String name) {
this.name = name;;
return name;
}
public static final class Data {
public int errCode;
public int errType = 0;
}
}
看到这里是不是觉得用XML写Java代码不是自找苦吃吗?其实,这里只是提供了这个基本能力,ArbitraryGen的作用不在这里,他的意义是利用结构XML格式的数据源生成特定的稍微复杂一点的代码,如需深入了解,请移步自定义数据源格式Parser和Converter和自定义TemplateWrapper