Hi Castor group,
I have a big problem. I have nn my XSD schema an element called 'flag'.
It is a restriction of two values: "FLAG" and "" (empty string).
See follow XSD definition:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema targetNamespace="http://www.test.com/personal"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:otto.b2b.personal="http://www.test.com/personal"
elementFormDefault="qualified" attributeFormDefault="unqualified">
<xs:element name="person">
<xs:complexType>
<xs:sequence>
<xs:element name="name" type="xs:string"/>
<xs:element name="age" type="xs:decimal"/>
<xs:element name="workSince" type="xs:positiveInteger" nillable="true" />
<xs:element name="flag">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:enumeration value="FLAG"/>
<xs:enumeration value=""/>
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema>
I use a castor generated classes. On unmarshall for follow xml:
<?xml version="1.0" encoding="UTF-8"?>
<person xmlns="http://www.test.com/personal"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.test.com/personal
http://www.test.com/person.xsd">
<name>Isabelle</name>
<age>1234</age>
<workSince>22</workSince>
<flag></flag>
</person>
I recieve exception:
ValidationException: The field '_flag' (whose xml name is 'flag') is a required field.;
- location of error: XPATH: person
at org.exolab.castor.xml.FieldValidator.validate(FieldValidator.java:203)
at
org.exolab.castor.xml.util.XMLClassDescriptorImpl.validate(XMLClassDescriptorImpl.java:892)
at org.exolab.castor.xml.Validator.validate(Validator.java:122)
at org.exolab.castor.xml.UnmarshalHandler.endElement(UnmarshalHandler.java:843)
at
org.exolab.castor.xml.UnmarshalHandler.endElement(UnmarshalHandler.java:1038)
at
org.apache.xerces.parsers.AbstractSAXParser.endElement(AbstractSAXParser.java:559)
at
org.apache.xerces.impl.XMLNamespaceBinder.endElement(XMLNamespaceBinder.java:646)
at
org.apache.xerces.impl.dtd.XMLDTDValidator.handleEndElement(XMLDTDValidator.java:2978)
at
org.apache.xerces.impl.dtd.XMLDTDValidator.endElement(XMLDTDValidator.java:918)
at
org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.handleEndElement(XMLDocumentFragmentScannerImpl.java:1145)
at
org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanEndElement(XMLDocumentFragmentScannerImpl.java:988)
at
org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(XMLDocumentFragmentScannerImpl.java:1446)
at
org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:333)
at
org.apache.xerces.parsers.StandardParserConfiguration.parse(StandardParserConfiguration.java:529)
at
org.apache.xerces.parsers.StandardParserConfiguration.parse(StandardParserConfiguration.java:585)
at org.apache.xerces.parsers.XMLParser.parse(XMLParser.java:147)
at
org.apache.xerces.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1148)
at org.exolab.castor.xml.Unmarshaller.unmarshal(Unmarshaller.java:605)
at org.exolab.castor.xml.Unmarshaller.unmarshal(Unmarshaller.java:513)
at ejb.tools.Mapper.unmarshall(Mapper.java:106)
at ejb.tools.Mapper.mapXmlToObject(Mapper.java:48)
.........
But <flag></flag> must be correct value!
If I use <flag> </flag> (with one or more blanks) it works. But this is incorrect
restriction value.
If I do marshall for flag-value == "" (empty string) as setFlag(""),
I receive the xml which contains "<flag></flag>". It's very nteresting behavior!
I use castor version 0.9.5.3
Can anyone help me?
Thanks,
Robert
-----------------------------------------------------------
If you wish to unsubscribe from this mailing, send mail to
[EMAIL PROTECTED] with a subject of:
unsubscribe castor-dev