Hi Werner,

Adding 'org.exolab.castor.xml.lenient.sequence.order=true' to my
castor.properties file fixed the problem!

Thank you,
Jennifer 

-----Original Message-----
From: Werner Guttmann [mailto:[EMAIL PROTECTED] 
Sent: Friday, 31. October, 2008 11:55
To: [email protected]
Subject: Re: [castor-user] Re: problem with xs:choice order indicator

Hi Jennifer,

What happens in your case if you enable lenient sequence oder validation
?

Regards
Werner

Jennifer Thorsley wrote:
> Hi Werner,
> 
> I'm having what I think is the same problem. I have (a very simplified
> xml):
> 
> <?xml version="1.0" encoding="UTF-8"?> <ROOT attr="attr" >
>     <C>C1</C>
>     <C>C2</C>
>     <C>C3</C>
> </ROOT>
> 
> Using source generated with the following xsd,
> 
> <?xml version="1.0" encoding="UTF-8" standalone="no"?> <xsd:schema 
> xmlns:xsd="http://www.w3.org/2001/XMLSchema";>
> <xsd:element name="ROOT">
>         <xsd:complexType>
>             <xsd:sequence>
>                    <xsd:choice>
>                     <xsd:element maxOccurs="unbounded" ref="A"/>
>                     <xsd:element maxOccurs="unbounded" ref="B"/>
>                     <xsd:element maxOccurs="unbounded" ref="C"/>
>                 </xsd:choice>
>             </xsd:sequence>
>             <xsd:attribute name="attr" type="xsd:string"/>
>          </xsd:complexType>
> </xsd:element>
> <xsd:element name="A">
>       <xsd:simpleType>
>               <xsd:restriction base="xsd:string"/>
>       </xsd:simpleType>
> </xsd:element>
> <xsd:element name="B">
>       <xsd:simpleType>
>               <xsd:restriction base="xsd:string"/>
>       </xsd:simpleType>
> </xsd:element>
> <xsd:element name="C">
>       <xsd:simpleType>
>               <xsd:restriction base="xsd:string"/>
>       </xsd:simpleType>
> </xsd:element>
> </xsd:schema>
> 
> The above xml validates with regards to the xsd and I am able to 
> marshal it.
> 
> Now I use a slightly different xsd with an additional element in the
> sequence:
> 
> <?xml version="1.0" encoding="UTF-8" standalone="no"?> <xsd:schema 
> xmlns:xsd="http://www.w3.org/2001/XMLSchema";>
> <xsd:element name="ROOT">
>         <xsd:complexType>
>             <xsd:sequence>
>                  <xsd:element name="X" type="XType" minOccurs="0"/>
>                    <xsd:choice>
>                     <xsd:element maxOccurs="unbounded" ref="A"/>
>                     <xsd:element maxOccurs="unbounded" ref="B"/>
>                     <xsd:element maxOccurs="unbounded" ref="C"/>
>                 </xsd:choice>
>             </xsd:sequence>
>             <xsd:attribute name="attr" type="xsd:string"/>
>          </xsd:complexType>
> </xsd:element>
> <xsd:element name="A">
>       <xsd:simpleType>
>               <xsd:restriction base="xsd:string"/>
>       </xsd:simpleType>
> </xsd:element>
> <xsd:element name="B">
>       <xsd:simpleType>
>               <xsd:restriction base="xsd:string"/>
>       </xsd:simpleType>
> </xsd:element>
> <xsd:element name="C">
>       <xsd:simpleType>
>               <xsd:restriction base="xsd:string"/>
>       </xsd:simpleType>
> </xsd:element>
> <xsd:complexType name="XType">
>     <xsd:attribute name="xname" type="xsd:string" use="required"/> 
> </xsd:complexType> </xsd:schema>
> 
> The xml still validates with regards to the schema (I'm using XMLSpy).
> But when I try to marshal I get the following error:
> 
> org.exolab.castor.xml.MarshalException: Element with name C passed to 
> type ROOT in incorrect order; It is not allowed to be the last element

> of this sequence!{File: [not available]; line: 4; column: 8}
>       at
> org.exolab.castor.xml.Unmarshaller.convertSAXExceptionToMarshalExcepti
> on
> (Unmarshaller.java:794)
>       at
> org.exolab.castor.xml.Unmarshaller.unmarshal(Unmarshaller.java:760)
>       at ch.castor.example.tests.TestChoice.main(TestChoice.java:26)
> Caused by: ValidationException: Element with name C passed to type 
> ROOT in incorrect order; It is not allowed to be the last element of 
> this sequence!
>       at
> org.exolab.castor.xml.util.XMLClassDescriptorImpl.checkDescriptorForCo
> rr
> ectOrderWithinSequence(XMLClassDescriptorImpl.java:340)
>       at
> org.exolab.castor.xml.MarshalFramework$InternalXMLClassDescriptor.chec
> kD
> escriptorForCorrectOrderWithinSequence(MarshalFramework.java:785)
>       at
> org.exolab.castor.xml.UnmarshalHandler.startElement(UnmarshalHandler.j
> av
> a:1943)
>       at
> org.exolab.castor.xml.UnmarshalHandler.startElement(UnmarshalHandler.j
> av
> a:1420)
>       at
> com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElem
> en
> t(AbstractSAXParser.java:501)
>       at
> com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl
> .s
> canStartElement(XMLDocumentFragmentScannerImpl.java:1357)
>       at
> com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl
> $F
> ragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2740)
>       at
> com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XM
> LD
> ocumentScannerImpl.java:647)
>       at
> com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl
> .s
> canDocument(XMLDocumentFragmentScannerImpl.java:508)
>       at
> com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XM
> L1
> 1Configuration.java:807)
>       at
> com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XM
> L1
> 1Configuration.java:737)
>       at
> com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.j
> av
> a:107)
>       at
> com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Abs
> tr
> actSAXParser.java:1205)
>       at
> com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.pa
> rs
> e(SAXParserImpl.java:522)
>       at
> org.exolab.castor.xml.Unmarshaller.unmarshal(Unmarshaller.java:748)
>       ... 1 more
> 
> However the xml:
> 
> <?xml version="1.0" encoding="UTF-8"?> <ROOT attr="attr" >
>     <C>C1</C>
> </ROOT>
> 
> Validates and can be marshalled.
> 
> Any thoughts on this? Have I done something wrong?
> 
> Cheers,
> Jennifer
> 
> -----Original Message-----
> From: Werner Guttmann [mailto:[EMAIL PROTECTED]
> Sent: Friday, 31. October, 2008 10:33
> To: [email protected]
> Subject: Re: [castor-user] Re: problem with xs:choice order indicator
> 
> Hi Jeffrey,
> 
> [EMAIL PROTECTED] wrote:
>> Hi Werner,
>>
>> Thanks for your time here.   I tried that property & properties file
> with
>> the new attribute but had no change in results.
> Which is odd, as the stack trace in the first email indicates that 
> this is a problem with strict order of sequence, and the property 
> turns this feature off. I guess I will need a Jira issue where you 
> attach all relevant files for me, incl. builder properties, etc. But 
> please try to keep things am minimal as possible.
> 
>> We'd certainly prefer to
>> use the choice element as you'd assume, which would be mutually
> exclusive. 
>>  it actually looks as if setting maxOccurs at the choice level will 
>> write more than one type if they are provided in the xml
>>
>> i.e.,
>>
>> providing
>> ...
>>         <foo>1</foo>
>>         <foo>2</foo>
>>         <bar>3</bar>
>> ..
>> to
>> .
>>          <xs:choice  maxOccurs="unbounded">
>>             <xs:element name="foo" type="xs:string" />
>>             <xs:element name="bar" type="xs:string" />
>>        </xs:choice>
>>
>> yields:
>>  
>> 2008-10-30 11:55:17,726 main DEBUG xml.UnmarshalHandler -
> #startElement: 
>> foo
>> 2008-10-30 11:55:17,726 main DEBUG xml.UnmarshalHandler -
#characters:
> 
>> 1 2008-10-30 11:55:17,726 main DEBUG xml.UnmarshalHandler -
>> #endElement: foo
>>  
>> 2008-10-30 11:55:17,726 main DEBUG xml.UnmarshalHandler -
> #startElement: 
>> foo
>> 2008-10-30 11:55:17,726 main DEBUG xml.UnmarshalHandler -
#characters:
> 
>> 2 2008-10-30 11:55:17,726 main DEBUG xml.UnmarshalHandler -
>> #endElement: foo
>>  
>> 2008-10-30 11:55:17,726 main DEBUG xml.UnmarshalHandler -
> #startElement: 
>> bar
>> 2008-10-30 11:55:17,726 main DEBUG xml.UnmarshalHandler -
#characters:
> 
>> 3 2008-10-30 11:55:17,726 main DEBUG xml.UnmarshalHandler -
>> #endElement: bar
>>
>>
>> This above choice level behaiour is kind of a side note.  If you do 
>> have an opportunity to look into how we may succesfully set the 
>> element level of a choice without the maxOccurs of the choice, that 
>> would be a winner for us.
> I'll try my best, but I need something to 'play' with.
>>
>> Best,
>>
>> Jeff
>>
>>
>>
>>
>>
>>
>> Werner Guttmann <[EMAIL PROTECTED]>
>> 10/30/2008 03:38 AM
>> Please respond to
>> [email protected]
>>
>>
>> To
>> [email protected]
>> cc
>>
>> Subject
>> Re: [castor-user] Re: problem with xs:choice order indicator
>>
>>
>>
>>
>>
>>
>> Hi Jeffrey,
>>
>> I do remember that - now and then - issues have been reported related

>> to  unbounded choices and broken validation code. I will be having a 
>> detailed look later on this week, but I simply do not have the time 
>> to
> 
>> do this right now.
>>
>> There's only one work-around I can suggest: can you - i a custom 
>> castor.properties file - please override the following property:
>>
>> # Property that allows to specify whether the validation for # 
>> &lt;xs:integer&gt; should accept the old 'int/Integer' members # as 
>> well; default to false.
>> #
>> org.exolab.castor.xml.lenient.integer.validation=true
>>
>> and see whether that makes a difference ?
>>
>> Regards
>> Werner Guttmann
>>
>> [EMAIL PROTECTED] wrote:
>>> ----- Forwarded by Jeffrey Kramer/USA/DDS on 10/29/2008 04:53 PM
>>> -----
>>>
>>>
>>>
>>>
>>> Hi Werner,
>>>
>>> I should have mentioned initially this is Castor version 1.2 on a
>> windows
>>> xp machine with java version 1.5.0_16. 
>>>
>>> It looks like the major question here is how Castor is handling the 
>>> attributes of the Choice elements & it's respective nested simple
>> elements
>>> under the following assumption:
>>>
>>> The expression <xs:choice maxOccurs="unbounded"> allows the contents

>>> to
>> be
>>> repeated one or more times. 
>>> The expression <xs:element name="X" maxOccurs="unbounded"> allows 
>>> the
> 
>>> single element to be repeated one or more times
>>>
>>>
>>> For xml containing: 
>>>
>>>         ...
>>>         <foo>1</foo>
>>>         <foo>2</foo>
>>>         <office>NY</office>
>>>         ...
>>>
>>> I've observed the following cases:
>>>
>>>
>>> (1) maxOccurs attribute set in choice element
>>>
>>>   <xs:choice maxOccurs="unbounded">
>>>             <xs:element name="foo" type="xs:string" minOccurs="1" />
>>>   </xs:choice>
>>>
>>>
>>> => works without error
>>>
>>> (2) Here the case where the choice element does not have a maxOccurs

>>> attribute set ( default = 1)
>>>
>>>   <xs:choice >
>>>             <xs:element name="foo" type="xs:string" minOccurs="1" 
>>> maxOccurs="unbounded" />
>>>   </xs:choice>
>>>   <office>NY</office>
>>>
>>> => throws the following exception:
>>>
>>> -- org.exolab.castor.xml.MarshalException: Element with name foo 
>>> passed
>> to
>>> type companyEmployee in incorrect order; expected element with name 
>>> 'office' or any other optional element declared prior to it.{File:
>>> [not available]; line: 9; column: 7}
>>>
>>> This 2nd case is actually a format we're interested in using.   Any 
>>> insight or suggestion you may be able to provide would be greatly 
>>> appreciated.
>>>
>>> Thanks,
>>>
>>> Jeff
>>>
>>>
>> ---------------------------------------------------------------------
>> 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
> 
> 
> 
> 
> 
> ---------------------------------------------------------------------
> 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





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

    http://xircles.codehaus.org/manage_email


Reply via email to