Yes! That does do it! I specified "type" in CostItems' field descriptor in the test case and it stopped breaking; I made the change in the real system and it appears to work as well. I'm really going to have lunch now, and then will take out all of the debugging crap I have in there and see if the thing still really works for real -- but I am extremely optimistic. Thank you so much -- you're a genius.
Jessica On Tue, Dec 20, 2005 at 12:46:41PM -0500, Stephen Bash wrote: > Jessica- > > I don't have a lot of time this afternoon to dig into details, but > looking at the NPE stacktrace, I wonder if defining types for all your > fields would help? For example: > > <class name="com.ingenta.ics.ecommerce.api.item.Cost"> > <description>Mapping for Cost</description> > <field name="costItems" collection="set" > type="com.ingenta.ics.ecommerce.api.item.CostItem" > container="false"> > <bind-xml name="costItems"/> > </field> > ... > </class> > > I'm not sure it is possible to do this for the Map (because it really > has two types, the key and the value), but for all the sets, lists, and > arrays, it might help (essentially what is the class inside the > collection). Basically, if you look in XMLFieldDescriptorImpl, where > you're getting there exception is the second line of: > > hash = 17 * _fieldName.hashCode(); > hash = hash * 17 * _fieldType.hashCode(); > > So I wonder if Castor is creating FieldDescriptors with null _fieldTypes > and that throws the NPE. > > Might not help anything, but it is a thought. > > Stephen > > > Jessica Perry Hekman wrote: > >On Tue, Dec 20, 2005 at 11:13:04AM -0500, Stephen Bash wrote: > > > > > >>The method I've been using more is nested class mappings. Basically you > >>take your class mapping for org.exolab.castor.mapping.MapItem (from your > >>first e-mail), and place it inside your bind-xml element like so: > >> > >> <field name="myHashMap" collection="map"> > >> <bind-xml name="hash-item"> > >> <class name="org.exolab.castor.mapping.MapItem"> > >> <field name="key" type="string"> > >> <bind-xml name="key" node="attribute" /> > >> </field> > >> <field name="value" type="insert class here"> > >> <bind-xml name="value" /> > >> </field> > >> </class> > >> </bind-xml> > >> </field> > > > > > >Ahhh yes, this makes sense (sorry Werner, I couldn't get this far on my > >own :) > > > >However of course things still break. Marshalling gives me: > > > >[...] > > <hash-item key="_testPricingSub4"> > > <value> > > <costItems> > > <costItem> > > <currency>GBP</currency> > > <amount>10.00</amount> > > <exchangeRate>1</exchangeRate> > > <type>price</type> > > </costItem> > > <costItem> > > <currency>GBP</currency> > > <amount>1.75</amount> > > <exchangeRate>1</exchangeRate> > > <type>tax</type> > > </costItem> > > </costItems> > > <preTaxAmount>10.00</preTaxAmount> > > <postTaxAmount>11.75</postTaxAmount> > > <taxRate>0.175</taxRate> > > </value> > > </hash-item> > >[...] > > > >but passing that back to unmarshalling gives me: > > > >1) > >testQuotation(com.ingenta.ics.ecommerce.api.item.QuotationMarshallingTest)java.lang.NullPointerException > > at > >org.exolab.castor.xml.util.XMLFieldDescriptorImpl.hashCode(XMLFieldDescriptorImpl.java:416) > > at java.util.HashMap.hash(HashMap.java:261) > > > >I seem to see this hashCode error a fair amount; the last time I managed > >to get a test case for it and reported it as a bug, but then found a > >workaround. I'll try to do the same this time, but so far this time I've > >been failing miserably at making my test cases break! > > > >I'll attach the description file in case anyone can eyeball that and tell > >where the problem might be. I'm rapidly losing patience with trying to > >figure out where in this enormous system we have set things up poorly, so > >that Castor breaks, but I don't seem to have any option but to keep > >banging my head against it :P > > > >Jessica > > > > > > > > > >------------------------------------------------------------------------ > > > >------------------------------------------------- > >If you wish to unsubscribe from this list, please > >send an empty message to the following address: > > > >[EMAIL PROTECTED] > >------------------------------------------------- > > ------------------------------------------------- > If you wish to unsubscribe from this list, please > send an empty message to the following address: > > [EMAIL PROTECTED] > ------------------------------------------------- > ------------------------------------------------- If you wish to unsubscribe from this list, please send an empty message to the following address: [EMAIL PROTECTED] -------------------------------------------------

