Exactly, in your original example the Schema is invalid and XMLBeans has
a bug for not reporting the condition sooner. This is the paragraph of
the spec that I was referring to:
 
http://www.w3.org/TR/xmlschema-1/#cos-ct-extends
 
Clause 1.5 is clearly not satisfied by your original example. If the
Schema in error comes from a 3rd party you can easily point out to them
(politely :-) that the Schema is invalid, if you have the chance (and in
the meantime, you need to use a local modified copy). If you control one
of the Schemas involved, then you need to change the Schema that you do
control.
 
The "shape" example on the other hand, I believe it's all right, because
the "radius" element has the same type (xsd:double) in both places and
the minOccurs="1" in the derived type is a restriction of minOccurs="0"
in the original type.
 
I know this is not the easiest part of XMLSchema to understand, but if
you think about it, I believe it makes sense.
 
Hope this helps,
Radu


________________________________

        From: Ash Lux [mailto:[EMAIL PROTECTED] 
        Sent: Friday, March 14, 2008 6:14 PM
        To: user@xmlbeans.apache.org
        Subject: Re: scomp error - incompatible return type
        
        
        Thank you Jacob and Radu for the help.
        
        Unfortunately I'm not the one who controls the schema - it's one
of "define a schema by a large committee thing".  I'm sure that explains
a lot. :-)  I'll certainly try and get the schema fixed, but I don't
want to accuse them of having a bad schema when XMLBeans has a bug.
        
        Radu is tihs what you're talking about being invalid?:
        
        <xsd:element name="shape" type="shape"/>
        
        <xsd:complexType name="shape" abstract="true">
          <xsd:sequence>
            <xsd:element name="length" type="xsd:double" minOccurs="0"/>
            <xsd:element name="width" type="xsd:double" minOccurs="0"/>
            <xsd:element name="radius" type="xsd:double" minOccurs="0"/>
          </xsd:sequence>
        </xsd:complexType>
        
        <xsd:complexType name="circle_restrict" abstract="true">
          <xsd:complexContent>
            <xsd:restrict base="shape">
            </xsd:restrict>
          </xsd:complexContent>
        </xsd:complexType>
        
        <xsd:complexType name="circle">
          <xsd:complexContent>
            <xsd:extension base="circle_restrict">
              <xsd:element name="radius" type="xsd:double" minOccurs="1"
maxOccurs="1"/>
            </xsd:extension>
          </xsd:complexContent>
        </xsd:complexType>
        
        I am doing something similar to this with a schema I do control.
When using XMLBeans, the Circle class will have getters and setters for
radius, length, and width but if you try to set anything other than
radius the object will not validate  (actually XMLBeans might throw an
exception, I don't quite remember).  This seems to be the correct
behavior from what I understand (which might not be much).
        
        In the above example, XMLBeans overrides Circle_Restrict's
getRadius method and replaces it with its own.
        
        So in my original example the ArrestingGearTimeSliceType class
is trying to override AbstractGMLType's getDescription method (with a
int return type) as implement it's own getDescription (with a string
return type).
        
        It looks to me XMLBeans has a bug one way or another - either
the schema is valid and XMLBeans is blowing up on compile or XMLBeans
isn't catching the invalid schema and blowing up on compile.  If this is
a valid schema, there's not really a pretty solution XMLBeans can use..
        
        
        On 3/13/08, Radu Preotiuc-Pietro <[EMAIL PROTECTED]> wrote: 

                Having an element called "description" of type "int"
does sound fishy to
                me, so I suggest you change that to "string".
                
                I seem to vaguely remember that there is a Schema rule
according to
                which you can't remove an element by restriction and
then in a
                subsequent derivation step, add it back by extension,
which is what is
                happening here. If my recollection is correct, then
there is a bug in
                XMLBeans for not catching this error sooner. If not,
then it is just a
                Java limitation (are you compiling with jdk1.5 or 1.4?)
                
                Radu
                
                
                On Thu, 2008-03-13 at 11:00 -0700, Jacob Danner wrote:
                > As far as whats going on, ArrestingGearTimeSlice has 2
description
                > elements defined
                > 1 from xs:extension
base="AbstractAIXMTimeSliceBaseType" which refers
                > to the top level description as an int
                > and the other from  <xs:group
ref="ArrestingGearPropertyGroup"/> which
                > refers to its local type description as a string.
                >
                > I'm not really sure whats intended by the aixm group
here, but it
                > appears to be a valid error (one I would expect) from
the schema
                > snippet you posted.
                > You may want to contact aixm about it.
                > If you can tell us what is expected from that type,
maybe we can hack
                > up a real workaround for you, but the simplest thing I
would suggest
                > is to change those types to match.
                > -jacobd
                >
                > On Thu, Mar 13, 2008 at 6:06 AM, Ash Lux
<[EMAIL PROTECTED]> wrote:
                > > I've been trying to use a third party's XSD with
