commons-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Diogo Quintela (EF)" <diogo.quint...@ef.pt>
Subject RE: [digester] instantiationException if using internal classes ?
Date Wed, 28 Dec 2005 14:35:01 GMT
Maybe you should try setting your Student class into "static".

Regards
Diogo

-----------------------------------
Diogo Bacelar Quintela
EF - Tecnologias de Informação, Lda.
Av. António Serpa, 26 - 4º Dto.
1050-027 Lisboa, Portugal
Tel: (+351) 217 827 800
Fax: (+351) 217 827 830
Email: diogo.quintela@ef.pt
PGP: 0xF51A5AB9 

> -----Original Message-----
> From: Valerio Schiavoni [mailto:valerio.schiavoni@gmail.com]
> Sent: quarta-feira, 28 de Dezembro de 2005 14:03
> To: Jakarta Commons Users List
> Subject: [digester] instantiationException if using internal classes ?
> 
> Hello, i have the following testCase (inspired by some code found online):
> 
> what it does is to read the xml from string, create a digester, and load
> the
> object: very simple stuff, but i get the following stacktrace:
> 
> 28-dic-2005 14.59.26 org.apache.commons.digester.Digester startElement
> GRAVE: Begin event threw exception
> java.lang.InstantiationException: jfrr.mapping.StudentDigester$Student
>     at java.lang.Class.newInstance0(Class.java:335)
>     at java.lang.Class.newInstance(Class.java:303)
>     at org.apache.commons.digester.ObjectCreateRule.begin(
> ObjectCreateRule.java:205)
>     at org.apache.commons.digester.Rule.begin(Rule.java:152)
>     at
> org.apache.commons.digester.Digester.startElement(Digester.java:1361)
>     at org.apache.xerces.parsers.AbstractSAXParser.startElement(Unknown
> Source)
>     at
> org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanStartElement(Unk
> nown
> Source)
>     at
> org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispa
> tcher.dispatch(Unknown
> Source)
>     at
> org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown
> Source)
>     at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
>     at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
>     at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
>     at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
>     at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown
> Source)
>     at org.apache.commons.digester.Digester.parse(Digester.java:1685)
>     at jfrr.mapping.StudentDigester$DigestStudents.digest(
> StudentDigester.java:53)
>     at jfrr.mapping.StudentDigester$DigestStudents.access$0(
> StudentDigester.java:32)
>     at jfrr.mapping.StudentDigester.testAddBeanPropertySetter(
> StudentDigester.java:21)
>     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:585)
>     at junit.framework.TestCase.runTest(TestCase.java:154)
>     at junit.framework.TestCase.runBare(TestCase.java:127)
>     at junit.framework.TestResult$1.protect(TestResult.java:106)
>     at junit.framework.TestResult.runProtected(TestResult.java:124)
>     at junit.framework.TestResult.run(TestResult.java:109)
>     at junit.framework.TestCase.run(TestCase.java:118)
>     at junit.framework.TestSuite.runTest(TestSuite.java:208)
>     at junit.framework.TestSuite.run(TestSuite.java:203)
>     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(
> RemoteTestRunner.java:478)
>     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(
> RemoteTestRunner.java:344)
>     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(
> RemoteTestRunner.java:196)
> java.lang.InstantiationException: jfrr.mapping.StudentDigester$Student
>     at
> org.apache.commons.digester.Digester.createSAXException(Digester.java
> :2919)
>     at
> org.apache.commons.digester.Digester.createSAXException(Digester.java
> :2945)
>     at
> org.apache.commons.digester.Digester.startElement(Digester.java:1364)
>     at org.apache.xerces.parsers.AbstractSAXParser.startElement(Unknown
> Source)
>     at
> org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanStartElement(Unk
> nown
> Source)
>     at
> org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispa
> tcher.dispatch(Unknown
> Source)
>     at
> org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown
> Source)
>     at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
>     at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
>     at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
>     at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
>     at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown
> Source)
>     at org.apache.commons.digester.Digester.parse(Digester.java:1685)
>     at jfrr.mapping.StudentDigester$DigestStudents.digest(
> StudentDigester.java:53)
>     at jfrr.mapping.StudentDigester$DigestStudents.access$0(
> StudentDigester.java:32)
>     at jfrr.mapping.StudentDigester.testAddBeanPropertySetter(
> StudentDigester.java:21)
>     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:585)
>     at junit.framework.TestCase.runTest(TestCase.java:154)
>     at junit.framework.TestCase.runBare(TestCase.java:127)
>     at junit.framework.TestResult$1.protect(TestResult.java:106)
>     at junit.framework.TestResult.runProtected(TestResult.java:124)
>     at junit.framework.TestResult.run(TestResult.java:109)
>     at junit.framework.TestCase.run(TestCase.java:118)
>     at junit.framework.TestSuite.runTest(TestSuite.java:208)
>     at junit.framework.TestSuite.run(TestSuite.java:203)
>     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(
> RemoteTestRunner.java:478)
>     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(
> RemoteTestRunner.java:344)
>     at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(
> RemoteTestRunner.java:196)
> 
> 
> The code I used is the following:
> 
> import java.io.StringReader;
> import java.util.ArrayList;
> import java.util.List;
> 
> import junit.framework.TestCase;
> 
> import org.apache.commons.digester.Digester;
> import org.apache.commons.digester.ExtendedBaseRules;
> 
> public class StudentDigester extends TestCase {
> 
>     protected String studentsXML = "<?xml version=\"1.0\"?>"
>             + "<students><student>" + "<name>Java Boy</name>"
>             + "<course>JSP</course>" + "<age>10</age>" + "</student>"
+
> "</students>";
> 
>     public void testAddBeanPropertySetter() {
> 
>         DigestStudents ds = new DigestStudents();
>         ds.digest();
> 
>     }
> 
>     private class DigestStudents {
>         List<Student> students;
> 
>         public DigestStudents() {
>             students = new ArrayList<Student>();
>         }
> 
>         private void digest() {
>             try {
>                 Digester digester = new Digester();
>                 digester.setRules(new ExtendedBaseRules());
>                 //Push the current object onto the stack
>                 digester.push(this);
> 
>                 //Creates a new instance of the Student class
>                 digester.addObjectCreate("students/student",
> Student.class);
> 
>                 //Uses setName method of the Student instance
>                 //Uses tag name as the property name
>                 digester.addBeanPropertySetter("students/student/?");
> 
>                 //Uses setCourse method of the Student instance
>                 //Explicitly specify property name as 'course'
>                 //digester.addBeanPropertySetter(
> "students/student/course",
> "course" );
> 
>                 //Move to next student
>                 digester.addSetNext("students/student", "addStudent");
> 
>                 DigestStudents ds = (DigestStudents) digester.parse(new
> StringReader(
>                         studentsXML));
> 
>                 //Print the contents of the Vector
>                 System.out.println("Students List " + ds.students);
>             } catch (Exception ex) {
>                 ex.printStackTrace();
>             }
>         }
> 
>         public void addStudent(Student stud) {
>             //Add a new Student instance to the Vector
>             students.add(stud);
>         }
>     }
>     public class Student {
>     private String name;
>     private String course;
>     private int age;
> 
>     public Student() {
>     }
> 
>     public String getName() {
>         return name;
>     }
> 
>     public void setName(String newName) {
>         name = newName;
>     }
> 
>     public String getCourse() {
>         return course;
>     }
> 
>     public void setCourse(String newCourse) {
>         course = newCourse;
>     }
>     public String toString() {
>         return("Name="+this.name + " & Course=" +  this.course +" &
> Age="+this.age);
>     }
> 
>         public int getAge() {
>             return age;
>         }
> 
>         public void setAge(int age) {
>             this.age = age;
>         }
> }
> }
> 
> If i move the public internal class Student outside the testcase class, it
> works as supposed. IS this normal behaviour ?
> thanks,
> valerio
> --
> To Iterate is Human, to Recurse, Divine
> James O. Coplien, Bell Labs

Mime
View raw message