Author: veithen
Date: Sat Jan 22 20:03:29 2011
New Revision: 1062248

URL: http://svn.apache.org/viewvc?rev=1062248&view=rev
Log:
Fixed an issue in SchemaBuilder that prevented it from resolving imports 
without schemaLocation, but for which a schema has been registered using 
XmlSchemaCollection#getKnownNamespaceMap().

Added:
    
webservices/xmlschema/trunk/xmlschema-core/src/test/resources/knownNamespace.xsd
    webservices/xmlschema/trunk/xmlschema-core/src/test/resources/xml.xsd
Modified:
    
webservices/xmlschema/trunk/xmlschema-core/src/main/java/org/apache/ws/commons/schema/SchemaBuilder.java
    
webservices/xmlschema/trunk/xmlschema-core/src/test/java/tests/ImportTest.java

Modified: 
webservices/xmlschema/trunk/xmlschema-core/src/main/java/org/apache/ws/commons/schema/SchemaBuilder.java
URL: 
http://svn.apache.org/viewvc/webservices/xmlschema/trunk/xmlschema-core/src/main/java/org/apache/ws/commons/schema/SchemaBuilder.java?rev=1062248&r1=1062247&r2=1062248&view=diff
==============================================================================
--- 
webservices/xmlschema/trunk/xmlschema-core/src/main/java/org/apache/ws/commons/schema/SchemaBuilder.java
 (original)
+++ 
webservices/xmlschema/trunk/xmlschema-core/src/main/java/org/apache/ws/commons/schema/SchemaBuilder.java
 Sat Jan 22 20:03:29 2011
@@ -534,14 +534,12 @@ public class SchemaBuilder {
                 return pValue == null || Constants.NULL_NS_URI.equals(pValue);
             }
         };
-        if (schemaImport.schemaLocation != null && 
!schemaImport.schemaLocation.equals("")) {
-            if (schema.getSourceURI() != null) {
-                schemaImport.schema =
-                    resolveXmlSchema(uri, schemaImport.schemaLocation, 
schema.getSourceURI(), validator);
-            } else {
-                schemaImport.schema =
-                    resolveXmlSchema(schemaImport.namespace, 
schemaImport.schemaLocation, validator);
-            }
+        if (schema.getSourceURI() != null) {
+            schemaImport.schema =
+                resolveXmlSchema(uri, schemaImport.schemaLocation, 
schema.getSourceURI(), validator);
+        } else {
+            schemaImport.schema =
+                resolveXmlSchema(schemaImport.namespace, 
schemaImport.schemaLocation, validator);
         }
         return schemaImport;
     }

Modified: 
webservices/xmlschema/trunk/xmlschema-core/src/test/java/tests/ImportTest.java
URL: 
http://svn.apache.org/viewvc/webservices/xmlschema/trunk/xmlschema-core/src/test/java/tests/ImportTest.java?rev=1062248&r1=1062247&r2=1062248&view=diff
==============================================================================
--- 
webservices/xmlschema/trunk/xmlschema-core/src/test/java/tests/ImportTest.java 
(original)
+++ 
webservices/xmlschema/trunk/xmlschema-core/src/test/java/tests/ImportTest.java 
Sat Jan 22 20:03:29 2011
@@ -20,14 +20,18 @@
 package tests;
 
 import java.io.File;
+import java.util.List;
 
 import javax.xml.namespace.QName;
 import javax.xml.parsers.DocumentBuilderFactory;
 
 import org.w3c.dom.Document;
+import org.xml.sax.InputSource;
 
 import org.apache.ws.commons.schema.XmlSchema;
 import org.apache.ws.commons.schema.XmlSchemaCollection;
+import org.apache.ws.commons.schema.XmlSchemaExternal;
+import org.apache.ws.commons.schema.XmlSchemaImport;
 
 import org.junit.Assert;
 import org.junit.Test;
@@ -91,4 +95,22 @@ public class ImportTest extends Assert {
         assertNotNull(schema.getTypeByName(new 
QName("http://soapinterop.org/xsd2";, "SOAPStruct")));
         assertNotNull(schema.getElementByName(new 
QName("http://soapinterop.org/xsd2";, "SOAPWrapper")));
     }
