You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tuscany.apache.org by "ant elder (JIRA)" <tu...@ws.apache.org> on 2007/10/11 09:40:52 UTC

[jira] Updated: (TUSCANY-1832) Complex type w/simple content restriction facets are ignored

     [ https://issues.apache.org/jira/browse/TUSCANY-1832?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

ant elder updated TUSCANY-1832:
-------------------------------

    Fix Version/s: Java-SDO-Next

> Complex type w/simple content restriction facets are ignored
> ------------------------------------------------------------
>
>                 Key: TUSCANY-1832
>                 URL: https://issues.apache.org/jira/browse/TUSCANY-1832
>             Project: Tuscany
>          Issue Type: Bug
>          Components: Java SDO Implementation
>    Affects Versions: Java-SDO-Next
>            Reporter: Ron Gavlin
>             Fix For: Java-SDO-Next
>
>
> Namespace "http://www.example.com/substitutionEV" includes two complex type with simple content named CommentType and MyCommentType. MyCommentType restricts CommentType with facet maxLength="40". This maxLength facet does not appear to exist in the SDO metadata. The sample test case named testComplexTypeWithSimpleContentExtension() is included below.
> ==============================
> substitutionWithExtensionValues.xsd
> ==============================
> <schema xmlns="http://www.w3.org/2001/XMLSchema"
> 	targetNamespace="http://www.example.com/substitutionEV"
> 	xmlns:sev="http://www.example.com/substitutionEV">
> 	<!--
> 		Licensed to the Apache Software Foundation (ASF) under one
> 		or more contributor license agreements.  See the NOTICE file
> 		distributed with this work for additional information
> 		regarding copyright ownership.  The ASF licenses this file
> 		to you under the Apache License, Version 2.0 (the
> 		"License"); you may not use this file except in compliance
> 		with the License.  You may obtain a copy of the License at
> 		
> 		http://www.apache.org/licenses/LICENSE-2.0
> 		
> 		Unless required by applicable law or agreed to in writing,
> 		software distributed under the License is distributed on an
> 		"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
> 		KIND, either express or implied.  See the License for the
> 		specific language governing permissions and limitations
> 		under the License.    
> 	-->
> 	<element name="results" type="sev:ResultsType" />
> 	<element name="result" type="sev:ResultType" />
> 	<element name="myResult" type="sev:MyResultType"
> 		substitutionGroup="sev:result" />
> 	<complexType name="ResultsType">
> 		<sequence>
> 			<element name="id" type="sev:IdType" />
> 			<element ref="sev:result" minOccurs="0"
> 				maxOccurs="unbounded" />
> 			<element name="comment" type="sev:CommentType" />
> 		</sequence>
> 	</complexType>
> 	<complexType name="ResultType">
> 		<sequence>
> 			<element name="id" type="sev:IdType" />
> 			<element name="name" type="string" />
> 			<element name="value" type="sev:CommentType" />
> 		</sequence>
> 	</complexType>
> 	<complexType name="MyResultType">
> 		<complexContent>
> 			<extension base="sev:ResultType" />
> 		</complexContent>
> 	</complexType>
> 	<simpleType name="IdType">
> 		<restriction base="sev:AsciiStringType">
> 			<maxLength value="32" />
> 			<pattern value="[0-9a-fA-F]*" />
> 		</restriction>
> 	</simpleType>
> 	<simpleType name="AsciiStringType">
> 		<restriction base="string">
> 			<pattern value="\p{IsBasicLatin}*" />
> 		</restriction>
> 	</simpleType>
> 	<complexType name="CommentType">
> 		<simpleContent>
> 			<extension base="sev:AsciiStringType">
> 				<attribute name="language" use="optional">
> 					<simpleType>
> 						<restriction base="string">
> 							<enumeration value="English" />
> 							<enumeration value="French" />
> 							<enumeration value="Spanish" />
> 						</restriction>
> 					</simpleType>
> 				</attribute>
> 			</extension>
> 		</simpleContent>
> 	</complexType>
> 	
>   <complexType name="MyCommentType">
>     <simpleContent>
>       <restriction base="sev:CommentType">
>         <minLength value="0" />
>         <maxLength value="40" />
>       </restriction>
>     </simpleContent>
>   </complexType>
> 	
> </schema>
> ==============================
> substitutionWithExtensionValues2.xsd
> ==============================
> <schema xmlns="http://www.w3.org/2001/XMLSchema"
> 	targetNamespace="http://www.example.com/substitutionEV2"
> 	xmlns:sev2="http://www.example.com/substitutionEV2"
> 	xmlns:sev="http://www.example.com/substitutionEV">
> 	<!--
> 		Licensed to the Apache Software Foundation (ASF) under one
> 		or more contributor license agreements.  See the NOTICE file
> 		distributed with this work for additional information
> 		regarding copyright ownership.  The ASF licenses this file
> 		to you under the Apache License, Version 2.0 (the
> 		"License"); you may not use this file except in compliance
> 		with the License.  You may obtain a copy of the License at
> 		
> 		http://www.apache.org/licenses/LICENSE-2.0
> 		
> 		Unless required by applicable law or agreed to in writing,
> 		software distributed under the License is distributed on an
> 		"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
> 		KIND, either express or implied.  See the License for the
> 		specific language governing permissions and limitations
> 		under the License.    
> 	-->
> 	<import namespace="http://www.example.com/substitutionEV"
> 		schemaLocation="substitutionWithExtensionValues.xsd" />
> 	<element name="allResults" type="sev2:AllResultsType" />
> 	<complexType name="AllResultsType">
> 		<sequence>
> 			<element name="id" type="sev2:Id2Type" />
> 			<element name="results" minOccurs="0" maxOccurs="unbounded"
> 				type="sev2:Results2Type" />
> 			<element name="comment" type="sev2:Comment2Type" />
> 		</sequence>
> 	</complexType>
> 	<complexType name="Results2Type">
> 		<complexContent>
> 			<extension base="sev:ResultsType"></extension>
> 		</complexContent>
> 	</complexType>
> 	<simpleType name="Id2Type">
> 		<restriction base="sev:IdType">
> 			<maxLength value="10" />
> 		</restriction>
> 	</simpleType>
> 	<complexType name="Comment2Type">
> 		<simpleContent>
> 			<restriction base="sev:CommentType">
> 				<minLength value="0" />
> 				<maxLength value="20" />
> 			</restriction>
> 		</simpleContent>
> 	</complexType>
> </schema>
> ==============================
> substitutionWithExtensionValues1.xml
> ==============================
> <?xml version="1.0" encoding="ASCII"?>
> <sev2:allResults xmlns:sev2="http://www.example.com/substitutionEV2">
> 	<sev2:id>ZZZZZZZZZZZZZZZZZZZZ</sev2:id>
> 	<sev:results xmlns:sev="http://www.example.com/substitutionEV">
> 		<sev:id>00000000000000000000</sev:id>
> 		<sev:result>
> 			<sev:id>11111111111111111111</sev:id>
> 			<sev:name>name1</sev:name>
> 			<sev:value>value1</sev:value>
> 		</sev:result>
> 		<sev:myResult>
> 			<sev:id>22222222222222222222</sev:id>
> 			<sev:name>myName2</sev:name>
> 			<sev:value>myValue2</sev:value>
> 		</sev:myResult>
> 		<sev:comment>comment0</sev:comment>
> 	</sev:results>
> 	<sev:results xmlns:sev="http://www.example.com/substitutionEV">
> 		<sev:id>AAAAAAAAAAAAAAAAAAAA</sev:id>
> 		<sev:myResult>
> 			<sev:id>BBBBBBBBBBBBBBBBBBBB</sev:id>
> 			<sev:name>myNameB</sev:name>
> 			<sev:value>myValueB</sev:value>
> 		</sev:myResult>
> 		<sev:comment>commentA</sev:comment>
> 	</sev:results>
> 	<sev2:comment language="English">
> 		commentZZZZZZZZZZZZZZZZZZ
> 	</sev2:comment>
> </sev2:allResults>
> ==============================
> SubstitutionWithExtensionValuesTestCase.java
> ==============================
> /**
>  *
>  *  Licensed to the Apache Software Foundation (ASF) under one
>  *  or more contributor license agreements.  See the NOTICE file
>  *  distributed with this work for additional information
>  *  regarding copyright ownership.  The ASF licenses this file
>  *  to you under the Apache License, Version 2.0 (the
>  *  "License"); you may not use this file except in compliance
>  *  with the License.  You may obtain a copy of the License at
>  *
>  *    http://www.apache.org/licenses/LICENSE-2.0
>  *
>  *  Unless required by applicable law or agreed to in writing,
>  *  software distributed under the License is distributed on an
>  *  "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
>  *  KIND, either express or implied.  See the License for the
>  *  specific language governing permissions and limitations
>  *  under the License.
>  */
> package org.apache.tuscany.sdo.test;
> import java.io.IOException;
> import java.io.InputStream;
> import java.net.URL;
> import java.util.List;
> import junit.framework.TestCase;
> import org.eclipse.emf.common.util.Diagnostic;
> import org.eclipse.emf.ecore.EClass;
> import org.eclipse.emf.ecore.EDataType;
> import org.eclipse.emf.ecore.EObject;
> import org.eclipse.emf.ecore.EStructuralFeature;
> import org.eclipse.emf.ecore.util.Diagnostician;
> import org.eclipse.emf.ecore.util.ExtendedMetaData;
> import com.example.substitution.ev.SEVFactory;
> import com.example.substitution.ev.impl.SEVFactoryImpl;
> import commonj.sdo.DataObject;
> import commonj.sdo.Type;
> import commonj.sdo.helper.HelperContext;
> import commonj.sdo.helper.TypeHelper;
> import commonj.sdo.impl.HelperProvider;
> public final class SubstitutionWithExtensionValuesTestCase extends TestCase 
> {
>   private static String sev2NamespaceURI;
>   private HelperContext hc;
>   private DataObject dataObject;
>   
>   protected void setUp() throws Exception {
>     super.setUp();
>     hc = HelperProvider.getDefaultContext();
>     SEVFactory.INSTANCE.register(hc);
>     
>     InputStream inputStream = null;
>     URL url = getClass().getResource("/substitutionWithExtensionValues2.xsd");
>     inputStream = url.openStream();
>     List sev2TypeList = hc.getXSDHelper().define(inputStream, url.toString());
>     inputStream.close();
>     
>     inputStream = getClass().getResourceAsStream("/substitutionWithExtensionValues1.xml");
>     dataObject = hc.getXMLHelper().load(inputStream).getRootObject();
>     inputStream.close();
>     
>     if (sev2NamespaceURI == null)
>     {
>       sev2NamespaceURI = ((Type) sev2TypeList.get(0)).getURI();
>     }
>   }
>   public void testComplexTypeWithSubstitutionExtension() throws IOException 
>   {
>     TypeHelper typeHelper = hc.getTypeHelper();
>     
>     Type resultsType = typeHelper.getType(SEVFactoryImpl.NAMESPACE_URI, "ResultsType");
>     Type results2Type = typeHelper.getType(sev2NamespaceURI, "Results2Type");
>     assertTrue("Results2 type does not report Results as a base type", 
>                results2Type.getBaseTypes().contains(resultsType));
>     
>     assertEquals("results.1/myResult.0/id has unexpected value", 
>         "BBBBBBBBBBBBBBBBBBBB", dataObject.getString("results.1/myResult.0/id"));
>   }
>   
>   public void testComplexTypeWithSimpleContentExtension() 
>   {
>     TypeHelper typeHelper = hc.getTypeHelper();
>     
>     Type commentType = typeHelper.getType(SEVFactoryImpl.NAMESPACE_URI, "CommentType");
>     Type myCommentType = typeHelper.getType(SEVFactoryImpl.NAMESPACE_URI, "MyCommentType");
>     Type comment2Type = typeHelper.getType(sev2NamespaceURI, "Comment2Type");
>     assertTrue("MyComment type does not report Comment as a base type", 
>                myCommentType.getBaseTypes().contains(commentType));
>     assertTrue("Comment2 type does not report Comment as a base type", 
>                comment2Type.getBaseTypes().contains(commentType));
>     
>     ExtendedMetaData extendedMetaData = ExtendedMetaData.INSTANCE;
>     EStructuralFeature simpleFeature = null;
>     EDataType commentSimpleType = null;
>     
>     simpleFeature = extendedMetaData.getSimpleFeature((EClass) myCommentType);
>     commentSimpleType = (EDataType)simpleFeature.getEType();
>     assertEquals(40, extendedMetaData.getMaxLengthFacet(commentSimpleType));
>     
>     simpleFeature = extendedMetaData.getSimpleFeature((EClass) comment2Type);
>     commentSimpleType = (EDataType)simpleFeature.getEType();
>     assertEquals(20, extendedMetaData.getMaxLengthFacet(commentSimpleType));
>     
>   }
>   public void testSimpleTypeExtension() 
>   {
>     TypeHelper typeHelper = hc.getTypeHelper();
>     
>     Type asciiStringType = typeHelper.getType(SEVFactoryImpl.NAMESPACE_URI, "AsciiStringType");
>     Type idType = typeHelper.getType(SEVFactoryImpl.NAMESPACE_URI, "IdType");
>     assertTrue("IdType does not report AsciiStringType as a base type", 
>         idType.getBaseTypes().contains(asciiStringType));
>     
>     Diagnostic diagnostic = Diagnostician.INSTANCE.validate((EObject) dataObject);
>     String diagnosticMsg = diagnostic.getChildren().toString();
>     Type id2Type = typeHelper.getType(sev2NamespaceURI, "Id2Type");
>     assertTrue("Id2Type does not report IdType as a base type", 
>         id2Type.getBaseTypes().contains(idType));
>     assertTrue("EMF validation should have reported Id pattern match failure", 
>         diagnosticMsg.indexOf("Id") > 0);
>   }
> }

-- 
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: tuscany-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-dev-help@ws.apache.org