最近写接口平台,根据xml写对应的类,大量重复代码,粘贴复制,简单学习了javapoet,写了个生成代码的小玩意儿,宗旨是减少重复代码占据你学习的时间
详细文档方法移步官方Github,几乎覆盖所有场景 https://github.com/square/javapoet
xml解析
首先根据 xml 解析出对应的类,这里做的是 忽略报文头,行解析,每一行都被人作为一个对象的属性
package com.ticup.business.generate.create;
import java.io.BufferedReader;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
/**
* xml 解析类
*
* @author chenhao
* @version 1.0.0
* @since 1.0.0
*
* Created at 2019-11-06 10:47
*/
public class XmlParser {
public Map<String, List<JavaFieldModel>> parser(String xml, String className)
throws IOException, ClassNotFoundException {
Map<String, List<JavaFieldModel>> result = new HashMap<>();
List<JavaFieldModel> list = new ArrayList<>();
List<JavaFieldModel> listModel;
boolean inRequest = false;
boolean inList = false;
boolean endList = false;
String startListName = null;
StringBuilder listSb = new StringBuilder();
// 忽略报文头
BufferedReader bfr = new BufferedReader(
new InputStreamReader(new ByteArrayInputStream(xml.getBytes())));
String s;
while ((s = bfr.readLine()) != null && !s.equals("")) {
s = s.trim();
// 忽略报文头
if (s.equals("<request>")) {
inRequest = true;
continue;
}
if (s.equals("</request>")) {
inRequest = false;
}
// 逐行解析报文体
// 没有结尾标签,代表开始一个列表了
if (inRequest && !s.contains("</") && !inList) {
inList = true;
startListName = s.substring(1, s.length() - 1);
}
// 解析 list 列表
if (inList && inRequest) {
listSb.append(s + "\n");
}
// 列表结束
if (startListName != null && !startListName.equals("") && s.contains("</" + startListName)) {
inList = false;
endList = true;
}
if (endList == true) {
// 调用 列表解析
listModel = parserList(listSb.toString(), startListName);
result.put(startListName, listModel);
endList = false;
listSb = new StringBuilder();
startListName = null;
continue;
}
// 解析一般属性
if (inRequest && !inList) {
JavaFieldModel model = parserLine(s);
list.add(model);
}
}
result.put(className, list);
return result;
}
// 解析list
private List<JavaFieldModel> parserList(String toString, String listName)
throws IOException, ClassNotFoundException {
List<JavaFieldModel> list = new ArrayList<>();
BufferedReader bfr = new BufferedReader(
new InputStreamReader(new ByteArrayInputStream(toString.getBytes())));
bfr.readLine();
String s;
while ((s = bfr.readLine()) != null && !s.equals("")) {
if (s.contains("Row") || s.contains(listName)) {
continue;
}
JavaFieldModel model = parserLine(s);
list.add(model);
}
return list;
}
// 行解析
public JavaFieldModel parserLine(String line) throws ClassNotFoundException {
JavaFieldModel model = new JavaFieldModel();
line = line.trim();
// 去掉行首尖括号
String source = line.substring(1);
// 截取字段名
int i = source.indexOf(">");
String name = source.substring(1, i);
model.setName(name);
// 截取注释
int begin = source.indexOf(">");
int end = source.indexOf("</");
String comment = source.substring(begin + 1, end);
model.setComment(comment);
// 截取特殊字段类型
int typeIndex = source.lastIndexOf(">");
String type = source.substring(typeIndex + 1);
if (!type.equals("")) {
model.setClazz(Class.forName(type));
} else {
model.setClazz(String.class);
}
return model;
}
}
package com.ticup.business.generate.create;
/**
* 每一行xml 对应的属性
*
* @author chenhao
* @version 1.0.0
* @since 1.0.0
*
* Created at 2019-11-06 10:46
*/
public class JavaFieldModel {
// 属性名称
private String name;
// 属性类型
private Class<?> clazz;
// 属性注释
private String comment;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Class<?> getClazz() {
return clazz;
}
public void setClazz(Class<?> clazz) {
this.clazz = clazz;
}
public String getComment() {
return comment;
}
public void setComment(String comment) {
this.comment = comment;
}
@Override
public String toString() {
return "JavaFieldModel{" +
"name='" + name + '\'' +
", clazz=" + clazz +
", comment='" + comment + '\'' +
'}';
}
}
生成java类
然后 根据 xml 解析出来的数据进行 java类生成
package com.ticup.business.generate.create;
import com.squareup.javapoet.FieldSpec;
import com.squareup.javapoet.MethodSpec;
import java.util.ArrayList;
import java.util.List;
import javax.lang.model.element.Modifier;
/**
* java生成
*
* @author chenhao
* @version 1.0.0
* @since 1.0.0
*
* Created at 2019-11-06 10:47
*/
public class JavaGenerate {
/**
* 根据 字段集合 构造所有的 私有字段.
*
* @param javaFieldModels xml解析出来的字段集合
* @return 构造好的字段
*/
public List<FieldSpec> generateField(List<JavaFieldModel> javaFieldModels) {
FieldSpec fieldSpec;
List<FieldSpec> result = new ArrayList<>();
for (JavaFieldModel model : javaFieldModels) {
// 构建类型
fieldSpec = FieldSpec.builder(model.getClazz(), model.getName(), Modifier.PRIVATE)
.addJavadoc(model.getComment() + ".\n")
.build();
result.add(fieldSpec);
}
return result;
}
/**
* 根据字段生成 get set 方法.
*
* @param fieldSpecList 字段
* @return 生成的方法合集
*/
public List<MethodSpec> generateGetSetMethod(List<FieldSpec> fieldSpecList) {
List<MethodSpec> result = new ArrayList<>();
MethodSpec methodSpec;
for (FieldSpec fieldSpec : fieldSpecList) {
String name = GenerateUtil.upper(fieldSpec.name);
methodSpec = MethodSpec.methodBuilder("get" + name)
.addModifiers(Modifier.PUBLIC)
.returns(fieldSpec.type)
.addStatement("return " + fieldSpec.name)
.build();
result.add(methodSpec);
methodSpec = MethodSpec.methodBuilder("set" + name)
.addModifiers(Modifier.PUBLIC)
.addParameter(fieldSpec.type, fieldSpec.name)
.addStatement("this." + fieldSpec.name + "=" + fieldSpec.name)
.build();
result.add(methodSpec);
}
return result;
}
/**
* 根据字段生成 toString 方法
*
* @param fieldSpecList 字段集合
* @return 返回toString 方法
*/
public MethodSpec generateToString(List<FieldSpec> fieldSpecList, String className) {
StringBuilder sb = new StringBuilder();
sb.append("return " + "\"" + className + "{\"" + " +\n" + "\"");
for (int i = 0; i < fieldSpecList.size(); i++) {
sb.append(fieldSpecList.get(i).name + "= \'\"" + " + "
+ fieldSpecList.get(i).name + " +'\\\''" + " + ");
if (i != fieldSpecList.size() - 1) {
sb.append("\n" + "\",");
} else {
sb.append("\'}\'");
}
}
MethodSpec toString = MethodSpec.methodBuilder("toString")
.addModifiers(Modifier.PUBLIC)
.returns(String.class)
.addAnnotation(Override.class)
.addStatement(sb.toString()).build();
return toString;
}
}
package com.ticup.business.generate.create;
/**
* TODO
*
* @author chenhao
* @version 1.0.0
* @since 1.0.0
*
* Created at 2019-11-06 10:46
*/
public class GenerateUtil {
public static String upper(String target) {
String start = target.substring(0, 1).toUpperCase();
String after = target.substring(1);
return start + after;
}
}
测试
package com.ticup.business.generate.create;
import static javax.lang.model.element.Modifier.PUBLIC;
import static org.junit.jupiter.api.Assertions.*;
import com.squareup.javapoet.ClassName;
import com.squareup.javapoet.FieldSpec;
import com.squareup.javapoet.JavaFile;
import com.squareup.javapoet.MethodSpec;
import com.squareup.javapoet.ParameterizedTypeName;
import com.squareup.javapoet.TypeName;
import com.squareup.javapoet.TypeSpec;
import com.squareup.javapoet.TypeSpec.Builder;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import org.junit.jupiter.api.Test;
/**
* TODO
*
* @author chenhao
* @version 1.0.0
* @since 1.0.0
*
* Created at 2019-11-06 14:28
*/
class XmlParserTest {
@Test
public void parser() throws IOException, ClassNotFoundException {
XmlParser xmlParser = new XmlParser();
String xml = "<?xml version=\"1.0\" encoding=\"utf-8\"?>\n"
+ "<transaction>\n"
+ " <header>\n"
+ " <ver>1.0</ver>\n"
+ " <msg>\n"
+ " <msgCd>FAS.OB0050000.01</msgCd>\n"
+ " <seqNb>CBS201910240000001</seqNb>\n"
+ " <sndAppCd>CBS</sndAppCd>\n"
+ " <sndDt>20191024</sndDt>\n"
+ " <sndTm>171100</sndTm>\n"
+ " <rcvAppCd>FAS</rcvAppCd>\n"
+ " </msg>\n"
+ " </header>\n"
+ " <body>\n"
+ " <request>\n"
+ " <linkBillNo>编号</linkBillNo>\n"
+ " <bizFlowNo>biz号</bizFlowNo>\n"
+ " <newCustomerNo>新建人账号</newCustomerNo>\n"
+ " <newCustomerName>新建人名称</newCustomerName>\n"
+ " <projectDisposeNo>处置项目编号</projectDisposeNo>\n"
+ " <projectDisposeName>处置项目名称</projectDisposeName>\n"
+ " <billingType>类型</billingType>\n"
+ " <fundCode>fcode</fundCode>\n"
+ " <recoverDate>日期</recoverDate>\n"
+ " <operatorName>operator</operatorName>\n"
+ " <operatorInstitute>operins</operatorInstitute>\n"
+ " <operatorDepartment>operdep</operatorDepartment>\n"
+ " <bizDate>biz日期</bizDate>\n"
+ " <cashRecoverList>\n"
+ " <Row>\n"
+ " <newDebtContract>ndc</newDebtContract>\n"
+ " <newRecoverAmount>金额1</newRecoverAmount>\n"
+ " <newRcReturnPrincipal>金额1</newRcReturnPrincipal>\n"
+ " <newRcReturnInnerInt>金额1</newRcReturnInnerInt>\n"
+ " <newRcReturnOuterInt>金额1</newRcReturnOuterInt>\n"
+ " <newRcReturnFruits>金额1</newRcReturnFruits>\n"
+ " <newIsPassRecover>金额1</newIsPassRecover>\n"
+ " <newOverchargeAmt>金额1</newOverchargeAmt>\n"
+ " <returnPrincipal>金额1</returnPrincipal>\n"
+ " <returnInnerInt>金额1</returnInnerInt>\n"
+ " <returnOuterInt>金额1</returnOuterInt>\n"
+ " <returnFruits>金额1</returnFruits>\n"
+ " <recoverCurrency>币种</recoverCurrency>\n"
+ " </Row>\n"
+ " </cashRecoverList>\n"
+ " <npaFASAttachInfoList>\n"
+ " <Row>\n"
+ " <sid>xxxxxxxxxxxxxxxx</sid>\n"
+ " <uploadDate>2019-10-22</uploadDate>\n"
+ " <attachName>附件名称</attachName>\n"
+ " <uploader>上传人</uploader>\n"
+ " <attachType>TXT</attachType>\n"
+ " <attachSize>10</attachSize>\n"
+ " <path>path</path>\n"
+ " </Row>\n"
+ " </npaFASAttachInfoList>\n"
+ " </request>\n"
+ " </body>\n"
+ "</transaction>\n";
Map<String, String> map = new HashMap<>();
Map<String, List<JavaFieldModel>> demo = xmlParser.parser(xml, "demo");
Set<Entry<String, List<JavaFieldModel>>> entries = demo.entrySet();
JavaGenerate javaGenerate = new JavaGenerate();
for (Entry<String, List<JavaFieldModel>> entry : entries) {
// 最后生成base 主类模板
if (!entry.getKey().equals("demo")) {
List<FieldSpec> fieldSpecs = javaGenerate.generateField(entry.getValue());
List<MethodSpec> methodSpecs = javaGenerate.generateGetSetMethod(fieldSpecs);
MethodSpec methodSpec = javaGenerate.generateToString(fieldSpecs, entry.getKey());
Builder builder = TypeSpec.classBuilder(entry.getKey());
// 循环封装属性
for (FieldSpec fieldSpec : fieldSpecs) {
builder.addField(fieldSpec);
}
// 循环封装方法
for (MethodSpec spec : methodSpecs) {
builder.addMethod(spec);
}
TypeSpec build = builder.addMethod(methodSpec).build();
//生成一个Java文件
JavaFile javaFile = JavaFile.builder("com.xupt.willscorpio.javatest", build)
.build();
System.out.println(javaFile);
map.put(entry.getKey(), javaFile.packageName);
}
}
//--------------补充上列表属性------------
// 生成主类模板
List<JavaFieldModel> list = demo.get("demo");
List<FieldSpec> fieldSpecs = javaGenerate.generateField(list);
List<MethodSpec> methodSpecs = javaGenerate.generateGetSetMethod(fieldSpecs);
Builder builderBase = TypeSpec.classBuilder("demo");
// 循环封装属性
for (FieldSpec fieldSpec : fieldSpecs) {
builderBase.addField(fieldSpec);
}
// 循环封装方法
for (MethodSpec spec : methodSpecs) {
builderBase.addMethod(spec);
}
//---补充列表的 getter setter
// 先构造一个list,然后构造一个泛型的类型
ClassName className = ClassName.get("java.util", "List");
Set<Entry<String, String>> entries1 = map.entrySet();
MethodSpec methodSpec;
for (Entry<String, String> stringStringEntry : entries1) {
ClassName fanxing = ClassName.get(stringStringEntry.getValue(), stringStringEntry.getKey());
// 泛型组装
TypeName listOfHoverboards = ParameterizedTypeName.get(className, fanxing);
builderBase
.addField(FieldSpec.builder(listOfHoverboards, stringStringEntry.getKey()).build());
String name = GenerateUtil.upper(stringStringEntry.getKey());
methodSpec = MethodSpec.methodBuilder("get" + name)
.addModifiers(PUBLIC)
.returns(listOfHoverboards)
.addStatement("return " + stringStringEntry.getKey())
.build();
builderBase.addMethod(methodSpec);
methodSpec = MethodSpec.methodBuilder("set" + name)
.addModifiers(PUBLIC)
.addParameter(listOfHoverboards, name)
.addStatement("this." + name + "=" + name)
.build();
builderBase.addMethod(methodSpec);
}
//生成一个Java文件
JavaFile javaFile = JavaFile.builder("com.xupt.willscorpio.javatest", builderBase.build())
.build();
System.out.println(javaFile);
}
}
输入报文:
<?xml version="1.0" encoding="utf-8"?>
<transaction>
<header>
<ver>1.0</ver>
<msg>
<msgCd>FAS.OB0050000.01</msgCd>
<seqNb>CBS201910240000001</seqNb>
<sndAppCd>CBS</sndAppCd>
<sndDt>20191024</sndDt>
<sndTm>171100</sndTm>
<rcvAppCd>FAS</rcvAppCd>
</msg>
</header>
<body>
<request>
<linkBillNo>编号</linkBillNo>
<bizFlowNo>biz号</bizFlowNo>
<newCustomerNo>新建人账号</newCustomerNo>
<newCustomerName>新建人名称</newCustomerName>
<projectDisposeNo>处置项目编号</projectDisposeNo>
<projectDisposeName>处置项目名称</projectDisposeName>
<billingType>类型</billingType>
<fundCode>fcode</fundCode>
<recoverDate>日期</recoverDate>
<operatorName>operator</operatorName>
<operatorInstitute>operins</operatorInstitute>
<operatorDepartment>operdep</operatorDepartment>
<bizDate>biz日期</bizDate>
<cashRecoverList>
<Row>
<newDebtContract>ndc</newDebtContract>
<newRecoverAmount>金额1</newRecoverAmount>
<newRcReturnPrincipal>金额1</newRcReturnPrincipal>
<newRcReturnInnerInt>金额1</newRcReturnInnerInt>
<newRcReturnOuterInt>金额1</newRcReturnOuterInt>
<newRcReturnFruits>金额1</newRcReturnFruits>
<newIsPassRecover>金额1</newIsPassRecover>
<newOverchargeAmt>金额1</newOverchargeAmt>
<returnPrincipal>金额1</returnPrincipal>
<returnInnerInt>金额1</returnInnerInt>
<returnOuterInt>金额1</returnOuterInt>
<returnFruits>金额1</returnFruits>
<recoverCurrency>币种</recoverCurrency>
</Row>
</cashRecoverList>
<npaFASAttachInfoList>
<Row>
<sid>xxxxxxxxxxxxxxxx</sid>
<uploadDate>2019-10-22</uploadDate>
<attachName>附件名称</attachName>
<uploader>上传人</uploader>
<attachType>TXT</attachType>
<attachSize>10</attachSize>
<path>path</path>
</Row>
</npaFASAttachInfoList>
</request>
</body>
</transaction>
解析后
package com.xupt.willscorpio.javatest;
import java.lang.Override;
import java.lang.String;
class npaFASAttachInfoList {
/**
* xxxxxxxxxxxxxxxx.
*/
private String id;
/**
* 2019-10-22.
*/
private String ploadDate;
/**
* 附件名称.
*/
private String ttachName;
/**
* 上传人.
*/
private String ploader;
/**
* TXT.
*/
private String ttachType;
/**
* 10.
*/
private String ttachSize;
/**
* path.
*/
private String ath;
public String getId() {
return id;
}
public void setId(String id) {
this.id=id;
}
public String getPloadDate() {
return ploadDate;
}
public void setPloadDate(String ploadDate) {
this.ploadDate=ploadDate;
}
public String getTtachName() {
return ttachName;
}
public void setTtachName(String ttachName) {
this.ttachName=ttachName;
}
public String getPloader() {
return ploader;
}
public void setPloader(String ploader) {
this.ploader=ploader;
}
public String getTtachType() {
return ttachType;
}
public void setTtachType(String ttachType) {
this.ttachType=ttachType;
}
public String getTtachSize() {
return ttachSize;
}
public void setTtachSize(String ttachSize) {
this.ttachSize=ttachSize;
}
public String getAth() {
return ath;
}
public void setAth(String ath) {
this.ath=ath;
}
@Override
public String toString() {
return "npaFASAttachInfoList{" +
"id= '" + id +'\'' +
",ploadDate= '" + ploadDate +'\'' +
",ttachName= '" + ttachName +'\'' +
",ploader= '" + ploader +'\'' +
",ttachType= '" + ttachType +'\'' +
",ttachSize= '" + ttachSize +'\'' +
",ath= '" + ath +'\'' + '}';
}
}
package com.xupt.willscorpio.javatest;
import java.lang.Override;
import java.lang.String;
class cashRecoverList {
/**
* ndc.
*/
private String ewDebtContract;
/**
* 金额1.
*/
private String ewRecoverAmount;
/**
* 金额1.
*/
private String ewRcReturnPrincipal;
/**
* 金额1.
*/
private String ewRcReturnInnerInt;
/**
* 金额1.
*/
private String ewRcReturnOuterInt;
/**
* 金额1.
*/
private String ewRcReturnFruits;
/**
* 金额1.
*/
private String ewIsPassRecover;
/**
* 金额1.
*/
private String ewOverchargeAmt;
/**
* 金额1.
*/
private String eturnPrincipal;
/**
* 金额1.
*/
private String eturnInnerInt;
/**
* 金额1.
*/
private String eturnOuterInt;
/**
* 金额1.
*/
private String eturnFruits;
/**
* 币种.
*/
private String ecoverCurrency;
public String getEwDebtContract() {
return ewDebtContract;
}
public void setEwDebtContract(String ewDebtContract) {
this.ewDebtContract=ewDebtContract;
}
public String getEwRecoverAmount() {
return ewRecoverAmount;
}
public void setEwRecoverAmount(String ewRecoverAmount) {
this.ewRecoverAmount=ewRecoverAmount;
}
public String getEwRcReturnPrincipal() {
return ewRcReturnPrincipal;
}
public void setEwRcReturnPrincipal(String ewRcReturnPrincipal) {
this.ewRcReturnPrincipal=ewRcReturnPrincipal;
}
public String getEwRcReturnInnerInt() {
return ewRcReturnInnerInt;
}
public void setEwRcReturnInnerInt(String ewRcReturnInnerInt) {
this.ewRcReturnInnerInt=ewRcReturnInnerInt;
}
public String getEwRcReturnOuterInt() {
return ewRcReturnOuterInt;
}
public void setEwRcReturnOuterInt(String ewRcReturnOuterInt) {
this.ewRcReturnOuterInt=ewRcReturnOuterInt;
}
public String getEwRcReturnFruits() {
return ewRcReturnFruits;
}
public void setEwRcReturnFruits(String ewRcReturnFruits) {
this.ewRcReturnFruits=ewRcReturnFruits;
}
public String getEwIsPassRecover() {
return ewIsPassRecover;
}
public void setEwIsPassRecover(String ewIsPassRecover) {
this.ewIsPassRecover=ewIsPassRecover;
}
public String getEwOverchargeAmt() {
return ewOverchargeAmt;
}
public void setEwOverchargeAmt(String ewOverchargeAmt) {
this.ewOverchargeAmt=ewOverchargeAmt;
}
public String getEturnPrincipal() {
return eturnPrincipal;
}
public void setEturnPrincipal(String eturnPrincipal) {
this.eturnPrincipal=eturnPrincipal;
}
public String getEturnInnerInt() {
return eturnInnerInt;
}
public void setEturnInnerInt(String eturnInnerInt) {
this.eturnInnerInt=eturnInnerInt;
}
public String getEturnOuterInt() {
return eturnOuterInt;
}
public void setEturnOuterInt(String eturnOuterInt) {
this.eturnOuterInt=eturnOuterInt;
}
public String getEturnFruits() {
return eturnFruits;
}
public void setEturnFruits(String eturnFruits) {
this.eturnFruits=eturnFruits;
}
public String getEcoverCurrency() {
return ecoverCurrency;
}
public void setEcoverCurrency(String ecoverCurrency) {
this.ecoverCurrency=ecoverCurrency;
}
@Override
public String toString() {
return "cashRecoverList{" +
"ewDebtContract= '" + ewDebtContract +'\'' +
",ewRecoverAmount= '" + ewRecoverAmount +'\'' +
",ewRcReturnPrincipal= '" + ewRcReturnPrincipal +'\'' +
",ewRcReturnInnerInt= '" + ewRcReturnInnerInt +'\'' +
",ewRcReturnOuterInt= '" + ewRcReturnOuterInt +'\'' +
",ewRcReturnFruits= '" + ewRcReturnFruits +'\'' +
",ewIsPassRecover= '" + ewIsPassRecover +'\'' +
",ewOverchargeAmt= '" + ewOverchargeAmt +'\'' +
",eturnPrincipal= '" + eturnPrincipal +'\'' +
",eturnInnerInt= '" + eturnInnerInt +'\'' +
",eturnOuterInt= '" + eturnOuterInt +'\'' +
",eturnFruits= '" + eturnFruits +'\'' +
",ecoverCurrency= '" + ecoverCurrency +'\'' + '}';
}
}
package com.xupt.willscorpio.javatest;
import java.lang.String;
import java.util.List;
class demo {
/**
* 编号.
*/
private String inkBillNo;
/**
* biz号.
*/
private String izFlowNo;
/**
* 新建人账号.
*/
private String ewCustomerNo;
/**
* 新建人名称.
*/
private String ewCustomerName;
/**
* 处置项目编号.
*/
private String rojectDisposeNo;
/**
* 处置项目名称.
*/
private String rojectDisposeName;
/**
* 类型.
*/
private String illingType;
/**
* fcode.
*/
private String undCode;
/**
* 日期.
*/
private String ecoverDate;
/**
* operator.
*/
private String peratorName;
/**
* operins.
*/
private String peratorInstitute;
/**
* operdep.
*/
private String peratorDepartment;
/**
* biz日期.
*/
private String izDate;
List<npaFASAttachInfoList> npaFASAttachInfoList;
List<cashRecoverList> cashRecoverList;
public String getInkBillNo() {
return inkBillNo;
}
public void setInkBillNo(String inkBillNo) {
this.inkBillNo=inkBillNo;
}
public String getIzFlowNo() {
return izFlowNo;
}
public void setIzFlowNo(String izFlowNo) {
this.izFlowNo=izFlowNo;
}
public String getEwCustomerNo() {
return ewCustomerNo;
}
public void setEwCustomerNo(String ewCustomerNo) {
this.ewCustomerNo=ewCustomerNo;
}
public String getEwCustomerName() {
return ewCustomerName;
}
public void setEwCustomerName(String ewCustomerName) {
this.ewCustomerName=ewCustomerName;
}
public String getRojectDisposeNo() {
return rojectDisposeNo;
}
public void setRojectDisposeNo(String rojectDisposeNo) {
this.rojectDisposeNo=rojectDisposeNo;
}
public String getRojectDisposeName() {
return rojectDisposeName;
}
public void setRojectDisposeName(String rojectDisposeName) {
this.rojectDisposeName=rojectDisposeName;
}
public String getIllingType() {
return illingType;
}
public void setIllingType(String illingType) {
this.illingType=illingType;
}
public String getUndCode() {
return undCode;
}
public void setUndCode(String undCode) {
this.undCode=undCode;
}
public String getEcoverDate() {
return ecoverDate;
}
public void setEcoverDate(String ecoverDate) {
this.ecoverDate=ecoverDate;
}
public String getPeratorName() {
return peratorName;
}
public void setPeratorName(String peratorName) {
this.peratorName=peratorName;
}
public String getPeratorInstitute() {
return peratorInstitute;
}
public void setPeratorInstitute(String peratorInstitute) {
this.peratorInstitute=peratorInstitute;
}
public String getPeratorDepartment() {
return peratorDepartment;
}
public void setPeratorDepartment(String peratorDepartment) {
this.peratorDepartment=peratorDepartment;
}
public String getIzDate() {
return izDate;
}
public void setIzDate(String izDate) {
this.izDate=izDate;
}
public List<npaFASAttachInfoList> getNpaFASAttachInfoList() {
return npaFASAttachInfoList;
}
public void setNpaFASAttachInfoList(List<npaFASAttachInfoList> NpaFASAttachInfoList) {
this.NpaFASAttachInfoList=NpaFASAttachInfoList;
}
public List<cashRecoverList> getCashRecoverList() {
return cashRecoverList;
}
public void setCashRecoverList(List<cashRecoverList> CashRecoverList) {
this.CashRecoverList=CashRecoverList;
}
}
Process finished with exit code 0