.. mapping ..
       <class name="com.Person" auto-complete="true">
                <map-to xml="Person" />
                <field name="name" type="java.lang.String">
                        <bind-xml name="name" node="element" />
                </field>
                <field name="dob" type="java.util.Date"
                        handler="com.common.xmljava.handlers.MyDateHandler">
                        <bind-xml name="dob" node="element" />
                </field>
        </class>

MyDateHandler with following methods
    
public Object getValue( Object object )
        throws IllegalStateException
    {
        Person root = (Person)object;
        Date value = root.getDob();
        if (value == null) return null;
        SimpleDateFormat formatter = new SimpleDateFormat(FORMAT);
        Date date = (Date)value;
        return formatter.format(date);
    }
    public void setValue( Object object, Object value )
        throws IllegalStateException, IllegalArgumentException
    {
        Person root = (Person)object;
        SimpleDateFormat formatter = new SimpleDateFormat(FORMAT);
        Date date = null;
        try {
            date = formatter.parse((String)value);
        }
        catch(ParseException px) {
            throw new IllegalArgumentException(px.getMessage());
        }
        root.setDob(date);

    }

------------------------------------ Reading Writing --------------

        public <T> void readObject(T obj, String fromXML) {
                try {
                        Reader reader = new FileReader(fromXML);

                        if (manager.getContext() == null) {
                                obj = (T)Unmarshaller.unmarshal(obj.getClass(), 
reader);
                        }
                        
                        Unmarshaller unMarshaller = 
manager.getContext().createUnmarshaller();
                        obj = (T)unMarshaller.unmarshal(reader);
                        
                } catch (IOException e) {
                        e.printStackTrace();
                }catch (ValidationException e) {
                        e.printStackTrace();
                }catch(MarshalException e){
                        e.printStackTrace();
                }
        }

        public <T> void writeObject(T obj, String toXML) {

                try {
                        Writer writer = new FileWriter(toXML);

                        if (manager.getContext() == null) {
                                Marshaller.marshal(obj, writer);
                                return;
                        } else {
                                
                                Marshaller marshaller = 
manager.getContext().createMarshaller();
                                marshaller.setWriter(writer);
                                marshaller.marshal(obj);
                                // Marshaller.marshal(order, writer);
                        }

                } catch (IOException e) {
                        e.printStackTrace();
                }catch (ValidationException e) {
                        e.printStackTrace();
                }catch(MarshalException e){
                        e.printStackTrace();
                }
        }

manager is a singleton which holds to the context. 

Thanks for your quick response, please let me know if you need more
information to reproduce this.

Regards,
Karephul
-------------


