commons-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From 飞翔鸟 <fxbird1...@163.com>
Subject Re:Re: [digester]How to use SimpleRegexMatcher?
Date Thu, 31 Mar 2011 03:21:40 GMT
Hello Simone:

     I tried your code but receive a NullPointerException:


[WARN] Digester - Empty stack (returning null)
[ERROR] Digester - End event threw exception <java.lang.NullPointerException>java.lang.NullPointerException
at org.apache.commons.beanutils.MethodUtils.invokeMethod(MethodUtils.java:274)
at org.apache.commons.digester.SetNextRule.end(SetNextRule.java:220)
at org.apache.commons.digester.Rule.end(Rule.java:257)
at org.apache.commons.digester.Digester.endElement(Digester.java:1345)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement(AbstractSAXParser.java:601)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEndElement(XMLDocumentFragmentScannerImpl.java:1774)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2930)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:510)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:807)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:107)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522)
at org.apache.commons.digester.Digester.parse(Digester.java:1990)
at com.mytest.siamon.config.ConfigManager.parseProject2(ConfigManager.java:117)
at com.mytest.siamon.config.ConfigManager.init(ConfigManager.java:147)
at com.mytest.siamon.config.ConfigManager.<init>(ConfigManager.java:40)
at com.mytest.siamon.config.ConfigManager.<init>(ConfigManager.java:45)
at com.mytest.siamon.config.ConfigManager.main(ConfigManager.java:80)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:115)

Exception in thread "main" java.lang.NullPointerException
at org.apache.commons.digester.Digester.createSAXException(Digester.java:3363)
at org.apache.commons.digester.Digester.createSAXException(Digester.java:3389)
at org.apache.commons.digester.Digester.endElement(Digester.java:1348)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement(AbstractSAXParser.java:601)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEndElement(XMLDocumentFragmentScannerImpl.java:1774)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2930)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:510)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:807)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:107)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522)
at org.apache.commons.digester.Digester.parse(Digester.java:1990)
at com.mytest.siamon.config.ConfigManager.parseProject2(ConfigManager.java:117)
at com.mytest.siamon.config.ConfigManager.init(ConfigManager.java:147)
at com.mytest.siamon.config.ConfigManager.<init>(ConfigManager.java:40)
at com.mytest.siamon.config.ConfigManager.<init>(ConfigManager.java:45)
at com.mytest.siamon.config.ConfigManager.main(ConfigManager.java:80)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:115)



   I go into BeanUtils source code and the place where exception generates is :

Method method = getMatchingAccessibleMethod(
object.getClass(),
methodName,
parameterTypes);


and I discovered the parameter object is null which yields the result.


 

any ideas?

thanks.

Kurt





At 2011-03-30 22:01:18,"Simone Tripodi" <simonetripodi@apache.org> wrote:

>Hi Kurt,
>I suggest you first creating a digester rule that helps you handling a
>generic ParaItem element:
>
>public final class ParaItemRule extends org.apache.commons.digester.Rule {
>
>    @Override
>    public void body(String namespace, String name, String text)
>throws Exception {
>        digester.push(new ParaItem(name, text));
>    }
>
>}
>
>then plug the digester rules in the following way:
>
>        Digester digester = new Digester();
>
>        /* take a look at
>http://commons.apache.org/digester/apidocs/org/apache/commons/digester/SimpleRegexMatcher.html
>*/
>        digester.setRules(new RegexRules(new SimpleRegexMatcher()));
>
>        digester.addRule("Class/Parameter/Main/*", new ParaItemRule());
>        digester.addSetNext("Class/Parameter/Main/*", "addMainParaItem");
>
>        digester.addRule("Class/Parameter/SubText/*", new ParaItemRule());
>        digester.addSetNext("Class/Parameter/SubText/*", "addSubParaItem");
>
>THT, let me know! ;)
>Simo
>
>http://people.apache.org/~simonetripodi/
>http://www.99soft.org/
>
>
>
>On Wed, Mar 30, 2011 at 11:49 AM, fxbird <fxbird@gmail.com> wrote:
>> Hi all:
>>
>> I want to match some unknow elements nested some parent element where some newly
defined element might be added sometime.
>>
>> The sample xml is as below:
>>
>> <Class name="jp.hangame.motecoorde.coordinate.bo.CoordinateCommentBoImpl" method="entry">
>>            <Parameter name="comment" index="0" type="insert" table="MOCO_CODICMT">
>>                <Main>
>>                    <DeviceType constant="true">pc</DeviceType>
>>                    <CheckStatus constant="true">N</CheckStatus>
>>                    <ValidCheck constant="true">Yes</ValidCheck>
>>                    <CheckDesc></CheckDesc>
>>                    <UserId>userid</UserId>
>>                    <PrimaryKey1>cmtno</PrimaryKey1>
>>                </Main>
>>                <SubText>
>>                    <!--<Type constant="true/false"></Type>-->
>>                    <!--<Title>title</Title>-->
>>                    <Content>contents</Content>
>>                    <WriterId>writeid</WriterId>
>>                    <WriterUserName>userid</WriterUserName>
>>                </SubText>
>>            </Parameter>
>> </Class>
>>
>>
>>   The elements under <Main> and <SubText> are all variable someday, both
name and amounts. So I define a ParaItem pojo to wrap sub elements of the two element.  That
means I want to create a Paraitem for every sub element ,whatever its name is, then add the
object to paraent object Parameter's list property saving all the related Paraitem.
>>
>>   The Paraitem source code is following:
>>
>> public class ParaItem {
>>    private String elemName;
>>    private String argPropNameOrValue;
>>    private boolean isConstant;
>>    public ParaItem() {
>>    }
>>    public ParaItem(String elemName, String argPropNameOrValue,  boolean constant)
{
>>        this.elemName = elemName;
>>        this.argPropNameOrValue = argPropNameOrValue;
>>        isConstant = constant;
>>    }
>>    public ParaItem(String elemName, String argPropNameOrValue) {
>>        this.elemName = elemName;
>>        this.argPropNameOrValue = argPropNameOrValue;
>>    }
>>    public String getElemName() {
>>        return elemName;
>>    }
>>    public String getArgPropNameOrValue() {
>>        return argPropNameOrValue;
>>    }
>>    public boolean isConstant() {
>>        return isConstant;
>>    }
>> }
>>
>>
>>
>>  The Parameter source code is below:
>> public class Parameter {
>>    private String index;
>>    private String operType;
>>    private String dataType;
>>    private List<ParaItem> listMainFiled =new ArrayList<ParaItem>();
>>    private List<ParaItem> listSubField =new ArrayList<ParaItem>();
>>    public Parameter(String operType) {
>>        this.operType = operType;
>>    }
>>    public List<ParaItem> getListMainFiled() {
>>        return listMainFiled;
>>    }
>>    public void setListMainFiled(List<ParaItem> listMainFiled) {
>>        this.listMainFiled = listMainFiled;
>>    }
>>    public List<ParaItem> getListSubField() {
>>        return listSubField;
>>    }
>>    public void setListSubField(List<ParaItem> listSubField) {
>>        this.listSubField = listSubField;
>>    }
>>    public String getIndex() {
>>        return index;
>>    }
>>    public void setIndex(String index) {
>>        this.index = index;
>>    }
>>    public String getOperType() {
>>        return operType;
>>    }
>>    public void setOperType(String operType) {
>>        this.operType = operType;
>>    }
>>    public String getDataType() {
>>        return dataType;
>>    }
>>    public void setDataType(String dataType) {
>>        this.dataType = dataType;
>>    }
>>    public void addMainParaItem(ParaItem pi){
>>       getListMainFiled().add(pi);
>>    }
>>    public void addSubParaItem(ParaItem pi){
>>        getListSubField().add(pi);
>>    }
>> }
>>
>>   I suppose regex rule is the best way to make it , but googling and the javadoc
doesn't tell me how to set a regex expression for a pattern. No way out, who knows the solotion
, thanks.
>>
>>
>>  Kurt
>>
>
>---------------------------------------------------------------------
>To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
>For additional commands, e-mail: user-help@commons.apache.org
>
Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message