You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by js...@apache.org on 2007/04/11 20:08:11 UTC

svn commit: r527591 - in /incubator/tuscany/java/sca/modules: interface-wsdl-xml/src/main/java/org/apache/tuscany/interfacedef/wsdl/xml/ interface-wsdl/src/main/java/org/apache/tuscany/interfacedef/wsdl/ interface-wsdl/src/main/java/org/apache/tuscany/...

Author: jsdelfino
Date: Wed Apr 11 11:08:10 2007
New Revision: 527591

URL: http://svn.apache.org/viewvc?view=rev&rev=527591
Log:
Refactored the XSDContributionProcessor as an XSDDocumentProcessor using the latest SCA contribution SPIs. Also added support for inline XSDs to the WSDLDocumentProcessor.

Added:
    incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/main/java/org/apache/tuscany/interfacedef/wsdl/xml/XSDDocumentProcessor.java   (with props)
    incubator/tuscany/java/sca/modules/interface-wsdl/src/main/java/org/apache/tuscany/interfacedef/wsdl/XSDefinition.java   (with props)
    incubator/tuscany/java/sca/modules/interface-wsdl/src/main/java/org/apache/tuscany/interfacedef/wsdl/impl/XSDefinitionImpl.java   (with props)
Modified:
    incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/main/java/org/apache/tuscany/interfacedef/wsdl/xml/WSDLDocumentProcessor.java
    incubator/tuscany/java/sca/modules/interface-wsdl/src/main/java/org/apache/tuscany/interfacedef/wsdl/WSDLDefinition.java
    incubator/tuscany/java/sca/modules/interface-wsdl/src/main/java/org/apache/tuscany/interfacedef/wsdl/WSDLFactory.java
    incubator/tuscany/java/sca/modules/interface-wsdl/src/main/java/org/apache/tuscany/interfacedef/wsdl/impl/DefaultWSDLFactory.java
    incubator/tuscany/java/sca/modules/interface-wsdl/src/main/java/org/apache/tuscany/interfacedef/wsdl/impl/WSDLDefinitionImpl.java

Modified: incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/main/java/org/apache/tuscany/interfacedef/wsdl/xml/WSDLDocumentProcessor.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/main/java/org/apache/tuscany/interfacedef/wsdl/xml/WSDLDocumentProcessor.java?view=diff&rev=527591&r1=527590&r2=527591
==============================================================================
--- incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/main/java/org/apache/tuscany/interfacedef/wsdl/xml/WSDLDocumentProcessor.java (original)
+++ incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/main/java/org/apache/tuscany/interfacedef/wsdl/xml/WSDLDocumentProcessor.java Wed Apr 11 11:08:10 2007
@@ -24,8 +24,10 @@
 import java.net.URL;
 
 import javax.wsdl.Definition;
+import javax.wsdl.Types;
 import javax.wsdl.WSDLException;
 import javax.wsdl.extensions.ExtensionRegistry;
+import javax.wsdl.extensions.schema.Schema;
 import javax.wsdl.xml.WSDLLocator;
 import javax.wsdl.xml.WSDLReader;
 
@@ -39,6 +41,10 @@
 import org.apache.tuscany.services.spi.contribution.ContributionWireException;
 import org.apache.tuscany.services.spi.contribution.ContributionWriteException;
 import org.apache.tuscany.services.spi.contribution.URLArtifactProcessor;
+import org.apache.ws.commons.schema.XmlSchema;
+import org.apache.ws.commons.schema.XmlSchemaCollection;
+import org.apache.ws.commons.schema.resolver.URIResolver;
+import org.w3c.dom.Element;
 import org.xml.sax.InputSource;
 
 /**
@@ -52,7 +58,10 @@
     private ExtensionRegistry wsdlExtensionRegistry;
     private WSDLFactory factory;
 
-    public class WSDLLocatorImpl implements WSDLLocator {
+    /**
+     * Implementation of a WSDL locator.
+     */
+    private class WSDLLocatorImpl implements WSDLLocator {
         private InputStream inputStream;
         private URL base;
         private String latestImportURI;
@@ -89,6 +98,23 @@
 
     }
 
