Done: http://jira.codehaus.org/browse/CASTOR-1277
Note that I made it more clear in my bug report that in fact the problem appears to lie entirely with the list syntax; it appears to have nothing to do with the FieldHandler (I was wrong originally). Thanks! Jessica On Thu, Dec 01, 2005 at 10:55:14PM -0600, Keith Visco wrote: > > Hi Jessica, > > Thanks for the test case, I'll give this a try here and see what I can > find out. If you have a moment, can you open up a bug report > (http://jira.codehaus.org/browse/CASTOR) on this and let me know the bug > number so I can then assign it to myself. This way we can track the > progress on the issue. > > Thanks, > > --Keith > > Jessica Perry Hekman wrote: > >Okay! I got it breaking :) > > > >The problem appears to occur NOT when I add in the FieldHandler for > >java.util.Currency but when I remove these lines > > > > <field name="prices" collection="set" > > type="com.ingenta.ics.ecommerce.api.item.Price"> > > <bind-xml name="price"/> > > </field> > > > >and replace them with > > > > <field name="prices" collection="set" container="false"/> > > > >I made that switch in the first place because the Set of Price objects > >(each of which contain a Currency) was unmarshalling as null and I > >couldn't figure out why. I'll keep investigating that. In the meantime, > >though, you can see my test case (which does not use Price objects -- > >those are too complex -- it uses CurrencyContainer objects for > >simplicity's sake) at: > > > > http://pendaran.arborius.net/~jphekman/testcase.tgz > > > >Untar and set your classpath like so > > > > export > > CLASSPATH=$CLASSPATH:build/classes:lib/castor-xml.jar:lib/xml-apis.jar:lib/xercesImpl.jar:lib/commons-logging.jar > > > >and then run like so > > > > java com.ingenta.Mapper > > > >and expect to see the error > > > >Exception in thread "main" java.lang.NullPointerException > > at > >org.exolab.castor.xml.util.XMLFieldDescriptorImpl.hashCode(XMLFieldDescriptorImpl.java:416) > > at java.util.HashMap.hash(HashMap.java:261) > > > >...although perhaps all that is unnecessary, and perhaps it is clear to > >you what the problem is, now that I know what syntax change caused it. > > > >Thank you very much! > > > >Jessica > > > > > >On Wed, Nov 30, 2005 at 10:57:36PM -0600, Keith Visco wrote: > > > >>Hi Jessica, > >> > >>I haven't seen that problem before. Is it possible for you to send me a > >>working (ie compilable and demonstrates the problem) test case which I > >>can run locally? > >> > >>--Keith > >> > >>Jessica Perry Hekman wrote: > >> > >>>Hi all. I have a class which has a method (getCurrency()) which returns > >>>type java.util.Currency. The doc seems to suggest that writing a custom > >>>field handler is the way to proceed, and provides good instruction on > >>>how to do so. I created: > >>> > >>>package com.ingenta.ics.api.rest.product; > >>> > >>>import org.exolab.castor.mapping.GeneralizedFieldHandler; > >>>import org.exolab.castor.mapping.FieldDescriptor; > >>> > >>>import java.util.Currency; > >>> > >>>/** > >>>* The FieldHandler for the Currency class > >>>**/ > >>>public class CurrencyFieldHandler > >>> extends GeneralizedFieldHandler > >>>{ > >>> > >>> public CurrencyFieldHandler() { > >>> super(); > >>> } > >>> > >>> public Object convertUponGet(Object value) { > >>> if (value == null) return null; > >>> Currency currency = (Currency)value; > >>> return currency.getCurrencyCode(); > >>> } > >>> > >>> > >>> public Object convertUponSet(Object value) { > >>> return Currency.getInstance((String)value); > >>> } > >>> > >>> public Class getFieldType() { > >>> return Currency.class; > >>> } > >>> > >>> public Object newInstance( Object parent ) > >>> throws IllegalStateException > >>> { > >>> //-- Since it's marked as a string...just return null, > >>> //-- it's not needed. > >>> return null; > >>> } > >>> > >>>} > >>> > >>>and in the XML: > >>> > >>><class name="com.ingenta.ics.ecommerce.api.item.Price"> > >>> <map-to xml="price"/> > >>> <field name="id" type="com.ingenta.ics.item.Id" /> > >>> <field name="amount" type="big-decimal"/> > >>> <field name="currency" type="string" > >>> handler="com.ingenta.ics.api.rest.product.CurrencyFieldHandler"/> > >>></class> > >>> > >>>Now, marshalling works beautifully. Unmarshalling gives me: > >>> > >>>1) > >>>testProduct(com.ingenta.ics.api.item.ProductMarshallingTest)java.lang.NullPointerException > >>> at > >>>org.exolab.castor.xml.util.XMLFieldDescriptorImpl.hashCode(XMLFieldDescriptorImpl.java:416) > >>> at java.util.HashMap.hash(HashMap.java:261) > >>> at java.util.HashMap.containsKey(HashMap.java:339) > >>> > >>>I am not sure what's going on -- was I supposed to implement hashCode? > >>>Castor's doc doesn't say so. Is this error familiar to anyone? > >>> > >>>Thanks in advance, > >>> > >>>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] > >------------------------------------------------- > > > > > > > ------------------------------------------------- > 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] -------------------------------------------------

