Not sure to understand the question, but try with d.addCallMethod(pattern, "setType", 1); d.addCallParam(pattern, 0, "type");
if you want to extract the type from the XML (note the "type" instead of simply type) Otherwise, d.addCallMethod(pattern, "setType", 1); d.addObjectParam(pattern, 0, type); if you need to set the type variable reference HTH, Simo http://people.apache.org/~simonetripodi/ http://www.99soft.org/ On Fri, Apr 1, 2011 at 3:53 PM, Kurt Xu <fxbird1...@163.com> wrote: > Hello Simone: > Just below in method setTable is woring. > > d.addCallMethod(pattern, "setType", 1); > d.addCallParam(pattern, 0, type); > > other part is ok. > > Thanks. > > Kurt > > > > On Fri, 01 Apr 2011 21:05:08 +0800, Simone Tripodi > <simonetrip...@apache.org> wrote: > >> Holy cow, Kurt!!! :D >> can you be more precise and highlight which is the part that doesn't >> work? For what I see, there's one assCallParam() set in your Digetser >> and that's for the Handler >> Simo >> >> http://people.apache.org/~simonetripodi/ >> http://www.99soft.org/ >> >> >> >> 2011/4/1 Kurt Xu <fxbird1...@163.com>: >>> >>> Hi all digester users & developers: >>> >>> Today I use addCallMethod but it doesn't work as before. >>> >>> the xml is below: >>> >>> >>> <?xml version="1.0" encoding="UTF-8"?> >>> >>> <Project name="project1"> >>> <Functionality description="add comment" url=""> >>> <Action class="com.mygame.action.UserAction" method="entry"/> >>> <BasicInfo kpiCategoryId="K01002" contentType="thread" >>> statisticsType="处理日"/> >>> <Class name="com.mygame.bo.UserBOImpl" method="entry"> >>> <TextTable type="insert" name="MOCO_CODICMT"> >>> <Handler >>> class="com.mytest.siamon.util.DefaultSiamonHandler"/> >>> <Main> >>> <Constant column="DeviceType" value="pc"/> >>> <Mutable property="cmtno" argidx="0" >>> column="PrimaryKey1"/> >>> </Main> >>> <Sub> >>> <Mutable property="writeid" argidx="0" >>> column="WriterId"/> >>> <Mutable property="contents" argidx="0" >>> column="Content"/> >>> <Constant column="TestType" value="test"/> >>> </Sub> >>> </TextTable> >>> </Class> >>> </Functionality> >>> </Project> >>> >>> there's a code about Mutable and Constant that they both can show up >>> under >>> Main or Sub, the former represents a mutable property and the latter >>> represents a constant property in out business logic. But the question >>> is >>> when TextTable element shows up, I want to set TableMap(XXXTable related >>> class, pojo)'s type as "txt" through addCallMethod. I research on >>> official >>> sample but it is not right in my code, it looks just the same as the >>> sample. >>> >>> related java file: >>> >>> 1)ClassItem.java >>> package com.siamon.model.config; >>> >>> import java.util.ArrayList; >>> import java.util.List; >>> >>> public class ClassItem { >>> >>> private String method; >>> private String name; >>> private List<TableMap> tableMapList=new ArrayList<TableMap>(); >>> >>> public ClassItem(String name, String method, List<TableMap> >>> tableMapList) >>> { >>> this.name = name; >>> this.method = method; >>> this.tableMapList = tableMapList; >>> } >>> >>> >>> public ClassItem() { >>> } >>> >>> public String getMethod() { >>> return method; >>> } >>> >>> public void setMethod(String method) { >>> this.method = method; >>> } >>> >>> public String getName() { >>> return name; >>> } >>> >>> public void setName(String name) { >>> this.name = name; >>> } >>> >>> >>> public void addTableMap(TableMap tm){ >>> getTableMapList().add(tm); >>> } >>> >>> public List<TableMap> getTableMapList() { >>> return tableMapList; >>> } >>> } >>> >>> 2)Project.java >>> package com.siamon.model; >>> >>> import com.siamon.model.config.Functionality; >>> >>> import java.util.ArrayList; >>> import java.util.List; >>> >>> public class Project { >>> private String name; >>> private List<Functionality> functionalities=new >>> ArrayList<Functionality>(); >>> >>> public void addFunctionality(Functionality func){ >>> functionalities.add(func); >>> } >>> >>> public String getName() { >>> return name; >>> } >>> >>> public void setName(String name) { >>> this.name = name; >>> } >>> >>> public List<Functionality> getFunctionalities() { >>> return functionalities; >>> } >>> >>> >>> } >>> >>> 3)ConstantProp.java >>> package com.siamon.model.config; >>> >>> public class ConstantProp { >>> private String column; >>> private String value; >>> >>> public String getColumn() { >>> return column; >>> } >>> >>> public void setColumn(String column) { >>> this.column = column; >>> } >>> >>> public String getValue() { >>> return value; >>> } >>> >>> public void setValue(String value) { >>> this.value = value; >>> } >>> >>> @Override >>> public String toString() { >>> return "ConstantProp [ " + >>> "column='" + column + '\'' + >>> ", value='" + value + '\'' + >>> " ] "; >>> } >>> } >>> >>> 4)MutableProp.java >>> package com.siamon.model.config; >>> >>> public class MutableProp { >>> private String property; >>> private int argIndex; >>> private String column; >>> private String value; >>> >>> public String getProperty() { >>> return property; >>> } >>> >>> public void setProperty(String property) { >>> this.property = property; >>> } >>> >>> public int getArgIndex() { >>> return argIndex; >>> } >>> >>> public void setArgIndex(int argIndex) { >>> this.argIndex = argIndex; >>> } >>> >>> public String getColumn() { >>> return column; >>> } >>> >>> public void setColumn(String column) { >>> this.column = column; >>> } >>> >>> public String getValue() { >>> return value; >>> } >>> >>> public void setValue(String value) { >>> this.value = value; >>> } >>> >>> @Override >>> public String toString() { >>> return "MutableProp [ " + >>> "property='" + property + '\'' + >>> ", argIndex=" + argIndex + >>> ", column='" + column + '\'' + >>> ", value='" + value + '\'' + >>> " ] "; >>> } >>> } >>> >>> 5)TableMap.java >>> package com.siamon.model.config; >>> >>> import java.util.ArrayList; >>> import java.util.List; >>> >>> public class TableMap { >>> private String type; >>> private String handler="com.nhstcorp.siamon.util.DefaultSiamonHandler"; >>> private List<ConstantProp> constantPropList=new >>> ArrayList<ConstantProp>(); >>> private List<MutableProp> mutablePropList=new ArrayList<MutableProp>(); >>> >>> public String getType() { >>> return type; >>> } >>> >>> public void setType(String type) { >>> this.type = type; >>> } >>> >>> public List<MutableProp> getMutablePropList() { >>> return mutablePropList; >>> } >>> >>> public List<ConstantProp> getConstantPropList() { >>> return constantPropList; >>> } >>> >>> public void addMutableProp(MutableProp prop){ >>> getMutablePropList().add(prop); >>> } >>> >>> public void addConstantProp(ConstantProp prop){ >>> getConstantPropList().add(prop); >>> } >>> >>> public String getHandler() { >>> return handler; >>> } >>> >>> public void setHandler(String handler) { >>> this.handler = handler; >>> } >>> } >>> >>> 6)Functionality.java >>> package com.siamon.model.config; >>> >>> import java.util.*; >>> >>> public class Functionality { >>> >>> private String url; >>> private String description; >>> private String actionName; >>> private String actionMethod; >>> private String kpiCategoryId; >>> private String contentType; >>> private String statisticsType; >>> private List<ClassItem> classItems=new ArrayList<ClassItem>(); >>> private String projectName; >>> >>> public Functionality(String projectName, String kpiCategoryId, String >>> contentType, String statisticsType) { >>> this.projectName = projectName; >>> this.kpiCategoryId = kpiCategoryId; >>> this.contentType = contentType; >>> this.statisticsType = statisticsType; >>> } >>> >>> public Functionality() { >>> } >>> >>> public String getUrl() { >>> return url; >>> } >>> >>> public void setUrl(String url) { >>> this.url = url; >>> } >>> >>> public String getDescription() { >>> return description; >>> } >>> >>> public void setDescription(String description) { >>> this.description = description; >>> } >>> >>> public String getActionName() { >>> return actionName; >>> } >>> >>> public void setActionName(String actionName) { >>> this.actionName = actionName; >>> } >>> >>> public String getActionMethod() { >>> return actionMethod; >>> } >>> >>> public void setActionMethod(String actionMethod) { >>> this.actionMethod = actionMethod; >>> } >>> >>> public String getKpiCategoryId() { >>> return kpiCategoryId; >>> } >>> >>> public void setKpiCategoryId(String kpiCategoryId) { >>> this.kpiCategoryId = kpiCategoryId; >>> } >>> >>> public String getContentType() { >>> return contentType; >>> } >>> >>> public void setContentType(String contentType) { >>> this.contentType = contentType; >>> } >>> >>> public String getStatisticsType() { >>> return statisticsType; >>> } >>> >>> public void setStatisticsType(String statisticsType) { >>> this.statisticsType = statisticsType; >>> } >>> >>> public List<ClassItem> getClassItems() { >>> return classItems; >>> } >>> >>> public void setClassItems(List<ClassItem> classItems) { >>> this.classItems = classItems; >>> } >>> >>> public String getProjectName() { >>> return projectName; >>> } >>> >>> public void setProjectName(String projectName) { >>> this.projectName = projectName; >>> } >>> >>> public ClassItem findClassItem(String clazz,String method){ >>> for (ClassItem ci:classItems){ >>> if (ci.getName().equals(clazz) && >>> ci.getMethod().equals(method)){ >>> return ci; >>> } >>> } >>> >>> return null; >>> } >>> >>> public void addClassItem(ClassItem ci){ >>> getClassItems().add(ci); >>> } >>> } >>> >>> >>> 7)parser method >>> private Project parseProject2(URL url) throws IOException, SAXException >>> { >>> Digester d = new Digester(); >>> >>> String pathFunc = "Project/Functionality"; >>> String pathClass = pathFunc + "/Class"; >>> >>> >>> d.addObjectCreate("Project", Project.class); >>> d.addSetProperties("Project"); >>> >>> d.addObjectCreate(pathFunc, Functionality.class); >>> d.addSetNext(pathFunc, "addFunctionality"); >>> d.addSetProperties(pathFunc); >>> d.addSetProperties(pathFunc + "/BasicInfo"); >>> >>> d.addObjectCreate(pathClass, ClassItem.class); >>> d.addSetNext(pathClass, "addClassItem"); >>> >>> String pathTextTable = pathClass + "/TextTable"; >>> d.addSetProperties(pathClass); >>> d.addObjectCreate(pathTextTable, TableMap.class); >>> d.addSetNext(pathTextTable,"addTableMap"); >>> >>> >>> setTable(d, pathClass,"TextTable","txt"); >>> >>> d.parse(url); >>> Project project = (Project) d.getRoot(); >>> >>> System.out.println(); >>> >>> return project; >>> } >>> >>> private void setTable(Digester d, String pathClass, String tableElem, >>> String type){ >>> String pattern=pathClass + "/"+tableElem; >>> >>> d.addObjectCreate(pattern+"/Main/Constant",ConstantProp.class); >>> d.addSetNext(pattern+"/Main/Constant", "addConstantProp"); >>> d.addSetProperties(pattern+ "/Main/Constant"); >>> >>> d.addObjectCreate(pattern+"/Main/Mutable",MutableProp.class); >>> d.addSetNext(pattern + "/Main/Mutable", "addMutableProp"); >>> d.addSetProperties(pattern+ "/Main/Mutable"); >>> >>> d.addObjectCreate(pattern+"/Sub/Constant",ConstantProp.class); >>> d.addSetNext(pattern+"/Sub/Constant", "addConstantProp"); >>> d.addSetProperties(pattern+ "/Sub/Constant"); >>> >>> d.addObjectCreate(pattern+"/Sub/Mutable",MutableProp.class); >>> d.addSetNext(pattern + "/Sub/Mutable", "addMutableProp"); >>> d.addSetProperties(pattern+ "/Sub/Mutable"); >>> >>> >>> d.addSetProperties(pathClass + "/Handler", "class", "handler"); >>> d.addCallMethod(pattern, "setType", 1); >>> d.addCallParam(pattern, 0, type); >>> >>> d.addSetProperties(pattern + "/Handler", "class", "handler"); >>> } >>> >>> that's all source, the issue is the method setTable can't setType for a >>> TableMap class successfully. It looks very normal, nothing seem wrong,but >>> just doesn't work. I also attach the source to the email, don't know if >>> it's >>> allowed. >>> >>> Thanks a lot >>> Kurt >>> >>> --------------------------------------------------------------------- >>> To unsubscribe, e-mail: user-unsubscr...@commons.apache.org >>> For additional commands, e-mail: user-h...@commons.apache.org >>> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: user-unsubscr...@commons.apache.org >> For additional commands, e-mail: user-h...@commons.apache.org >> > > > -- > Using Opera's revolutionary email client: http://www.opera.com/mail/ > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: user-unsubscr...@commons.apache.org > For additional commands, e-mail: user-h...@commons.apache.org > > --------------------------------------------------------------------- To unsubscribe, e-mail: user-unsubscr...@commons.apache.org For additional commands, e-mail: user-h...@commons.apache.org