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" <[email protected]> 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 <[email protected]> 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: [email protected]
>For additional commands, e-mail: [email protected]
>