Hi,
We are using Castor XML for marshaling / unmarshaling java objects.
We provide map files to specify xml tags to use.
I am having problem unmarshaling fields with simple types "char" and "byte".
In the map file I specify the type of the field as "char" and "byte"
respectively.
But it blows with the following exception:
java.lang.IllegalArgumentException: Type conversion error: could not set
value of value(java.lang.Character)
with value of type java.lang.String
The marshaling part does not seem to have any problem only unmarshaling
fails with the specified mapping file.
The marshaling/unmarshaling work properly if I don't specify any mapping
file (but I need to use mapping files).
Did I miss anything here. I even tried specifying "java.lang.Character.TYPE"
as the type instead of "char".
I still does not work. Please let me know what should I do.
Attached herewith are the files I use.
Thanks,
Bikash.
// JAVA SOURCE FILE
public class Temp
{
protected char value;
public Temp()
{
}
public char getValue()
{
return value;
}
public void setValue(char c)
{
this.value = c;
}
public String toString()
{
return "Value = " + value;
}
}
// MAP FILE
<?xml version="1.0"?>
<!DOCTYPE mapping PUBLIC "-//EXOLAB/Castor Object Mapping DTD Version
1.0//EN"
"http://Castor.exolab.org/mapping.dtd">
<mapping>
<class name="Temp">
<map-to xml="Data"/>
<field name="value"
type="char">
<bind-xml name="val" node="element"/>
</field>
</class>
</mapping>
// TEST FILE
import java.io.FileReader;
import java.io.FileWriter;
import org.exolab.castor.mapping.Mapping;
import org.exolab.castor.xml.Marshaller;
import org.exolab.castor.xml.Unmarshaller;
public class Test
{
public static void main(String[] args)
{
try
{
Temp temp1 = new Temp();
temp1.setValue('x');
System.out.println("Before : " + temp1);
FileWriter writer = new FileWriter("\\temp\\temp.xml");
Marshaller marshaller = new Marshaller(writer);
Mapping mapping = new Mapping();
mapping.loadMapping("\\temp\\mapping.xml");
marshaller.setMapping(mapping);
marshaller.marshal(temp1);
FileReader reader = new FileReader("\\temp\\temp.xml");
Unmarshaller unmarshaller = new Unmarshaller(Temp.class);
unmarshaller.setMapping(mapping);
Temp temp2 = (Temp) unmarshaller.unmarshal(reader);
System.out.println("After : " + temp2);
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
}
// THE EXCEPTION
org.xml.sax.SAXException: unable to add 'val' to <Data> due to the following
exception:
>>>--- Begin Exception ---<<<
java.lang.IllegalArgumentException: Type conversion error: could not set
value of value(java.lang.Character) with value of type java.lang.String
at
org.exolab.castor.mapping.loader.FieldHandlerImpl.setValue(FieldHandlerImpl.
java:460) at
org.exolab.castor.xml.UnmarshalHandler.endElement(UnmarshalHandler.java:522)
at org.apache.xerces.parsers.SAXParser.endElement(SAXParser.java:1392) at
org.apache.xerces.validators.common.XMLValidator.callEndElement(XMLValidator
.java:1456) at
org.apache.xerces.framework.XMLDocumentScanner$ContentDispatcher.dispatch(XM
LDocumentScanner.java:1205) at
org.apache.xerces.framework.XMLDocumentScanner.parseSome(XMLDocumentScanner.
java:381) at
org.apache.xerces.framework.XMLParser.parse(XMLParser.java:1081) at
org.exolab.castor.xml.Unmarshaller.unmarshal(Unmarshaller.java:338) at
org.exolab.castor.xml.Unmarshaller.unmarshal(Unmarshaller.java:270) at
Test.main(Test.java:34) >>>---- End Exception ----<<<
at
org.exolab.castor.xml.UnmarshalHandler.endElement(UnmarshalHandler.java:552)
at org.apache.xerces.parsers.SAXParser.endElement(SAXParser.java:1392) at
org.apache.xerces.validators.common.XMLValidator.callEndElement(XMLValidator
.java:1456) at
org.apache.xerces.framework.XMLDocumentScanner$ContentDispatcher.dispatch(XM
LDocumentScanner.java:1205) at
org.apache.xerces.framework.XMLDocumentScanner.parseSome(XMLDocumentScanner.
java:381) at
org.apache.xerces.framework.XMLParser.parse(XMLParser.java:1081) at
org.exolab.castor.xml.Unmarshaller.unmarshal(Unmarshaller.java:338) at
org.exolab.castor.xml.Unmarshaller.unmarshal(Unmarshaller.java:270) at
Test.main(Test.java:34)
-----------------------------------------------------------
If you wish to unsubscribe from this mailing, send mail to
[EMAIL PROTECTED] with a subject of:
unsubscribe castor-dev