You are viewing a plain text version of this content. The canonical link for it is here.
Posted to woden-dev@ws.apache.org by jk...@apache.org on 2007/01/26 12:18:51 UTC

svn commit: r500223 - in /incubator/woden/trunk/java/src/org/apache/woden/internal: OMWSDLReader.java resolver/OMSchemaResolverAdapter.java resolver/SchemaResolverAdapter.java schema/SchemaConstants.java

Author: jkaputin
Date: Fri Jan 26 03:18:47 2007
New Revision: 500223

URL: http://svn.apache.org/viewvc?view=rev&rev=500223
Log:
WODEN-10 Added support for fragid in schemaLocation
to the Woden OM implementation. Testcase SchemaId-1G
now passes for the OM implementation.

Added:
    incubator/woden/trunk/java/src/org/apache/woden/internal/resolver/OMSchemaResolverAdapter.java
Modified:
    incubator/woden/trunk/java/src/org/apache/woden/internal/OMWSDLReader.java
    incubator/woden/trunk/java/src/org/apache/woden/internal/resolver/SchemaResolverAdapter.java
    incubator/woden/trunk/java/src/org/apache/woden/internal/schema/SchemaConstants.java

Modified: incubator/woden/trunk/java/src/org/apache/woden/internal/OMWSDLReader.java
URL: http://svn.apache.org/viewvc/incubator/woden/trunk/java/src/org/apache/woden/internal/OMWSDLReader.java?view=diff&rev=500223&r1=500222&r2=500223
==============================================================================
--- incubator/woden/trunk/java/src/org/apache/woden/internal/OMWSDLReader.java (original)
+++ incubator/woden/trunk/java/src/org/apache/woden/internal/OMWSDLReader.java Fri Jan 26 03:18:47 2007
@@ -34,7 +34,7 @@
 import org.apache.woden.WSDLException;
 import org.apache.woden.WSDLSource;
 import org.apache.woden.XMLElement;
-import org.apache.woden.internal.resolver.SchemaResolverAdapter;
+import org.apache.woden.internal.resolver.OMSchemaResolverAdapter;
 import org.apache.woden.internal.schema.ImportedSchemaImpl;
 import org.apache.woden.internal.schema.InlinedSchemaImpl;
 import org.apache.woden.internal.schema.SchemaConstants;
@@ -230,7 +230,7 @@
                 XmlSchemaCollection xsc = new XmlSchemaCollection();
                 
                 // Plug in the selected woden URI Resolver
-                xsc.setSchemaResolver(new SchemaResolverAdapter(getURIResolver(), importEl));
+                xsc.setSchemaResolver(new OMSchemaResolverAdapter(getURIResolver(), importEl));
                 
                 schemaDef = xsc.read(schemaSource, null);
                 fImportedSchemas.put(schemaURL, schemaDef);
@@ -281,7 +281,7 @@
             xsc.setNamespaceContext(namespaces);
             
             // Plug in the selected woden URI Resolver
-            xsc.setSchemaResolver(new SchemaResolverAdapter(getURIResolver(), schemaElement));
+            xsc.setSchemaResolver(new OMSchemaResolverAdapter(getURIResolver(), schemaElement));
             
             schemaDef = xsc.read(schemaSource, null);
         }