Werner Guttmann wrote:
> 
> That's odd, as there's plenty of integration tests in our test suite
> that use FieldHandler.
> 
> How about showing us the relevant parts of your mapping file, for example
> ?
> 
> Werner
> 
> karephul wrote:
>> Werner,
>> 
>> Thanks for the quick response. I just tried using FileHandler instead of
>> GeneralizedFieldHandler. It seem to have the same problem [it Marshalls
>> properly but throws exception while UnMarshalling.]
>> I debuged the code and noticed that my execution thread goes to 
>> public Object getValue( Object object ){} while writing to XML, but never
>> enters public void setValue( Object object, Object value )  {} while
>> writing
>> to object.
>> 
>> Bottom line, it does not have the right instance of FieldHandler and uses
>> default DateHandler which eventually throws exception.
>> 
>> Can you suggest me a way to achieve this or point me to some working
>> example.
>> 
>> Thanks,
>> Karephul
>> 
>> 
>> Werner Guttmann wrote:
>>> Hi,
>>>
>>> there's an issue with the use of GeneralizedFieldHandler at the moment.
>>> This has been reported before already.
>>>
>>> Regards
>>> Werner
>>>
>>> karephul wrote:
>>>> I am using the same example as shown in the documentation 
>>>> [http://www.castor.org/reference/html-single/index.html#d0e2586].
>>>>
>>>> XML produced was what I expected .. 
>>>>          <person>
>>>>            <name>Karephul</name>
>>>>            <dob>1982-03-05</dob>
>>>>    </person> 
>>>> ....
>>>>
>>>> but while Unmarshalling, it throws an exception:
>>>>
>>>> -----------------------------------------------------------------------
>>>>
>>>> DEBUG [main] (ResolveHelpers.java:143) - Ignored problem at loading
>>>> class:
>>>> java.util.DateDescriptor through class loader:
>>>> sun.misc.launcher$appclassloa...@a39137, exception:
>>>> java.lang.ClassNotFoundException: java.util.DateDescriptor
>>>> DEBUG [main] (ResolveHelpers.java:143) - Ignored problem at loading
>>>> class:
>>>> java.util.descriptors.DateDescriptor through class loader:
>>>> sun.misc.launcher$appclassloa...@a39137, exception:
>>>> java.lang.ClassNotFoundException: java.util.descriptors.DateDescriptor
>>>> DEBUG [main] (XMLClassDescriptorResolverImpl.java:626) - Called
>>>> addAllDescriptors with null or empty descriptor map
>>>> DEBUG [main] (XMLClassDescriptorResolverImpl.java:546) - Get descriptor
>>>> for:
>>>> java.util.Date found: null
>>>> DEBUG [main] (AbstractResolverClassCommand.java:50) - Now in method:
>>>> org.exolab.castor.xml.util.resolvers.ByIntrospection resolving:
>>>> java.util.Date
>>>> DEBUG [main] (ByIntrospection.java:93) - Found descriptor:
>>>> org.exolab.castor.xml.descriptors.dateclassdescrip...@1f06dc3;
>>>> descriptor
>>>> for class: Date; xml name: date
>>>> org.exolab.castor.xml.MarshalException: Bad DateTime format: 1982-03-05
>>>> DateTime is not long enough{File: [not available]; line: 2; column:
>>>> 402}
>>>>    at
>>>> org.exolab.castor.xml.Unmarshaller.convertSAXExceptionToMarshalException(Unmarshaller.java:794)
>>>>    at org.exolab.castor.xml.Unmarshaller.unmarshal(Unmarshaller.java:760)
>>>>    at org.exolab.castor.xml.Unmarshaller.unmarshal(Unmarshaller.java:626)
>>>> DEBUG [main] (XMLClassDescriptorResolverImpl.java:507) - Adding
>>>> descriptor
>>>> class for: java.util.Date descriptor:
>>>> org.exolab.castor.xml.descriptors.dateclassdescrip...@1f06dc3;
>>>> descriptor
>>>> for class: Date; xml name: date
>>>> DEBUG [main] (XMLClassDescriptorResolverImpl.java:546) - Get descriptor
>>>> for:
>>>> java.util.Date found:
>>>> org.exolab.castor.xml.descriptors.dateclassdescrip...@1f06dc3;
>>>> descriptor
>>>> for class: Date; xml name: date
>>>> DEBUG [main] (UnmarshalHandler.java:528) - #characters: 1982-03-05
>>>> DEBUG [main] (UnmarshalHandler.java:624) - #endElement: dob
>>>>    at
>>>> com.manh.doms.app.common.xmljava.Converter.readObject(Converter.java:28)
>>>>    at com.manh.MainTest.main(MainTest.java:37)
>>>> Caused by: java.lang.IllegalStateException: Bad DateTime format:
>>>> 1982-03-05
>>>> DateTime is not long enough
>>>>    at
>>>> org.exolab.castor.xml.handlers.DateFieldHandler.setValue(DateFieldHandler.java:173)
>>>>    at
>>>> org.exolab.castor.xml.UnmarshalHandler.endElement(UnmarshalHandler.java:1070)
>>>>    at
>>>> org.exolab.castor.xml.UnmarshalHandler.endElement(UnmarshalHandler.java:1161)
>>>>    at
>>>> com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement(AbstractSAXParser.java:633)
>>>>    at
>>>> com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEndElement(XMLDocumentFragmentScannerImpl.java:1241)
>>>>    at
>>>> com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(XMLDocumentFragmentScannerImpl.java:1685)
>>>>    at
>>>> com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:368)
>>>>    at
>>>> com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:834)
>>>>    at
>>>> com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:764)
>>>>    at
>>>> com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:148)
>>>>    at
>>>> com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1242)
>>>>    at org.exolab.castor.xml.Unmarshaller.unmarshal(Unmarshaller.java:748)
>>>>    ... 3 more
>>>> Caused by: java.lang.IllegalStateException: Bad DateTime format:
>>>> 1982-03-05
>>>> DateTime is not long enough
>>>>    at
>>>> org.exolab.castor.xml.handlers.DateFieldHandler.setValue(DateFieldHandler.java:173)
>>>>    at
>>>> org.exolab.castor.xml.UnmarshalHandler.endElement(UnmarshalHandler.java:1070)
>>>>    at
>>>> org.exolab.castor.xml.UnmarshalHandler.endElement(UnmarshalHandler.java:1161)
>>>>    at
>>>> com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.endElement(AbstractSAXParser.java:633)
>>>>    at
>>>> com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanEndElement(XMLDocumentFragmentScannerImpl.java:1241)
>>>>    at
>>>> com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(XMLDocumentFragmentScannerImpl.java:1685)
>>>>    at
>>>> com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:368)
>>>>    at
>>>> com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:834)
>>>>    at
>>>> com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:764)
>>>>    at
>>>> com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:148)
>>>>    at
>>>> com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1242)
>>>>    at org.exolab.castor.xml.Unmarshaller.unmarshal(Unmarshaller.java:748)
>>>>    at org.exolab.castor.xml.Unmarshaller.unmarshal(Unmarshaller.java:626)
>>>>    at
>>>> com.manh.doms.app.common.xmljava.Converter.readObject(Converter.java:28)
>>>>    at com.manh.MainTest.main(MainTest.java:37)
>>>> Caused by: java.lang.IllegalStateException: Bad DateTime format:
>>>> 1982-03-05
>>>> DateTime is not long enough
>>>>
>>>>
>>>> ----------------------------------------------------------------------------------
>>>>  
>>>>
>>>> I am using the same "mapping.xml" and hence the XMLContext to create
>>>> Marshaller and UnMarshaller. 
>>>> While Unmarshalling the XML to Object, Caster is not using the handler
>>>> ..
>>>> this is a bug.
>>>>
>>>> I am using below jars in my classpath:
>>>> castor-1.3rc1-xml.jar
>>>> castor-1.3rc1-core.jar
>>>>
>>>> Can you please advice.
>>>>
>>>> Thanks,
>>>> Karephul
>>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe from this list, please visit:
>>>
>>>     http://xircles.codehaus.org/manage_email
>>>
>>>
>>>
>>>
>> 
> 
> ---------------------------------------------------------------------
> To unsubscribe from this list, please visit:
> 
>     http://xircles.codehaus.org/manage_email
> 
> 
> 
> 

-- 
View this message in context: 
http://www.nabble.com/Unmarshalling-using-%22GeneralizedFieldHandler%22-tp21840240p21841650.html
Sent from the Castor - User mailing list archive at Nabble.com.


---------------------------------------------------------------------
To unsubscribe from this list, please visit:

    http://xircles.codehaus.org/manage_email


Reply via email to