I am trying to get the betwixt "PersonBean" example working in my
local sandbox however I am getting a ClassCastException. Does anyone
have a suggestion as to what I am doing wrong? Below is my code
followed by the log4j output and stack trace.

Thanks,
ryan

public class TestBetwixt {
        
    public static final void main(String args[]) throws Exception{
        
        // First construct the xml which will be read in
        // For this example, read in from a hard coded string
        StringReader xmlReader = new StringReader(
                    "<?xml version='1.0'
?><person><age>25</age><name>James Smith</name></person>");
        
        // Now convert this to a bean using betwixt
        // Create BeanReader
        BeanReader beanReader  = new BeanReader();
        
        // Configure the reader
        // If you're round-tripping, make sure that the configurations
are compatible!
        beanReader.getXMLIntrospector().setAttributesForPrimitives(false);
        beanReader.setMatchIDs(false);
        
        // Register beans so that betwixt knows what the xml is to be
converted to
        // Since the element mapped to a PersonBean isn't called the same, 
        // need to register the path as well
        beanReader.registerBeanClass("person", PersonBean.class);
        
        // Now we parse the xml
        PersonBean person = (PersonBean) beanReader.parse(xmlReader);
        
        // send bean to system out
        System.out.println(person);
    }
        

    public static class PersonBean {
        
        private String name;
        private int age;
        
        /** Need to allow bean to be created via reflection */
        public PersonBean() {}
        
        public PersonBean(String name, int age) {
            this.name = name;
            this.age = age;
        }
        
        public String getName() {
            return name;
        }
        
        public void setName(String name) {
            this.name = name;
        }       
        
        public int getAge() {
            return age;
        }
        
        public void setAge(int age) {
            this.age = age;
        }
        
        public String toString() {
            return "PersonBean[name='" + name + "',age='" + age + "']";
        }
    }

}

00:27:47,671 DEBUG XMLIntrospector:462 - Attempting to lookup an XML
descriptor for class: class
com.lantern.platform.tools.data.TestBetwixt$PersonBean
00:27:47,671 DEBUG XMLIntrospector:956 - Could not find betwixt file
TestBetwixt$PersonBean.betwixt
00:27:47,722 DEBUG XMLIntrospector:518 -
Populating:Bean[name=TestBetwixt$PersonBean, type=class
com.lantern.platform.tools.data.TestBetwixt$PersonBean
00:27:47,732 DEBUG XMLIntrospector:538 - Bean is standard type
00:27:47,742 DEBUG XMLIntrospector:1006 - 3 properties to be added
00:27:47,742 DEBUG XMLIntrospector:150 - Creating descriptor for
property: name=age type=int
00:27:47,742 DEBUG XMLIntrospector:167 - Property
expression=MethodExpression [method=public int
com.lantern.platform.tools.data.TestBetwixt$PersonBean.getAge()]
00:27:47,742 DEBUG XMLIntrospector:378 - Primitive type: age
00:27:47,742 DEBUG XMLIntrospector:392 - Adding property as element: age
00:27:47,742 DEBUG XMLIntrospector:220 - Created descriptor:
00:27:47,742 DEBUG XMLIntrospector:221 -
ElementDescriptor[qname=age,pname=age,class=int,singular=int,updater=MethodUpdater
[method=public void
com.lantern.platform.tools.data.TestBetwixt$PersonBean.setAge(int)],wrap=true]
00:27:47,742 DEBUG XMLIntrospector:150 - Creating descriptor for
property: name=class type=class java.lang.Class
00:27:47,742 DEBUG XMLIntrospector:167 - Property
expression=MethodExpression [method=public final native
java.lang.Class java.lang.Object.getClass()]
00:27:47,742 DEBUG XMLIntrospector:174 - Ignoring class property
00:27:47,752 DEBUG XMLIntrospector:150 - Creating descriptor for
property: name=name type=class java.lang.String
00:27:47,752 DEBUG XMLIntrospector:167 - Property
expression=MethodExpression [method=public java.lang.String
com.lantern.platform.tools.data.TestBetwixt$PersonBean.getName()]
00:27:47,752 DEBUG XMLIntrospector:378 - Primitive type: name
00:27:47,752 DEBUG XMLIntrospector:392 - Adding property as element: name
00:27:47,752 DEBUG XMLIntrospector:220 - Created descriptor:
00:27:47,752 DEBUG XMLIntrospector:221 -
ElementDescriptor[qname=name,pname=name,class=class
java.lang.String,singular=class java.lang.String,updater=MethodUpdater
[method=public void
com.lantern.platform.tools.data.TestBetwixt$PersonBean.setName(java.lang.String)],wrap=true]
00:27:47,752 DEBUG XMLIntrospector:1013 - After properties have been
added (elements, attributes, contents):
00:27:47,752 DEBUG XMLIntrospector:1014 -
[ElementDescriptor[qname=age,pname=age,class=int,singular=int,updater=MethodUpdater
[method=public void
com.lantern.platform.tools.data.TestBetwixt$PersonBean.setAge(int)],wrap=true],
ElementDescriptor[qname=name,pname=name,class=class
java.lang.String,singular=class java.lang.String,updater=MethodUpdater
[method=public void
com.lantern.platform.tools.data.TestBetwixt$PersonBean.setName(java.lang.String)],wrap=true]]
00:27:47,752 DEBUG XMLIntrospector:1015 - []
00:27:47,752 DEBUG XMLIntrospector:1016 - []
00:27:47,752 DEBUG XMLIntrospector:573 - Populated descriptor:
00:27:47,752 DEBUG XMLIntrospector:574 -
ElementDescriptor[qname=TestBetwixtPersonBean,pname=null,class=class
com.lantern.platform.tools.data.TestBetwixt$PersonBean,singular=class
com.lantern.platform.tools.data.TestBetwixt$PersonBean,updater=null,wrap=true]
00:27:47,772 DEBUG XMLIntrospector:479 - XMLBeanInfo [class=class
com.lantern.platform.tools.data.TestBetwixt$PersonBean,
descriptor=ElementDescriptor[qname=TestBetwixtPersonBean,pname=null,class=class
com.lantern.platform.tools.data.TestBetwixt$PersonBean,singular=class
com.lantern.platform.tools.data.TestBetwixt$PersonBean,updater=null,wrap=true]]
00:27:47,772 DEBUG BeanReader:335 - Adding BeanRuleSet for class
com.lantern.platform.tools.data.TestBetwixt$PersonBean
00:27:47,772 DEBUG Digester:1695 - addRuleSet() with no namespace URI
00:27:47,772 DEBUG BeanRuleSet:212 - Adding rules
to:[EMAIL PROTECTED]
00:27:48,002 DEBUG sax:1180 -
setDocumentLocator([EMAIL PROTECTED])
00:27:48,002 DEBUG sax:1214 - startDocument()
00:27:48,052 DEBUG sax:1316 -
startPrefixMapping(xml,http://www.w3.org/XML/1998/namespace)
00:27:48,052 DEBUG sax:1316 -
startPrefixMapping(xmlns,http://www.w3.org/2000/xmlns/)
00:27:48,052 DEBUG sax:1243 - startElement(,,person)
00:27:48,052 DEBUG Digester:1250 -   Pushing body text ''
00:27:48,052 DEBUG Digester:1269 -   New match='person'
00:27:48,052 DEBUG Digester:1284 -   Fire begin() for
[EMAIL PROTECTED]
00:27:48,052 DEBUG XMLIntrospector:475 - Used cached XMLBeanInfo.
00:27:48,052 DEBUG XMLIntrospector:479 - XMLBeanInfo [class=class
com.lantern.platform.tools.data.TestBetwixt$PersonBean,
descriptor=ElementDescriptor[qname=TestBetwixtPersonBean,pname=null,class=class
com.lantern.platform.tools.data.TestBetwixt$PersonBean,singular=class
com.lantern.platform.tools.data.TestBetwixt$PersonBean,updater=null,wrap=true]]
00:27:48,052 DEBUG XMLIntrospector:475 - Used cached XMLBeanInfo.
00:27:48,052 DEBUG XMLIntrospector:479 - XMLBeanInfo [class=class
com.lantern.platform.tools.data.TestBetwixt$PersonBean,
descriptor=ElementDescriptor[qname=TestBetwixtPersonBean,pname=null,class=class
com.lantern.platform.tools.data.TestBetwixt$PersonBean,singular=class
com.lantern.platform.tools.data.TestBetwixt$PersonBean,updater=null,wrap=true]]
00:27:48,062 DEBUG BeanReader:54 - Element Pushed: person
00:27:48,062 DEBUG BeanReader:98 - Creating instance of class
com.lantern.platform.tools.data.TestBetwixt$PersonBean for element
person
00:27:48,062 DEBUG XMLIntrospector:475 - Used cached XMLBeanInfo.
00:27:48,062 DEBUG XMLIntrospector:479 - XMLBeanInfo [class=class
com.lantern.platform.tools.data.TestBetwixt$PersonBean,
descriptor=ElementDescriptor[qname=TestBetwixtPersonBean,pname=null,class=class
com.lantern.platform.tools.data.TestBetwixt$PersonBean,singular=class
com.lantern.platform.tools.data.TestBetwixt$PersonBean,updater=null,wrap=true]]
00:27:48,062 DEBUG BeanReader:84 - Marked: class
com.lantern.platform.tools.data.TestBetwixt$PersonBean
00:27:48,062 DEBUG BeanReader:232 - Filling descriptor for: class
com.lantern.platform.tools.data.TestBetwixt$PersonBean
00:27:48,062 DEBUG XMLIntrospector:475 - Used cached XMLBeanInfo.
00:27:48,062 DEBUG XMLIntrospector:479 - XMLBeanInfo [class=class
com.lantern.platform.tools.data.TestBetwixt$PersonBean,
descriptor=ElementDescriptor[qname=TestBetwixtPersonBean,pname=null,class=class
com.lantern.platform.tools.data.TestBetwixt$PersonBean,singular=class
com.lantern.platform.tools.data.TestBetwixt$PersonBean,updater=null,wrap=true]]
00:27:48,062 DEBUG BeanReader:103 - Created bean PersonBean[name='null',age='0']
00:27:48,062 DEBUG sax:1316 -
startPrefixMapping(xml,http://www.w3.org/XML/1998/namespace)
00:27:48,082 DEBUG sax:1316 -
startPrefixMapping(xmlns,http://www.w3.org/2000/xmlns/)
00:27:48,082 DEBUG sax:1243 - startElement(,,age)
00:27:48,082 DEBUG Digester:1250 -   Pushing body text ''
00:27:48,082 DEBUG Digester:1269 -   New match='person/age'
00:27:48,082 DEBUG Digester:1284 -   Fire begin() for
[EMAIL PROTECTED]
00:27:48,082 DEBUG sax:941 - characters(25)
00:27:48,082 DEBUG sax:1009 - endElement(,,age)
00:27:48,082 DEBUG Digester:1012 -   match='person/age'
00:27:48,082 DEBUG Digester:1013 -   bodyText='25'
00:27:48,082 DEBUG Digester:1035 -   Fire body() for
[EMAIL PROTECTED]
00:27:48,092 DEBUG BeanRuleSet:300 - [BRS] Body with text 25
00:27:48,092 DEBUG MethodUpdater:73 - Converting primitive to int
00:27:48,142 DEBUG ConvertUtils:418 - Convert string '25' to class 'int'
00:27:48,142 DEBUG ConvertUtils:426 -   Using converter
[EMAIL PROTECTED]
00:27:48,152 DEBUG MethodUpdater:106 - Calling setter method: setAge
on bean: PersonBean[name='null',age='0'] with new value: 25
00:27:48,152 DEBUG Digester:1055 -   Popping body text ''
00:27:48,152 DEBUG Digester:1065 -   Fire end() for
[EMAIL PROTECTED]
00:27:48,152 DEBUG sax:1099 - endPrefixMapping(xml)
00:27:48,152 DEBUG sax:1099 - endPrefixMapping(xmlns)
00:27:48,152 DEBUG sax:1316 -
startPrefixMapping(xml,http://www.w3.org/XML/1998/namespace)
00:27:48,152 DEBUG sax:1316 -
startPrefixMapping(xmlns,http://www.w3.org/2000/xmlns/)
00:27:48,152 DEBUG sax:1243 - startElement(,,name)
00:27:48,152 DEBUG Digester:1250 -   Pushing body text ''
00:27:48,152 DEBUG Digester:1269 -   New match='person/name'
00:27:48,152 DEBUG Digester:1284 -   Fire begin() for
[EMAIL PROTECTED]
00:27:48,152 DEBUG sax:941 - characters(James Smith)
00:27:48,152 DEBUG sax:1009 - endElement(,,name)
00:27:48,162 DEBUG Digester:1012 -   match='person/name'
00:27:48,162 DEBUG Digester:1013 -   bodyText='James Smith'
00:27:48,162 DEBUG Digester:1035 -   Fire body() for
[EMAIL PROTECTED]
00:27:48,162 DEBUG BeanRuleSet:300 - [BRS] Body with text James Smith
00:27:48,162 DEBUG MethodUpdater:73 - Converting primitive to class
java.lang.String
00:27:48,162 DEBUG ConvertUtils:418 - Convert string 'James Smith' to
class 'java.lang.String'
00:27:48,162 DEBUG ConvertUtils:426 -   Using converter
[EMAIL PROTECTED]
00:27:48,162 DEBUG MethodUpdater:106 - Calling setter method: setName
on bean: PersonBean[name='null',age='25'] with new value: James Smith
00:27:48,162 DEBUG Digester:1055 -   Popping body text ''
00:27:48,162 DEBUG Digester:1065 -   Fire end() for
[EMAIL PROTECTED]
00:27:48,162 DEBUG sax:1099 - endPrefixMapping(xml)
00:27:48,162 DEBUG sax:1099 - endPrefixMapping(xmlns)
00:27:48,162 DEBUG sax:1009 - endElement(,,person)
00:27:48,162 DEBUG Digester:1012 -   match='person'
00:27:48,162 DEBUG Digester:1013 -   bodyText=''
00:27:48,162 DEBUG Digester:1035 -   Fire body() for
[EMAIL PROTECTED]
00:27:48,162 DEBUG BeanRuleSet:300 - [BRS] Body with text 
00:27:48,162 DEBUG Digester:1055 -   Popping body text ''
00:27:48,162 DEBUG Digester:1065 -   Fire end() for
[EMAIL PROTECTED]
00:27:48,172 ERROR Digester:1069 - End event threw exception
java.lang.ClassCastException
        at 
org.apache.commons.betwixt.io.read.ReadContext.getCurrentElement(ReadContext.java:224)
        at 
org.apache.commons.betwixt.io.read.BeanBindAction.update(BeanBindAction.java:164)
        at 
org.apache.commons.betwixt.io.read.BeanBindAction.end(BeanBindAction.java:154)
        at 
org.apache.commons.betwixt.io.BeanRuleSet$ActionMappingRule.end(BeanRuleSet.java:316)
        at org.apache.commons.digester.Digester.endElement(Digester.java:1067)
        at org.apache.xerces.parsers.AbstractSAXParser.endElement(Unknown 
Source)
        at 
org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanEndElement(Unknown
Source)
        at 
org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.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.DTDConfiguration.parse(Unknown Source)
        at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
        at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
        at org.apache.commons.digester.Digester.parse(Digester.java:1610)
        at com.lantern.platform.tools.data.TestBetwixt.main(TestBetwixt.java:42)
java.lang.ClassCastException
        at 
org.apache.commons.digester.Digester.createSAXException(Digester.java:2792)
        at 
org.apache.commons.digester.Digester.createSAXException(Digester.java:2818)
        at org.apache.commons.digester.Digester.endElement(Digester.java:1070)
        at org.apache.xerces.parsers.AbstractSAXParser.endElement(Unknown 
Source)
        at 
org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanEndElement(Unknown
Source)
        at 
org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.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.DTDConfiguration.parse(Unknown Source)
        at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
        at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
        at org.apache.commons.digester.Digester.parse(Digester.java:1610)
        at com.lantern.platform.tools.data.TestBetwixt.main(TestBetwixt.java:42)
Exception in thread "main"

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to