Classes generated for schema types which have inheritance by restriction could 
better implement the restricted methods
----------------------------------------------------------------------------------------------------------------------

         Key: XMLBEANS-261
         URL: http://issues.apache.org/jira/browse/XMLBEANS-261
     Project: XMLBeans
        Type: Improvement

  Components: Binding  
    Versions: Version 2.1    
 Environment: All
    Reporter: Lawrence Jones
    Priority: Minor


Consider e.g. the schema in 
http://davidbau.com/archives/2003/12/18/the_design_of_xmlbeans_part_3.html, 
"Inheritance by Restriction" (although it's easier if you change the types of 
the elements to be "xs:string"). The type derived2 derives by restriction from 
type derived1 and the restriction is such that an element which was optional in 
derived1 must no longer be present in derived2.

Currently a getter / setter set of methods are generated on derived1 and not 
overridden on derived2. Hence derived2 has the same functionality as derived1 
i.e. the setter works and sets an element which should not be present in 
derived2, and the getter will get that element if it is present.

According to the above article the getter should always return null. The 
functionality of the setter is not defined.

This JIRA is to request updating this functionality. The setter for derived2 
should override the derived1 setter and could do:

a) nothing (i.e. silently not set anything and return)
b) return an UnsupportedOperationException (or maybe a similar RuntimeException 
specific to XmlBeans - note: a RuntimeException would not require changes to 
the throws clause)
c) actively make sure that there are no such elements in the store and return 
(either an exception or just return) after that

The getter too should be overridden and should:

a) just return null, or
b) actively make sure that there are no such elements in the store and return 
null

But there are other things to consider:

If, say through the cursor API, the user does manage to insert this element 
into the underlying store - should the getter still return null? Should a call 
to xmlText() or toString() or any other method of producing the XML write out 
the element as it is in the store (which is the approach we've taken for 
everything else) or should we try to remove any such elements before printing 
out?

What if the derived1 type allowed maxOccurs>1? Then we also have to do the 
above for array setters/getters (and the list getters/setters for JDK1.5).

What happens if someone sets up derived3 which inherits from derived2 by 
extension and "re-enables" those elements which were in derived1?

Offhand I agree that the current functionality of allowing the setters/getters 
to inherit the parent's functionality is odd and not very user-friendly. But  
Java does not map easily to "inheritance by restriction" and I think we need to 
figure out (at least) all the things above before we implement an update to the 
functionality.

-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
   http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
   http://www.atlassian.com/software/jira


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to