Added: incubator/woden/trunk/java/src/org/apache/woden/internal/resolver/OMSchemaResolverAdapter.java
URL: http://svn.apache.org/viewvc/incubator/woden/trunk/java/src/org/apache/woden/internal/resolver/OMSchemaResolverAdapter.java?view=auto&rev=500223
==============================================================================
--- incubator/woden/trunk/java/src/org/apache/woden/internal/resolver/OMSchemaResolverAdapter.java (added)
+++ incubator/woden/trunk/java/src/org/apache/woden/internal/resolver/OMSchemaResolverAdapter.java Fri Jan 26 03:18:47 2007
@@ -0,0 +1,82 @@
+/**
+ * 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.woden.internal.resolver;
+
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+import java.util.Iterator;
+
+import javax.xml.stream.XMLStreamException;
+
+import org.apache.axiom.om.OMElement;
+import org.apache.woden.XMLElement;
+import org.apache.woden.internal.schema.SchemaConstants;
+import org.apache.woden.resolver.URIResolver;
+
+/**
+ * Class that adds OM specific behaviour to the SchemaResolverAdapter class.
+ * 
+ * TODO consider some approach other than inheritance as part of a broader consideration
+ * of resolving imports and fragids.
+ * 
+ * @author John Kaputin (jkaputin@apache.org)
+ *
+ */
+
+public class OMSchemaResolverAdapter extends SchemaResolverAdapter {
+
+    public OMSchemaResolverAdapter(URIResolver actualResolver, XMLElement schemaElement) {
+        super(actualResolver, schemaElement);
+    }
+    
+    protected InputStream resolveFragId(String fragId) {
+        
+        String id = fragId.substring(1);
+        
+        OMElement contextEl = (OMElement)fContextElement.getSource();
+        OMElement typesEl = (OMElement)contextEl.getParent();
+        Iterator inlineSchemas = typesEl.
+            getChildrenWithName(SchemaConstants.Q_ELEM_XSD_2001);
+        OMElement identifiedSchema = null;
+        String schemaId;
+        while(inlineSchemas.hasNext()) {
+            OMElement schema = (OMElement)inlineSchemas.next();
+            schemaId = schema.getAttributeValue(SchemaConstants.Q_ATTR_ID);
+            if(schemaId != null && schemaId.equals(id)) {
+                identifiedSchema = schema;
+                break;
+            }
+        }
+        
+        if(identifiedSchema == null) {
+            //the fragid does not identify any element
+            //TODO suitable error message
+            return null;
+        }
+        
+        String schemaString = null;
+        try {
+            schemaString = identifiedSchema.toStringWithConsume();
+        } catch (XMLStreamException e) {
+            // TODO this conforms to parent, but needs an error message via ErrorReporter and maybe it should be handled differently?
+            throw new RuntimeException(e);
+        }
+        byte[] schemaBytes = schemaString.getBytes();
+        InputStream iStream = new ByteArrayInputStream(schemaBytes);
+        return iStream;
+    }
+}

Modified: incubator/woden/trunk/java/src/org/apache/woden/internal/resolver/SchemaResolverAdapter.java
URL: http://svn.apache.org/viewvc/incubator/woden/trunk/java/src/org/apache/woden/internal/resolver/SchemaResolverAdapter.java?view=diff&rev=500223&r1=500222&r2=500223
==============================================================================
--- incubator/woden/trunk/java/src/org/apache/woden/internal/resolver/SchemaResolverAdapter.java (original)
+++ incubator/woden/trunk/java/src/org/apache/woden/internal/resolver/SchemaResolverAdapter.java Fri Jan 26 03:18:47 2007
@@ -31,7 +31,7 @@
  * @author Graham Turrell
  *
  */
-public class SchemaResolverAdapter implements org.apache.ws.commons.schema.resolver.URIResolver {
+public abstract class SchemaResolverAdapter implements org.apache.ws.commons.schema.resolver.URIResolver {
 	
 	private org.apache.woden.resolver.URIResolver fActualResolver;
     protected XMLElement fContextElement;
@@ -125,14 +125,9 @@
 
     /*
      * Helper method to resolve fragid to a schema element, represented as a byte stream.
-     * This will be XML parser-specific, so the default behaviour here is to do nothing
-     * and implementations should override this method if necessary.
-     * 
-     * TODO if *both* DOM and OM impls need to do something, make this method an abstract declaration.
+     * This will be XML parser-specific, so implementations should override this method.
      */
-    protected InputStream resolveFragId(String fradId) {
-        return null;
-    }
+    protected abstract InputStream resolveFragId(String fradId);
     
 	/* based on ws commons DefaultURIResolver.resolveEntity(...)
 	 * 

Modified: incubator/woden/trunk/java/src/org/apache/woden/internal/schema/SchemaConstants.java
URL: http://svn.apache.org/viewvc/incubator/woden/trunk/java/src/org/apache/woden/internal/schema/SchemaConstants.java?view=diff&rev=500223&r1=500222&r2=500223
==============================================================================
--- incubator/woden/trunk/java/src/org/apache/woden/internal/schema/SchemaConstants.java (original)
+++ incubator/woden/trunk/java/src/org/apache/woden/internal/schema/SchemaConstants.java Fri Jan 26 03:18:47 2007
@@ -45,6 +45,9 @@
     public static final String NS_URI_XSD_2001 =
         "http://www.w3.org/2001/XMLSchema";
     
+    //Schema attribute qnames
+    public static final QName Q_ATTR_ID = new QName(ATTR_ID);
+    
     //<xs:schema> qnames
     public static final QName Q_ELEM_XSD_1999 =
         new QName(NS_URI_XSD_1999, ELEM_SCHEMA);



---------------------------------------------------------------------
To unsubscribe, e-mail: woden-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: woden-dev-help@ws.apache.org