You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@commons.apache.org by "Sweetland, Jesse" <JS...@talk.com> on 2006/09/01 14:54:41 UTC
RE: [Betwixt] Unmarshalling Collections
Found the problem. I needed <addDefaults add-properties="false"
guess-name="false"/> on all of my mappings, and I needed to add addFoo()
methods for my collections. Seems to be working now.
-----Original Message-----
From: Sweetland, Jesse [mailto:JSweetland@talk.com]
Sent: Thursday, August 31, 2006 2:18 PM
To: commons-user@jakarta.apache.org
Subject: [Betwixt] Unmarshalling Collections
I'm getting "Could not create instance of type: java.util.Set" errors when I
try to unmarshal an XML document. Here is the stack trace:
java.lang.InstantiationException: java.util.Set
at java.lang.Class.newInstance0(Class.java:335)
at java.lang.Class.newInstance(Class.java:303)
at
org.apache.commons.betwixt.io.read.ChainedBeanCreatorFactory$2.create(Chaine
dBeanCreatorFactory.java:115)
at
org.apache.commons.betwixt.io.read.BeanCreationList$ChainWorker.create(BeanC
reationList.java:128)
at
org.apache.commons.betwixt.io.read.ChainedBeanCreatorFactory$1.create(Chaine
dBeanCreatorFactory.java:62)
at
org.apache.commons.betwixt.io.read.BeanCreationList$ChainWorker.create(BeanC
reationList.java:128)
at
org.apache.commons.betwixt.io.read.ChainedBeanCreatorFactory$3.create(Chaine
dBeanCreatorFactory.java:160)
at
org.apache.commons.betwixt.io.read.BeanCreationList$ChainWorker.create(BeanC
reationList.java:128)
at
org.apache.commons.betwixt.io.read.BeanCreationList.create(BeanCreationList.
java:68)
at
org.apache.commons.betwixt.io.read.BeanBindAction.createBean(BeanBindAction.
java:209)
at
org.apache.commons.betwixt.io.read.BeanBindAction.begin(BeanBindAction.java:
71)
at
org.apache.commons.betwixt.io.BeanRuleSet$ActionMappingRule.nextAction(BeanR
uleSet.java:286)
at
org.apache.commons.betwixt.io.BeanRuleSet$ActionMappingRule.begin(BeanRuleSe
t.java:255)
at
org.apache.commons.digester.Digester.startElement(Digester.java:1273)
at
com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(Ab
stractSAXParser.java:533)
at
com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanS
tartElement(XMLDocumentFragmentScannerImpl.java:878)
at
com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$Fragm
entContentDispatcher.dispatch(XMLDocumentFragmentScannerImpl.java:1693)
at
com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanD
ocument(XMLDocumentFragmentScannerImpl.java:368)
at
com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Con
figuration.java:834)
at
com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Con
figuration.java:764)
at
com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:14
8)
at
com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractS
AXParser.java:1242)
at org.apache.commons.digester.Digester.parse(Digester.java:1586)
at
com.talk.domain.betwixt.BetwixtHelper.unmarshal(BetwixtHelper.java:70)
at
com.talk.domain.betwixt.BetwixtHelper.unmarshal(BetwixtHelper.java:49)
at
com.talk.domain.betwixt.test.CreateOrderRequestTest.unmarshal(CreateOrderReq
uestTest.java:67)
at
com.talk.domain.betwixt.test.CreateOrderRequestTest.testConsumeCreateOrderRe
quest(CreateOrderRequestTest.java:98)
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.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.run(JUnitTestRu
nner.java:297)
at
org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.launch(JUnitTes
tRunner.java:672)
at
org.apache.tools.ant.taskdefs.optional.junit.JUnitTestRunner.main(JUnitTestR
unner.java:567)
I have an Customer class that contains a java.util.Set of Account classes.
The XML, mappings, and classes look like this
XML:
<cust>
<accts>
<acct> ... </acct>
<acct> ... </acct>
</accts>
</cust>
Customer.betwixt:
<?xml version="1.0"?>
<info>
<element name="cust">
<element name="accts">
<element name="acct" property="accts"/>
</element>
</element>
</info>
Customer.java:
public class Customer {
private Set<Account> _accounts = new LinkedHashSet<Account>();
public Set<Account> getAccounts() { return _accounts; }
public void setAccounts(Set<Account> accounts) { _accounts =
accounts; }
}
I have tried to make a custom bean creation chain that will instantiate
java.util.LinkedHashSet when the bean type is java.util.Set. The error goes
away, but the collection is not populated. I looked through the source code
and it looks like isCollective() is never called when reading XML. Is this
a bug, or am I doing something wrong?
Thanks,
- Jesse