[ https://issues.apache.org/jira/browse/XMLBEANS-153?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Wing Yew Poon reassigned XMLBEANS-153: -------------------------------------- Assignee: Radu Preotiuc-Pietro (was: Jacob Danner) > "validate on set" feature doesn't catch values that are invalid against > xs:int patterns > --------------------------------------------------------------------------------------- > > Key: XMLBEANS-153 > URL: https://issues.apache.org/jira/browse/XMLBEANS-153 > Project: XMLBeans > Issue Type: Bug > Components: Validator > Affects Versions: Version 2 Beta 1 > Reporter: Steve Traut > Assignee: Radu Preotiuc-Pietro > Priority: Minor > > Using XmlOptions.setValidateOnSet will set up XMLBeans to throw an exception > in some cases, but not others. > For example, an exception will be thrown when schema restricts xs:int to a > max value of 100, but a value higher is set. It will NOT throw an exception > when schema restricts xs:int to a pattern of three numerals in succession, > but a longer value is set. Setting a longer value does render the XML > invalid, as a call to XmlObject.validate shows. But "validate on set" doesn't > catch this. > "validate on set" should set up XMLBeans to catch *anything* that would be > invalid in a call to the validate method. Otherwise, it's too > counterintuitive to be useful. > Here's a snippet of the Java code that tries to incorrectly set the value of > an id attribute (defined in schema below): > public boolean isValidOnTheFly() > { > private XmlOptions validationOptions = new XmlOptions(); > validationOptions.setValidateOnSet(); > > TodolistDocument todoList = > TodolistDocument.Factory.newInstance(validationOptions); > Todolist list = todoList.addNewTodolist(); > ItemType item = list.addNewItem(); > item.setName("Procrastinate"); > item.setDescription("A new item."); > item.setAction(ActionType.SOMEDAY_MAYBE_DEFER); > > // Should throw an exception because the value renders the XML > invalid. > item.setId(8587); > > System.out.println(todoList.validate()); > return true; > } > Here's a snippet from the schema I'm using. Note the id attribute defined as > idType: > <xs:complexType name="itemType"> > <xs:sequence> > <xs:element name="name" type="xs:string"/> > <xs:element name="description" type="xs:string"/> > <xs:element name="due_by" type="xs:dateTime"/> > <xs:element name="action" type="actionType"/> > </xs:sequence> > <xs:attribute name="id" type="idType"/> > </xs:complexType> > When the idType is defined as follows, the code throws an exception: > <xs:simpleType name="idType"> > <xs:restriction base="xs:int"> > <xs:maxExclusive value="100"/> > </xs:restriction> > </xs:simpleType> > When the idType is defined this way, the code throws no exception, although > the value set by the code above still renders the XML I'm building invalid: > <xs:simpleType name="idType"> > <xs:restriction base="xs:int"> > <xs:pattern value="[0-9][0-9][0-9]"/> > </xs:restriction> > </xs:simpleType> -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online. --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@xmlbeans.apache.org For additional commands, e-mail: dev-h...@xmlbeans.apache.org