+    
+    /**
+     * Tests that imports without <tt>schemaLocation</tt> are resolved if the 
corresponding schemas
+     * have been registered using {@link 
XmlSchemaCollection#getKnownNamespaceMap()}.
+     */
+    @Test
+    public void testImportWithKnownNamespace() {
+        XmlSchemaCollection schemaCol = new XmlSchemaCollection();
+        
schemaCol.getKnownNamespaceMap().put("http://www.w3.org/XML/1998/namespace";,
+                new XmlSchemaCollection().read(new 
InputSource(Resources.asURI("xml.xsd"))));
+        XmlSchema schema = schemaCol.read(new 
InputSource(Resources.asURI("knownNamespace.xsd")));
+        List<XmlSchemaExternal> externals = schema.getExternals();
+        assertEquals(1, externals.size());
+        XmlSchemaImport schemaImport = (XmlSchemaImport)externals.get(0);
+        assertEquals("http://www.w3.org/XML/1998/namespace";, 
schemaImport.getNamespace());
+        XmlSchema schema2 = schemaImport.getSchema();
+        assertNotNull(schema2);
+    }
 }

Added: 
webservices/xmlschema/trunk/xmlschema-core/src/test/resources/knownNamespace.xsd
URL: 
http://svn.apache.org/viewvc/webservices/xmlschema/trunk/xmlschema-core/src/test/resources/knownNamespace.xsd?rev=1062248&view=auto
==============================================================================
--- 
webservices/xmlschema/trunk/xmlschema-core/src/test/resources/knownNamespace.xsd
 (added)
+++ 
webservices/xmlschema/trunk/xmlschema-core/src/test/resources/knownNamespace.xsd
 Sat Jan 22 20:03:29 2011
@@ -0,0 +1,29 @@
+<?xml version="1.0"?>
+<!--
+  ~ 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.
+  -->
+<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema";
+            targetNamespace="http://apache.org/axis2/schema/std";>
+    <xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
+    <xsd:complexType name="reply">
+        <xsd:sequence>
+            <xsd:element name="message" type="xsd:string" />
+        </xsd:sequence>
+        <xsd:attribute ref="xml:lang" use="optional"/>
+    </xsd:complexType>
+</xsd:schema>

