Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 0
at com.weir.mgen.configure.implementors.xmlimpl.RootConfXmlImpl.readNeedGens(RootConfXmlImpl.java:56)
at com.weir.mgen.configure.implementors.xmlimpl.RootConfXmlImpl.getNeedGens(RootConfXmlImpl.java:21)
at com.weir.mgen.configure.manage.ConfManage.readRootConf(ConfManage.java:74)
at com.weir.mgen.configure.manage.ConfManage.readConf(ConfManage.java:33)
at com.weir.mgen.configure.manage.ConfManage.<init>(ConfManage.java:16)
at com.weir.mgen.configure.manage.ConfManage.getInstance(ConfManage.java:21)
at com.weir.mgen.configure.RootConfImpl.getGenConf(RootConfImpl.java:29)
at com.weir.test.MyTest.main(MyTest.java:33)
程序为:
package com.weir.mgen.configure.implementors.xmlimpl;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.weir.mgen.configure.implementors.RootConfImplementor;
import com.weir.mgen.configure.implementors.ThemeConfImplementor;
import com.weir.mgen.configure.vo.NeedGenModel;
import com.weir.mgen.configure.vo.ThemeModel;
import com.weir.mgen.constants.ExpressionEnum;
import com.weir.mgen.util.readxml.Context;
import com.weir.mgen.util.readxml.ReadXmlExpression;
import com.weir.mgen.util.readxml.parser.Parser;
public class RootConfXmlImpl implements RootConfImplementor{
@Override
public List<NeedGenModel> getNeedGens() {
return readNeedGens();
}
@Override
public List<ThemeModel> getThemes() {
return readThemes();
}
@Override
public Map<String, String> getMapconstants() {
return readMapconstants();
}
private Context getContext(){
Context c = null;
try {
//System.out.println(new RootConfBuilder().addXmlFilePre().addGenConf().addDot().addXml().build());
c= Context.getInstance(new RootConfBuilder().addXmlFilePre().addGenConf().addDot().addXml().build());
} catch (Exception e) {
e.printStackTrace();
}
return c;
}
private List<NeedGenModel> readNeedGens() {
List<NeedGenModel> list = new ArrayList<NeedGenModel>();
Context c = this.getContext();
String[] needGenIds = parseNeedGenIds(c);
String[] needProviders = parseNeedGenProviders(c);
String[] needThemeIds = parseNeedGenThemeIds(c);
for (int i = 0; i < needGenIds.length; i++) {
NeedGenModel ngm = new NeedGenModel();
ngm.setId(needGenIds[i]);
ngm.setProvider(needProviders[i]);
ngm.setTheme(needThemeIds[i]);
String[] paramIds = parseParamIds(c, ngm.getId());
String[] paramValues = parseParamValues(c, ngm.getId());
Map<String, String> map = new HashMap<String, String>();
for (int j = 0; j < paramIds.length; j++) {
map.put(paramIds[j], paramValues[j]);
}
ngm.setMapParams(map);
list.add(ngm);
}
return list;
}
private String[] parseNeedGenIds(Context c) {
c.init();
//genconf/needgens/needgen$.id$
ReadXmlExpression re = Parser.parser(new RootConfBuilder().addGenConf().addSeparator().addNeedGens().addSeparator()
.addNeedGen().addDollar().addDot().addId().addDollar().build());
return re.interpret(c);
}
private String[] parseNeedGenProviders(Context c) {
c.init();
// System.out.println("11111111111===="+new RootConfBuilder().addGenConf().addSeparator().addNeedGens().addSeparator()
// .addNeedGen().addDollar().addDot().addProvider().addDollar().build());
ReadXmlExpression re = Parser.parser(new RootConfBuilder().addGenConf().addSeparator().addNeedGens().addSeparator()
.addNeedGen().addDollar().addDot().addProvider().addDollar().build());
return re.interpret(c);
}
private String[] parseNeedGenThemeIds(Context c) {
c.init();
ReadXmlExpression re = Parser.parser(new RootConfBuilder().addGenConf().addSeparator().addNeedGens().addSeparator()
.addNeedGen().addDollar().addDot().addThemeId().addDollar().build());
return re.interpret(c);
}
private String[] parseParamIds(Context c,String needGenId) {
c.init();
ReadXmlExpression re = Parser.parser(new RootConfBuilder().addGenConf().addSeparator().addNeedGens().addSeparator()
.addNeedGen().addDollar()
.addOpenBracket().addId().addEqual().addOtherValue(needGenId).addCloseBracket()
.addSeparator().addParams().addDollar().addSeparator().addParam().addDollar()
.addDot().addId().addDollar().build());
return re.interpret(c);
}
private String[] parseParamValues(Context c,String neefGenId) {
c.init();
ReadXmlExpression re = Parser.parser(new RootConfBuilder().addGenConf().addSeparator().addNeedGens().addSeparator()
.addNeedGen().addDollar().addOpenBracket().addId().addEqual().addOtherValue(neefGenId)
.addCloseBracket().addSeparator().addParams().addDollar().addSeparator().addParam().addDollar()
.build());
return re.interpret(c);
}
////////////////////////////////////////////////////
private List<ThemeModel> readThemes() {
List<ThemeModel> themeModels = new ArrayList<ThemeModel>();
Context c = this.getContext();
String[] ids = parseThemeIds(c);
String[] locations = parseLocations(c);
for (int i = 0; i < ids.length; i++) {
ThemeModel tm = new ThemeModel();
tm.setId(ids[i]);
tm.setLocation(locations[i]);
ThemeConfImplementor thImpl = new ThemeConfXmlImpl();
Map<String, String> params = new HashMap<String,String>();
params.put(ExpressionEnum.location.getExpr(), locations[i]);
tm.setMapGenOutTypes(thImpl.getMapGenOutTypes(ids[i], params));
tm.setMapGenTypes(thImpl.getMapGenTypes(ids[i], params));
tm.setMapProviders(thImpl.getMapProviders(ids[i], params));
themeModels.add(tm);
}
return themeModels;
}
private String[] parseThemeIds(Context c) {
c.init();
ReadXmlExpression re = Parser.parser(new RootConfBuilder().addGenConf().addSeparator().addThemes().addSeparator()
.addTheme().addDollar().addDot().addId().addDollar().build());
return re.interpret(c);
}
private String[] parseLocations(Context c) {
c.init();
ReadXmlExpression re = Parser.parser(new RootConfBuilder().addGenConf().addSeparator().addThemes().addSeparator()
.addTheme().addDollar().build());
return re.interpret(c);
}
//////////////////////////////////////////////////////
private Map<String, String> readMapconstants() {
Map<String, String> map = new HashMap<String,String>();
Context c = this.getContext();
String[] ids = parseConstantIds(c);
String[] values = parseConstantValues(c);
for (int i = 0; i < ids.length; i++) {
map.put(ids[i], values[i]);
}
return map;
}
private String[] parseConstantIds(Context c) {
c.init();
ReadXmlExpression re = Parser.parser(new RootConfBuilder().addGenConf().addSeparator().addConstants().addSeparator()
.addConstant().addDollar().addDot().addId().addDollar().build());
return re.interpret(c);
}
private String[] parseConstantValues(Context c) {
c.init();
ReadXmlExpression re = Parser.parser(new RootConfBuilder().addGenConf().addSeparator().addConstants().addSeparator()
.addConstant().addDollar().build());
return re.interpret(c);
}
}
不知道为什么会出这样的错误? 请老师看看,谢谢