commons-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Kurt Xu" <fxbird1...@163.com>
Subject Re: [digester] why addCallMethod doesn't work?
Date Sat, 02 Apr 2011 02:05:14 GMT
Yes,addObjectParam is the point. I've wrongly used addCallParam. And using  
Regular Expression here to parse Constant and Mutable is very simple and  
clean.

The alternative setTable method is  as following:


         d.addSetProperties(pattern + "/Handler", "class", "handler");
         d.addObjectCreate(pathClass+"/*/Constant",ConstantProp.class);
         d.addSetNext(pathClass+"/*/Constant","addConstantProp");
         d.addSetProperties(pathClass+"/*/Constant");

         d.addObjectCreate(pathClass+"/*/Mutable",MutableProp.class);
         d.addSetNext(pathClass+"/*/Mutable","addMutableProp");
         d.addSetProperties(pathClass+"/*/Mutable");

         d.addCallMethod(pattern, "setType", 1);
         d.addObjectParam(pattern, 0, type);

   First I think it won't work because of some other issue. Now I'm happy  
it's fine. Thanks Simone. For the coming Digester 3 , I hope it will be  
provided with a complete document that is  rich in examples. You know  
current document is not easy to understand, I see after using it for a  
while.

Kurt


On Fri, 01 Apr 2011 22:32:12 +0800, Simone Tripodi  
<simonetripodi@apache.org> wrote:

> 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 <fxbird1978@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
>> <simonetripodi@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 <fxbird1978@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-unsubscribe@commons.apache.org
>>>> For additional commands, e-mail: user-help@commons.apache.org
>>>>
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
>>> For additional commands, e-mail: user-help@commons.apache.org
>>>
>>
>>
>> --
>> Using Opera's revolutionary email client: http://www.opera.com/mail/
>>
>>
>> ---------------------------------------------------------------------
>> To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
>> For additional commands, e-mail: user-help@commons.apache.org
>>
>>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
> For additional commands, e-mail: user-help@commons.apache.org
>


-- 
Using Opera's revolutionary email client: http://www.opera.com/mail/


---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
For additional commands, e-mail: user-help@commons.apache.org


Mime
View raw message