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]
-------------------------------------------------

Reply via email to