XMLBeans (specifically
                > > something called AIXM - http://www.aixm.aero/).
                > >
                > > I'm unsure if the problem lies with XMLBeans or with
the schema.  I was able
                > > to replicate the problem with this test XSD:
                > >
                > > <xs:schema
xmlns:xs="http://www.w3.org/2001/XMLSchema";
                > >            elementFormDefault="qualified"
                > >            attributeFormDefault="unqualified">
                > >
                > >   <xs:element name="ArrestingGearTimeSlice"
                > > type="ArrestingGearTimeSliceType">
                > >   </xs:element>
                > >
                > >   <xs:complexType name="ArrestingGearTimeSliceType">
                > >     <xs:complexContent>
                > >        <xs:extension
base="AbstractAIXMTimeSliceBaseType">
                > >         <xs:sequence>
                > >           <xs:group
ref="ArrestingGearPropertyGroup"/>
                > >         </xs:sequence>
                > >       </xs:extension>
                > >      </xs:complexContent>
                > >   </xs:complexType>
                > >
                > >   <xs:group name="ArrestingGearPropertyGroup">
                > >     <xs:sequence>
                > >       <xs:element name="description"
type="xs:string" nillable="true"
                > > minOccurs="0"/>
                > >      </xs:sequence>
                > >   </xs:group>
                > >
                > >   <xs:complexType
name="AbstractAIXMTimeSliceBaseType" abstract="true">
                > >     <xs:complexContent>
                > >       <xs:restriction base="AbstractGMLType">
                > >        </xs:restriction>
                > >     </xs:complexContent>
                > >   </xs:complexType>
                > >
                > >   <xs:complexType name="AbstractGMLType"
abstract="true">
                > >     <xs:sequence>
                > >       <xs:group ref="StandardObjectProperties"/>
                > >      </xs:sequence>
                > >   </xs:complexType>
                > >
                > >   <xs:group name="StandardObjectProperties">
                > >     <xs:sequence>
                > >       <xs:element ref="description" minOccurs="0"/>
                > >      </xs:sequence>
                > >   </xs:group>
                > >
                > >   <xs:element name="description" type="xs:int"/>
                > >
                > > </xs:schema>
                > >
                > > This is my output from scomp:
                > >
                > > [EMAIL PROTECTED]:~/Desktop$
~/java/xmlbeans-2.3.0/bin/scomp test.xsd
                > >  Time to build schema type system: 2.25 seconds
                > > Time to generate code: 0.621 seconds
                > >
/tmp/xbean41513.d/src/noNamespace/ArrestingGearTimeSliceType.java:29:
                > > xgetDescription() in
noNamespace.ArrestingGearTimeSliceType clashes with
                > > xgetDescription() in noNamespace.AbstractGMLType;
attempting to use
                > > incompatible return type
                > >  found   : org.apache.xmlbeans.XmlString
                > > required: org.apache.xmlbeans.XmlInt
                > >     org.apache.xmlbeans.XmlString xgetDescription();
                > >                                   ^
                > >
/tmp/xbean41513.d/src/noNamespace/ArrestingGearTimeSliceType.java:24:
                > > getDescription() in
noNamespace.ArrestingGearTimeSliceType clashes with
                > > getDescription() in noNamespace.AbstractGMLType;
attempting to use
                > > incompatible return type
                > >  found   : java.lang.String
                > > required: int
                > >     java.lang.String getDescription();
                > >                      ^
                > >
/tmp/xbean41513.d/src/noNamespace/impl/ArrestingGearTimeSliceTypeImpl.ja
va:47:
                > > xgetDescription() in
noNamespace.impl.ArrestingGearTimeSliceTypeImpl cannot
                > > implement xgetDescription() in
noNamespace.AbstractGMLType; attempting to
                > > use incompatible return type
                > >  found   : org.apache.xmlbeans.XmlString
                > > required: org.apache.xmlbeans.XmlInt
                > >     public org.apache.xmlbeans.XmlString
xgetDescription()
                > >                                          ^
                > >
/tmp/xbean41513.d/src/noNamespace/impl/ArrestingGearTimeSliceTypeImpl.ja
va:29:
                > > getDescription() in
noNamespace.impl.ArrestingGearTimeSliceTypeImpl cannot
                > > implement getDescription() in
noNamespace.AbstractGMLType; attempting to use
                > > incompatible return type
                > >  found   : java.lang.String
                > > required: int
                > >     public java.lang.String getDescription()
                > >                             ^
                > > Note: Some input files use or override a deprecated
API.
                > > Note: Recompile with -Xlint:deprecation for details.
                > >  4 errors
                > >
                > > BUILD FAILED
                > > [EMAIL PROTECTED]:~/Desktop$
                > >
                > > It appears as if the schema is violating the unique
particle attribution
                > > rule, but I'm not sure because of the restriction
tag.  If I do not use the
                > > group tag, I get the unique particle attribution
rule.
                > >
                > > Got any thoughts on what's going on?  Any thoughts
on workarounds or hacks?
                > >
                >
                >
                >
                
                
                Notice:  This email message, together with any
attachments, may contain information  of  BEA Systems,  Inc.,  its
subsidiaries  and  affiliated entities,  that may be confidential,
proprietary,  copyrighted  and/or legally privileged, and is intended
solely for the use of the individual or entity named in this message. If
you are not the intended recipient, and have received this message in
error, please immediately return this by email and then delete it.
                
                
        
---------------------------------------------------------------------
                To unsubscribe, e-mail:
[EMAIL PROTECTED]
                For additional commands, e-mail:
[EMAIL PROTECTED]
                
                



Notice:  This email message, together with any attachments, may contain 
information  of  BEA Systems,  Inc.,  its subsidiaries  and  affiliated 
entities,  that may be confidential,  proprietary,  copyrighted  and/or legally 
privileged, and is intended solely for the use of the individual or entity 
named in this message. If you are not the intended recipient, and have received 
this message in error, please immediately return this by email and then delete 
it.

Reply via email to