+    /**
+     * URI resolver implementation for xml schema
+     */
+    private class URIResolverImpl implements URIResolver {
+
+        public org.xml.sax.InputSource resolveEntity(java.lang.String targetNamespace,
+                                                     java.lang.String schemaLocation,
+                                                     java.lang.String baseUri) {
+            try {
+                URL url = new URL(new URL(baseUri), schemaLocation);
+                return new InputSource(url.openStream());
+            } catch (IOException e) {
+                return null;
+            }
+        }
+    }
+
     public WSDLDocumentProcessor(WSDLFactory factory, javax.wsdl.factory.WSDLFactory wsdlFactory) {
         this.factory = factory;
         
@@ -123,6 +149,20 @@
             
             WSDLDefinition wsdlDefinition = factory.createWSDLDefinition();
             wsdlDefinition.setDefinition(definition);
+            
+            // Read inline schemas 
+            Types types = definition.getTypes();
+            if (types != null) {
+                XmlSchemaCollection collection = new XmlSchemaCollection();
+                collection.setSchemaResolver(new URIResolverImpl());
+                for (Object ext : types.getExtensibilityElements()) {
+                    if (ext instanceof Schema) {
+                        Element element = ((Schema)ext).getElement();
+                        XmlSchema s = collection.read(element, element.getBaseURI());
+                        wsdlDefinition.getInlinedSchemas().add(s);
+                    }
+                }
+            }
             
             return wsdlDefinition;
             

Added: incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/main/java/org/apache/tuscany/interfacedef/wsdl/xml/XSDDocumentProcessor.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/main/java/org/apache/tuscany/interfacedef/wsdl/xml/XSDDocumentProcessor.java?view=auto&rev=527591
==============================================================================
--- incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/main/java/org/apache/tuscany/interfacedef/wsdl/xml/XSDDocumentProcessor.java (added)
+++ incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/main/java/org/apache/tuscany/interfacedef/wsdl/xml/XSDDocumentProcessor.java Wed Apr 11 11:08:10 2007
@@ -0,0 +1,118 @@
+/*
+ * 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.interfacedef.wsdl.xml;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.URL;
+
+import org.apache.tuscany.interfacedef.wsdl.WSDLFactory;
+import org.apache.tuscany.interfacedef.wsdl.XSDefinition;
+import org.apache.tuscany.interfacedef.wsdl.impl.DefaultWSDLFactory;
+import org.apache.tuscany.services.spi.contribution.ArtifactResolver;
+import org.apache.tuscany.services.spi.contribution.ContributionReadException;
+import org.apache.tuscany.services.spi.contribution.ContributionResolveException;
+import org.apache.tuscany.services.spi.contribution.ContributionWireException;
+import org.apache.tuscany.services.spi.contribution.ContributionWriteException;
+import org.apache.tuscany.services.spi.contribution.URLArtifactProcessor;
+import org.apache.ws.commons.schema.XmlSchema;
+import org.apache.ws.commons.schema.XmlSchemaCollection;
+import org.apache.ws.commons.schema.resolver.URIResolver;
+import org.xml.sax.InputSource;
+
+/**
+ * An ArtifactProcessor for XSD documents.
+ *
+ * @version $Rev$ $Date$
+ */
+public class XSDDocumentProcessor implements URLArtifactProcessor<XSDefinition> {
+
+    private WSDLFactory factory;
+
+    /**
+     * URI resolver implementation for xml schema
+     */
+    private class URIResolverImpl implements URIResolver {
+
+        public org.xml.sax.InputSource resolveEntity(java.lang.String targetNamespace,
+                                                     java.lang.String schemaLocation,
+                                                     java.lang.String baseUri) {
+            try {
+                URL url = new URL(new URL(baseUri), schemaLocation);
+                return new InputSource(url.openStream());
+            } catch (IOException e) {
+                return null;
+            }
+        }
+    }
+
+    public XSDDocumentProcessor(WSDLFactory factory) {
+        this.factory = factory;
+    }
+    
+    public XSDDocumentProcessor() {
+        this(new DefaultWSDLFactory());
+    }
+
+    public XSDefinition read(URL url) throws ContributionReadException {
+        try {
+
+            // Read an XSD document
+            InputStream is = url.openStream();
+            try {
+    
+                XmlSchemaCollection collection = new XmlSchemaCollection();
+                collection.setSchemaResolver(new URIResolverImpl());
+                XmlSchema schema = collection.read(new InputStreamReader(is), null);
+    
+                XSDefinition xsDefinition = factory.createXSDefinition();
+                xsDefinition.setSchema(schema);
+                
+                return xsDefinition;
+            } finally {
+                is.close();
+            }
+            
+        } catch (IOException e) {
+            throw new ContributionReadException(e);
+        }
+    }
+    
+    public void write(XSDefinition wsdlDefinition, URL url) throws ContributionWriteException {
+        // TODO Auto-generated method stub
+    }
+    
+    public void resolve(XSDefinition model, ArtifactResolver resolver) throws ContributionResolveException {
+        // TODO Auto-generated method stub
+    }
+    
+    public void wire(XSDefinition model) throws ContributionWireException {
+        // TODO Auto-generated method stub
+    }
+    
+    public String getArtifactType() {
+        return ".xsd";
+    }
+    
+    public Class<XSDefinition> getModelType() {
+        return XSDefinition.class;
+    }
+}

Propchange: incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/main/java/org/apache/tuscany/interfacedef/wsdl/xml/XSDDocumentProcessor.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/main/java/org/apache/tuscany/interfacedef/wsdl/xml/XSDDocumentProcessor.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: incubator/tuscany/java/sca/modules/interface-wsdl/src/main/java/org/apache/tuscany/interfacedef/wsdl/WSDLDefinition.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface-wsdl/src/main/java/org/apache/tuscany/interfacedef/wsdl/WSDLDefinition.java?view=diff&rev=527591&r1=527590&r2=527591
==============================================================================
--- incubator/tuscany/java/sca/modules/interface-wsdl/src/main/java/org/apache/tuscany/interfacedef/wsdl/WSDLDefinition.java (original)
+++ incubator/tuscany/java/sca/modules/interface-wsdl/src/main/java/org/apache/tuscany/interfacedef/wsdl/WSDLDefinition.java Wed Apr 11 11:08:10 2007
@@ -19,8 +19,12 @@
 
 package org.apache.tuscany.interfacedef.wsdl;
 
+import java.util.List;
+
 import javax.wsdl.Definition;
 
+import org.apache.ws.commons.schema.XmlSchema;
+
 /**
  * Represents a WSDL definition.
  * WSDLDefinition
@@ -40,6 +44,12 @@
      * @param definition the WSDL definition model
      */
     void setDefinition(Definition definition);
+    
+    /**
+     * Returns a list of XML schemas inlined in this WSDL definition.
+     * @return
+     */
+    List<XmlSchema> getInlinedSchemas();
     
     /**
      * Returns the namespace of this WSDL definition.

Modified: incubator/tuscany/java/sca/modules/interface-wsdl/src/main/java/org/apache/tuscany/interfacedef/wsdl/WSDLFactory.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface-wsdl/src/main/java/org/apache/tuscany/interfacedef/wsdl/WSDLFactory.java?view=diff&rev=527591&r1=527590&r2=527591
==============================================================================
--- incubator/tuscany/java/sca/modules/interface-wsdl/src/main/java/org/apache/tuscany/interfacedef/wsdl/WSDLFactory.java (original)
+++ incubator/tuscany/java/sca/modules/interface-wsdl/src/main/java/org/apache/tuscany/interfacedef/wsdl/WSDLFactory.java Wed Apr 11 11:08:10 2007
@@ -40,6 +40,13 @@
     WSDLDefinition createWSDLDefinition();
     
     /**
+     * Creates a new XML Schema definition.
+     * 
+     * @return a new XML Schema definition
+     */
+    XSDefinition createXSDefinition();
+    
+    /**
      * Creates a new WSDL interface contract.
      * 
      * @return

Added: incubator/tuscany/java/sca/modules/interface-wsdl/src/main/java/org/apache/tuscany/interfacedef/wsdl/XSDefinition.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface-wsdl/src/main/java/org/apache/tuscany/interfacedef/wsdl/XSDefinition.java?view=auto&rev=527591
==============================================================================
--- incubator/tuscany/java/sca/modules/interface-wsdl/src/main/java/org/apache/tuscany/interfacedef/wsdl/XSDefinition.java (added)
+++ incubator/tuscany/java/sca/modules/interface-wsdl/src/main/java/org/apache/tuscany/interfacedef/wsdl/XSDefinition.java Wed Apr 11 11:08:10 2007
@@ -0,0 +1,69 @@
+/*
+ * 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.interfacedef.wsdl;
+
+import org.apache.ws.commons.schema.XmlSchema;
+
+/**
+ * Represents an XML Schema definition.
+ *
+ * @version $Rev$ $Date$
+ */
+public interface XSDefinition {
+    
+    /**
+     * Returns the XmlSchema definition model
+     * @return the XmlSchema definition model
+     */
+    XmlSchema getSchema();
+    
+    /**
+     * Sets the XmlSchema definition model
+     * @param definition the XmlSchema definition model
+     */
+    void setSchema(XmlSchema definition);
+    
+    /**
+     * Returns the namespace of this XmlSchema definition.
+     * @return the namespace of this XmlSchema definition
+     */
+    String getNamespace();
+
+    /**
+     * Sets the namespace of this XmlSchema definition.
+     * @param namespace the namespace of this XmlSchema definition
+     */
+    void setNamespace(String namespace);
+
+    /**
+     * Returns true if the model element is unresolved.
+     * 
+     * @return true if the model element is unresolved.
+     */
+    boolean isUnresolved();
+
+    /**
+     * Sets whether the model element is unresolved.
+     * 
+     * @param unresolved whether the model element is unresolved
+     */
+    void setUnresolved(boolean unresolved);
+
+}

Propchange: incubator/tuscany/java/sca/modules/interface-wsdl/src/main/java/org/apache/tuscany/interfacedef/wsdl/XSDefinition.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/modules/interface-wsdl/src/main/java/org/apache/tuscany/interfacedef/wsdl/XSDefinition.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: incubator/tuscany/java/sca/modules/interface-wsdl/src/main/java/org/apache/tuscany/interfacedef/wsdl/impl/DefaultWSDLFactory.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface-wsdl/src/main/java/org/apache/tuscany/interfacedef/wsdl/impl/DefaultWSDLFactory.java?view=diff&rev=527591&r1=527590&r2=527591
==============================================================================
--- incubator/tuscany/java/sca/modules/interface-wsdl/src/main/java/org/apache/tuscany/interfacedef/wsdl/impl/DefaultWSDLFactory.java (original)
+++ incubator/tuscany/java/sca/modules/interface-wsdl/src/main/java/org/apache/tuscany/interfacedef/wsdl/impl/DefaultWSDLFactory.java Wed Apr 11 11:08:10 2007
@@ -22,6 +22,7 @@
 import org.apache.tuscany.interfacedef.wsdl.WSDLFactory;
 import org.apache.tuscany.interfacedef.wsdl.WSDLInterface;
 import org.apache.tuscany.interfacedef.wsdl.WSDLInterfaceContract;
+import org.apache.tuscany.interfacedef.wsdl.XSDefinition;
 
 /**
  * A factory for the WSDL model.
@@ -40,6 +41,10 @@
     
     public WSDLInterfaceContract createWSDLInterfaceContract() {
         return new WSDLInterfaceContractImpl();
+    }
+    
+    public XSDefinition createXSDefinition() {
+        return new XSDefinitionImpl();
     }
 
 }

Modified: incubator/tuscany/java/sca/modules/interface-wsdl/src/main/java/org/apache/tuscany/interfacedef/wsdl/impl/WSDLDefinitionImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface-wsdl/src/main/java/org/apache/tuscany/interfacedef/wsdl/impl/WSDLDefinitionImpl.java?view=diff&rev=527591&r1=527590&r2=527591
==============================================================================
--- incubator/tuscany/java/sca/modules/interface-wsdl/src/main/java/org/apache/tuscany/interfacedef/wsdl/impl/WSDLDefinitionImpl.java (original)
+++ incubator/tuscany/java/sca/modules/interface-wsdl/src/main/java/org/apache/tuscany/interfacedef/wsdl/impl/WSDLDefinitionImpl.java Wed Apr 11 11:08:10 2007
@@ -19,9 +19,13 @@
 
 package org.apache.tuscany.interfacedef.wsdl.impl;
 
+import java.util.ArrayList;
+import java.util.List;
+
 import javax.wsdl.Definition;
 
 import org.apache.tuscany.interfacedef.wsdl.WSDLDefinition;
+import org.apache.ws.commons.schema.XmlSchema;
 
 /**
  * Represents a WSDL definition.
@@ -32,6 +36,7 @@
     
     private Definition definition;
     private String namespace;
+    private List<XmlSchema> inlineSchemas = new ArrayList<XmlSchema>();
     private boolean unresolved;
 
     public Definition getDefinition() {
@@ -40,6 +45,10 @@
 
     public void setDefinition(Definition definition) {
         this.definition = definition;
+    }
+    
+    public List<XmlSchema> getInlinedSchemas() {
+        return inlineSchemas;
     }
 
     public boolean isUnresolved() {

Added: incubator/tuscany/java/sca/modules/interface-wsdl/src/main/java/org/apache/tuscany/interfacedef/wsdl/impl/XSDefinitionImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface-wsdl/src/main/java/org/apache/tuscany/interfacedef/wsdl/impl/XSDefinitionImpl.java?view=auto&rev=527591
==============================================================================
--- incubator/tuscany/java/sca/modules/interface-wsdl/src/main/java/org/apache/tuscany/interfacedef/wsdl/impl/XSDefinitionImpl.java (added)
+++ incubator/tuscany/java/sca/modules/interface-wsdl/src/main/java/org/apache/tuscany/interfacedef/wsdl/impl/XSDefinitionImpl.java Wed Apr 11 11:08:10 2007
@@ -0,0 +1,85 @@
+/*
+ * 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.interfacedef.wsdl.impl;
+
+import org.apache.tuscany.interfacedef.wsdl.WSDLDefinition;
+import org.apache.tuscany.interfacedef.wsdl.XSDefinition;
+import org.apache.ws.commons.schema.XmlSchema;
+
+/**
+ * Represents a XML schema definition.
+ *
+ * @version $Rev$ $Date$
+ */
+public class XSDefinitionImpl implements XSDefinition {
+    
+    private XmlSchema definition;
+    private String namespace;
+    private boolean unresolved;
+
+    public XmlSchema getSchema() {
+        return definition;
+    }
+
+    public void setSchema(XmlSchema definition) {
+        this.definition = definition;
+    }
+
+    public boolean isUnresolved() {
+        return unresolved;
+    }
+
+    public void setUnresolved(boolean undefined) {
+        this.unresolved = undefined;
+    }
+    
+    public String getNamespace() {
+        if (isUnresolved()) {
+            return namespace;
+        } else if (definition != null) {
+            return definition.getTargetNamespace();
+        } else {
+            return null;
+        }
+    }
+    
+    public void setNamespace(String namespace) {
+        if (!isUnresolved()) {
+            throw new IllegalStateException();
+        } else {
+            this.namespace = namespace;
+        }
+    }
+    
+    @Override
+    public int hashCode() {
+        return String.valueOf(getNamespace()).hashCode();
+    }
+    
+    @Override
+    public boolean equals(Object obj) {
+        if (obj == this)
+            return true;
+        else if (obj instanceof WSDLDefinition && getNamespace().equals(((WSDLDefinition)obj).getNamespace()))
+             return true;
+        else
+            return false;
+    }
+}

Propchange: incubator/tuscany/java/sca/modules/interface-wsdl/src/main/java/org/apache/tuscany/interfacedef/wsdl/impl/XSDefinitionImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/modules/interface-wsdl/src/main/java/org/apache/tuscany/interfacedef/wsdl/impl/XSDefinitionImpl.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date



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