Added: webservices/xmlschema/trunk/xmlschema-core/src/test/resources/xml.xsd
URL: 
http://svn.apache.org/viewvc/webservices/xmlschema/trunk/xmlschema-core/src/test/resources/xml.xsd?rev=1062248&view=auto
==============================================================================
--- webservices/xmlschema/trunk/xmlschema-core/src/test/resources/xml.xsd 
(added)
+++ webservices/xmlschema/trunk/xmlschema-core/src/test/resources/xml.xsd Sat 
Jan 22 20:03:29 2011
@@ -0,0 +1,287 @@
+<?xml version='1.0'?>
+<?xml-stylesheet href="../2008/09/xsd.xsl" type="text/xsl"?>
+<xs:schema targetNamespace="http://www.w3.org/XML/1998/namespace"; 
+  xmlns:xs="http://www.w3.org/2001/XMLSchema"; 
+  xmlns   ="http://www.w3.org/1999/xhtml";
+  xml:lang="en">
+
+ <xs:annotation>
+  <xs:documentation>
+   <div>
+    <h1>About the XML namespace</h1>
+
+    <div class="bodytext">
+     <p>
+      This schema document describes the XML namespace, in a form
+      suitable for import by other schema documents.
+     </p>
+     <p>
+      See <a href="http://www.w3.org/XML/1998/namespace.html";>
+      http://www.w3.org/XML/1998/namespace.html</a> and
+      <a href="http://www.w3.org/TR/REC-xml";>
+      http://www.w3.org/TR/REC-xml</a> for information 
+      about this namespace.
+     </p>
+     <p>
+      Note that local names in this namespace are intended to be
+      defined only by the World Wide Web Consortium or its subgroups.
+      The names currently defined in this namespace are listed below.
+      They should not be used with conflicting semantics by any Working
+      Group, specification, or document instance.
+     </p>
+     <p>   
+      See further below in this document for more information about <a
+      href="#usage">how to refer to this schema document from your own
+      XSD schema documents</a> and about <a href="#nsversioning">the
+      namespace-versioning policy governing this schema document</a>.
+     </p>
+    </div>
+   </div>
+  </xs:documentation>
+ </xs:annotation>
+
+ <xs:attribute name="lang">
+  <xs:annotation>
+   <xs:documentation>
+    <div>
+     
+      <h3>lang (as an attribute name)</h3>
+      <p>
+       denotes an attribute whose value
+       is a language code for the natural language of the content of
+       any element; its value is inherited.  This name is reserved
+       by virtue of its definition in the XML specification.</p>
+     
+    </div>
+    <div>
+     <h4>Notes</h4>
+     <p>
+      Attempting to install the relevant ISO 2- and 3-letter
+      codes as the enumerated possible values is probably never
+      going to be a realistic possibility.  
+     </p>
+     <p>
+      See BCP 47 at <a href="http://www.rfc-editor.org/rfc/bcp/bcp47.txt";>
+       http://www.rfc-editor.org/rfc/bcp/bcp47.txt</a>
+      and the IANA language subtag registry at
+      <a href="http://www.iana.org/assignments/language-subtag-registry";>
+       http://www.iana.org/assignments/language-subtag-registry</a>
+      for further information.
+     </p>
+     <p>
+      The union allows for the 'un-declaration' of xml:lang with
+      the empty string.
+     </p>
+    </div>
+   </xs:documentation>
+  </xs:annotation>
+  <xs:simpleType>
+   <xs:union memberTypes="xs:language">
+    <xs:simpleType>    
+     <xs:restriction base="xs:string">
+      <xs:enumeration value=""/>
+     </xs:restriction>
+    </xs:simpleType>
+   </xs:union>
+  </xs:simpleType>
+ </xs:attribute>
+
+ <xs:attribute name="space">
+  <xs:annotation>
+   <xs:documentation>
+    <div>
+     
+      <h3>space (as an attribute name)</h3>
+      <p>
+       denotes an attribute whose
+       value is a keyword indicating what whitespace processing
+       discipline is intended for the content of the element; its
+       value is inherited.  This name is reserved by virtue of its
+       definition in the XML specification.</p>
+     
+    </div>
+   </xs:documentation>
+  </xs:annotation>
+  <xs:simpleType>
+   <xs:restriction base="xs:NCName">
+    <xs:enumeration value="default"/>
+    <xs:enumeration value="preserve"/>
+   </xs:restriction>
+  </xs:simpleType>
+ </xs:attribute>
+ 
+ <xs:attribute name="base" type="xs:anyURI"> <xs:annotation>
+   <xs:documentation>
+    <div>
+     
+      <h3>base (as an attribute name)</h3>
+      <p>
+       denotes an attribute whose value
+       provides a URI to be used as the base for interpreting any
+       relative URIs in the scope of the element on which it
+       appears; its value is inherited.  This name is reserved
+       by virtue of its definition in the XML Base specification.</p>
+     
+     <p>
+      See <a
+      href="http://www.w3.org/TR/xmlbase/";>http://www.w3.org/TR/xmlbase/</a>
+      for information about this attribute.
+     </p>
+    </div>
+   </xs:documentation>
+  </xs:annotation>
+ </xs:attribute>
+ 
+ <xs:attribute name="id" type="xs:ID">
+  <xs:annotation>
+   <xs:documentation>
+    <div>
+     
+      <h3>id (as an attribute name)</h3> 
+      <p>
+       denotes an attribute whose value
+       should be interpreted as if declared to be of type ID.
+       This name is reserved by virtue of its definition in the
+       xml:id specification.</p>
+     
+     <p>
+      See <a
+      href="http://www.w3.org/TR/xml-id/";>http://www.w3.org/TR/xml-id/</a>
+      for information about this attribute.
+     </p>
+    </div>
+   </xs:documentation>
+  </xs:annotation>
+ </xs:attribute>
+
+ <xs:attributeGroup name="specialAttrs">
+  <xs:attribute ref="xml:base"/>
+  <xs:attribute ref="xml:lang"/>
+  <xs:attribute ref="xml:space"/>
+  <xs:attribute ref="xml:id"/>
+ </xs:attributeGroup>
+
+ <xs:annotation>
+  <xs:documentation>
+   <div>
+   
+    <h3>Father (in any context at all)</h3> 
+
+    <div class="bodytext">
+     <p>
+      denotes Jon Bosak, the chair of 
+      the original XML Working Group.  This name is reserved by 
+      the following decision of the W3C XML Plenary and 
+      XML Coordination groups:
+     </p>
+     <blockquote>
+       <p>
+       In appreciation for his vision, leadership and
+       dedication the W3C XML Plenary on this 10th day of
+       February, 2000, reserves for Jon Bosak in perpetuity
+       the XML name "xml:Father".
+       </p>
+     </blockquote>
+    </div>
+   </div>
+  </xs:documentation>
+ </xs:annotation>
+
+ <xs:annotation>
+  <xs:documentation>
+   <div xml:id="usage" id="usage">
+    <h2><a name="usage">About this schema document</a></h2>
+
+    <div class="bodytext">
+     <p>
+      This schema defines attributes and an attribute group suitable
+      for use by schemas wishing to allow <code>xml:base</code>,
+      <code>xml:lang</code>, <code>xml:space</code> or
+      <code>xml:id</code> attributes on elements they define.
+     </p>
+     <p>
+      To enable this, such a schema must import this schema for
+      the XML namespace, e.g. as follows:
+     </p>
+     <pre>
+          &lt;schema . . .>
+           . . .
+           &lt;import namespace="http://www.w3.org/XML/1998/namespace";
+                      schemaLocation="http://www.w3.org/2001/xml.xsd"/>
+     </pre>
+     <p>
+      or
+     </p>
+     <pre>
+           &lt;import namespace="http://www.w3.org/XML/1998/namespace";
+                      schemaLocation="http://www.w3.org/2009/01/xml.xsd"/>
+     </pre>
+     <p>
+      Subsequently, qualified reference to any of the attributes or the
+      group defined below will have the desired effect, e.g.
+     </p>
+     <pre>
+          &lt;type . . .>
+           . . .
+           &lt;attributeGroup ref="xml:specialAttrs"/>
+     </pre>
+     <p>
+      will define a type which will schema-validate an instance element
+      with any of those attributes.
+     </p>
+    </div>
+   </div>
+  </xs:documentation>
+ </xs:annotation>
+
+ <xs:annotation>
+  <xs:documentation>
+   <div id="nsversioning" xml:id="nsversioning">
+    <h2><a name="nsversioning">Versioning policy for this schema 
document</a></h2>
+    <div class="bodytext">
+     <p>
+      In keeping with the XML Schema WG's standard versioning
+      policy, this schema document will persist at
+      <a href="http://www.w3.org/2009/01/xml.xsd";>
+       http://www.w3.org/2009/01/xml.xsd</a>.
+     </p>
+     <p>
+      At the date of issue it can also be found at
+      <a href="http://www.w3.org/2001/xml.xsd";>
+       http://www.w3.org/2001/xml.xsd</a>.
+     </p>
+     <p>
+      The schema document at that URI may however change in the future,
+      in order to remain compatible with the latest version of XML
+      Schema itself, or with the XML namespace itself.  In other words,
+      if the XML Schema or XML namespaces change, the version of this
+      document at <a href="http://www.w3.org/2001/xml.xsd";>
+       http://www.w3.org/2001/xml.xsd 
+      </a> 
+      will change accordingly; the version at 
+      <a href="http://www.w3.org/2009/01/xml.xsd";>
+       http://www.w3.org/2009/01/xml.xsd 
+      </a> 
+      will not change.
+     </p>
+     <p>
+      Previous dated (and unchanging) versions of this schema 
+      document are at:
+     </p>
+     <ul>
+      <li><a href="http://www.w3.org/2009/01/xml.xsd";>
+       http://www.w3.org/2009/01/xml.xsd</a></li>
+      <li><a href="http://www.w3.org/2007/08/xml.xsd";>
+       http://www.w3.org/2007/08/xml.xsd</a></li>
+      <li><a href="http://www.w3.org/2004/10/xml.xsd";>
+       http://www.w3.org/2004/10/xml.xsd</a></li>
+      <li><a href="http://www.w3.org/2001/03/xml.xsd";>
+       http://www.w3.org/2001/03/xml.xsd</a></li>
+     </ul>
+    </div>
+   </div>
+  </xs:documentation>
+ </xs:annotation>
+
+</xs:schema>
+


Reply via email to