Hi Anand,

The work-around is to define the type as a "string" in the mapping file.

--Keith


Anand Raman wrote:
> 
> Hi guys
> 
> After a little more exploration I figured out that this problem is only
> occurring when I define custom field handlers for the date fields. For
> fields with other attribute types I am able to marshal and unmarshal
> successfully.
> 
> Has any body noticed this behaviour before. I found reference to this
> email post http://hypermail.linklord.com/castor-dev/2003/Oct/1614.html ,
> not sure if the patch has made its way into version 0.9.5.2. Any ideas
> 
> anand
> 
> -----Original Message-----
> From: Anand Raman [mailto:[EMAIL PROTECTED]
> Sent: Monday, November 10, 2003 2:18 PM
> To: [EMAIL PROTECTED]
> Subject: [castor-dev] unmarshalling doesnt invoke custom field handler
> 
> hi guys
> 
> I have written a custom field handler to convert a java.util.Date
> attribute to the format ('yyyyMMdd') I require.
> 
> The custom handler works fine with the marshalling framework. However
> during unmarshalling it throws a IllegalStateException. It is evident
> from the stack tarce that my custom field handler is not being invoked
> while unmarshalling the field. I am not using the static methods defined
> on the UnMarshaller.
> 
> Questions
> (1) Can you please shed light on what I am doing wrong.
> 
> CUSTOM HANDLER
> import org.exolab.castor.mapping.AbstractFieldHandler;
> 
> public class MyNewDateHandler extends AbstractFieldHandler {
> 
>         private DateFormat formatter = null;
> 
>         public MyNewDateHandler() {
>                 super();
>                 formatter = new SimpleDateFormat("yyyyMMdd");
>         }
> 
>         public Object getValue(Object object) throws
> IllegalStateException {
>                 SimpleVO vo = null;
>                 String formattedDate = null;
>                 vo = (SimpleVO) object;
>                 formattedDate = formatter.format(vo.getOrderDate());
>                 return formattedDate;
>         }
> 
>     .....
>     .....
>     .....
>         public void setValue(Object arg0, Object arg1)
>                 throws IllegalStateException, IllegalArgumentException {
>                 Date d = null;
>         (SimpleVO)arg0).setDate(formatter.parse((String)arg1))
>         }
> 
> }
> 
> public class SimpleVO {
> 
>         private Date orderDate = null;
>         private int quantity = 0;
>         private float amount = 0.0f;
> 
>         public Date getOrderDate() {
>                 return this.orderDate;
>         }
> 
>         public void setOrderDate(Date orderDate) {
>                 this.orderDate = orderDate;
>         }
> 
>         public int getQuantity() {
>                 return this.quantity;
>         }
> 
>         public void setQuantity(int quantity) {
>                 this.quantity = quantity;
>         }
> 
>         public void setAmount(float amount) {
>                 this.amount = amount;
>         }
> 
>         public float getAmount() {
>                 return this.amount;
>         }
> 
>         public SimpleVO() {
>                 Random r = new Random();
>                 this.orderDate = Calendar.getInstance().getTime();
>                 this.quantity = r.nextInt();
>                 this.amount = r.nextFloat() * quantity;
>         }
> }
> 
> This is the stack trace which I encounter while unmarshalling the xml
> org.xml.sax.SAXException: unable to add 'order-date' to <Order> due to
> the following exception:
> 
> >>>--- Begin Exception ---<<<
> java.lang.IllegalStateException: Invalid dateTime format: 20031110
>         at
> org.exolab.castor.xml.handlers.DateFieldHandler.setValue(DateFieldHandle
> r.java:202)
>         at
> org.exolab.castor.xml.UnmarshalHandler.endElement(UnmarshalHandler.java:
> 852)
>         at
> org.exolab.castor.xml.UnmarshalHandler.endElement(UnmarshalHandler.java:
> 918)
>         at
> org.apache.xerces.parsers.AbstractSAXParser.endElement(Unknown Source)
>         at
> org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanEndElement(Unknown
> Source)
>         at
> org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDis
> patcher.dispatch(Unknown Source)
>         at
> org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unkno
> wn Source)
>         at org.apache.xerces.parsers.XML11Configuration.parse(Unknown
> Source)
>         at org.apache.xerces.parsers.DTDConfiguration.parse(Unknown
> Source)
>         at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
>         at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown
> Source)
>         at
> org.exolab.castor.xml.Unmarshaller.unmarshal(Unmarshaller.java:583)
>         at JDOTester.testUnMarshalling(JDOTester.java:66)
>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>         at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.jav
> a:39)
>         at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessor
> Impl.java:25)
>         at java.lang.reflect.Method.invoke(Method.java:324)
>         at junit.framework.TestCase.runTest(TestCase.java:166)
>         at junit.framework.TestCase.runBare(TestCase.java:140)
>         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:131)
>         at junit.framework.TestSuite.runTest(TestSuite.java:173)
>         at junit.framework.TestSuite.run(TestSuite.java:168)
>         at
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTe
> stRunner.java:392)
>         at
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRun
> ner.java:276)
>         at
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRu
> nner.java:167)
> >>>---- End Exception ----<<<
> 
>         at
> org.exolab.castor.xml.UnmarshalHandler.endElement(UnmarshalHandler.java:
> 885)
>         at
> org.exolab.castor.xml.UnmarshalHandler.endElement(UnmarshalHandler.java:
> 918)
>         at
> org.apache.xerces.parsers.AbstractSAXParser.endElement(Unknown Source)
>         at
> org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanEndElement(Unknown
> Source)
>         at
> org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDis
> patcher.dispatch(Unknown Source)
>         at
> org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unkno
> wn Source)
>         at org.apache.xerces.parsers.XML11Configuration.parse(Unknown
> Source)
>         at org.apache.xerces.parsers.DTDConfiguration.parse(Unknown
> Source)
>         at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
>         at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown
> Source)
>         at
> org.exolab.castor.xml.Unmarshaller.unmarshal(Unmarshaller.java:583)
>         at JDOTester.testUnMarshalling(JDOTester.java:66)
>         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
>         at
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.jav
> a:39)
>         at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessor
> Impl.java:25)
>         at java.lang.reflect.Method.invoke(Method.java:324)
>         at junit.framework.TestCase.runTest(TestCase.java:166)
>         at junit.framework.TestCase.runBare(TestCase.java:140)
>         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:131)
>         at junit.framework.TestSuite.runTest(TestSuite.java:173)
>         at junit.framework.TestSuite.run(TestSuite.java:168)
>         at
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTe
> stRunner.java:392)
>         at
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRun
> ner.java:276)
>         at
> org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRu
> nner.java:167)
> 
> MAPPING
> <mapping>
>     <description>mapping for simple vo</description>
>     <class  name="SimpleVO">
>         <map-to xml="Order"/>
>         <field  name="quantity"
>                 type="int">
>             <bind-xml name="quantity" node="element"/>
>         </field>
> 
>         <field name="amount"
>                type="float">
>                <bind-xml name="net-amount" node="element"/>
>         </field>
> 
>         <field name="orderDate" type="date" handler="MyNewDateHandler">
>                 <bind-xml name="order-date" node="element"/>
>         </field>
>     </class>
> </mapping>
> 
> CODE SNIPPET
> Mapping mapping = new Mapping();
> mapping.loadMapping("d:/work/test/m1");
> 
> Unmarshaller unmarshaller = new Unmarshaller(SimpleVO.class);
> unmarshaller.setLogWriter(new PrintWriter(new
> FileWriter("d:/work/test/U.log")));
> unmarshaller.setMapping(mapping);
> 
> InputSource is = new InputSource(new
> FileReader("d:/work/test/simplevo.xml"));
> SimpleVO vo = (SimpleVO)unmarshaller.unmarshal(is);
> 
> Thanks for your time
> anand
> 
> -----------------------------------------------------------
> If you wish to unsubscribe from this mailing, send mail to
> [EMAIL PROTECTED] with a subject of:
>         unsubscribe castor-dev
> 
> -----------------------------------------------------------
> If you wish to unsubscribe from this mailing, send mail to
> [EMAIL PROTECTED] with a subject of:
>         unsubscribe castor-dev

----------------------------------------------------------- 
If you wish to unsubscribe from this mailing, send mail to
[EMAIL PROTECTED] with a subject of:
        unsubscribe castor-dev

Reply via email to