You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by dk...@apache.org on 2008/08/15 19:09:55 UTC

svn commit: r686283 - in /cxf/trunk: api/src/main/java/org/apache/cxf/service/model/ rt/core/src/main/java/org/apache/cxf/catalog/ rt/core/src/main/java/org/apache/cxf/wsdl11/ rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/ tools/validator/src/ma...

Author: dkulp
Date: Fri Aug 15 10:09:54 2008
New Revision: 686283

URL: http://svn.apache.org/viewvc?rev=686283&view=rev
Log:
Bunch of updates to tools to try and reuse cached schemas and stuff instead of re-parsing.  Should make the tools a bit faster as well as use less memory.

Modified:
    cxf/trunk/api/src/main/java/org/apache/cxf/service/model/ServiceInfo.java
    cxf/trunk/api/src/main/java/org/apache/cxf/service/model/ServiceSchemaInfo.java
    cxf/trunk/rt/core/src/main/java/org/apache/cxf/catalog/CatalogXmlSchemaURIResolver.java
    cxf/trunk/rt/core/src/main/java/org/apache/cxf/wsdl11/SchemaUtil.java
    cxf/trunk/rt/core/src/main/java/org/apache/cxf/wsdl11/WSDLServiceBuilder.java
    cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/ServiceImpl.java
    cxf/trunk/tools/validator/src/main/java/org/apache/cxf/tools/validator/internal/AbstractDefinitionValidator.java
    cxf/trunk/tools/validator/src/main/java/org/apache/cxf/tools/validator/internal/WSDL11Validator.java
    cxf/trunk/tools/validator/src/main/java/org/apache/cxf/tools/validator/internal/WSDLRefValidator.java
    cxf/trunk/tools/validator/src/test/java/org/apache/cxf/tools/validator/internal/WSDLRefValidatorTest.java
    cxf/trunk/tools/wsdlto/core/src/main/java/org/apache/cxf/tools/wsdlto/WSDLToJavaContainer.java
    cxf/trunk/tools/wsdlto/core/src/main/java/org/apache/cxf/tools/wsdlto/core/AbstractWSDLBuilder.java
    cxf/trunk/tools/wsdlto/databinding/jaxb/src/main/java/org/apache/cxf/tools/wsdlto/databinding/jaxb/JAXBDataBinding.java
    cxf/trunk/tools/wsdlto/frontend/javascript/src/main/java/org/apache/cxf/tools/wsdlto/javascript/JavaScriptContainer.java
    cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/wsdl11/JAXWSDefinitionBuilder.java

Modified: cxf/trunk/api/src/main/java/org/apache/cxf/service/model/ServiceInfo.java
URL: http://svn.apache.org/viewvc/cxf/trunk/api/src/main/java/org/apache/cxf/service/model/ServiceInfo.java?rev=686283&r1=686282&r2=686283&view=diff
==============================================================================
--- cxf/trunk/api/src/main/java/org/apache/cxf/service/model/ServiceInfo.java (original)
+++ cxf/trunk/api/src/main/java/org/apache/cxf/service/model/ServiceInfo.java Fri Aug 15 10:09:54 2008
@@ -166,7 +166,7 @@
     }
 
     public List<SchemaInfo> getSchemas() {
-        return Collections.unmodifiableList(schemas);
+        return schemas;
     }
 
     public SchemaCollection getXmlSchemaCollection() {

Modified: cxf/trunk/api/src/main/java/org/apache/cxf/service/model/ServiceSchemaInfo.java
URL: http://svn.apache.org/viewvc/cxf/trunk/api/src/main/java/org/apache/cxf/service/model/ServiceSchemaInfo.java?rev=686283&r1=686282&r2=686283&view=diff
==============================================================================
--- cxf/trunk/api/src/main/java/org/apache/cxf/service/model/ServiceSchemaInfo.java (original)
+++ cxf/trunk/api/src/main/java/org/apache/cxf/service/model/ServiceSchemaInfo.java Fri Aug 15 10:09:54 2008
@@ -21,6 +21,9 @@
 
 import java.util.ArrayList;
 import java.util.List;
+import java.util.Map;
+
+import org.w3c.dom.Element;
 
 import org.apache.cxf.common.xmlschema.SchemaCollection;
 
@@ -31,6 +34,7 @@
 public class ServiceSchemaInfo {
     private SchemaCollection schemaCollection;
     private List<SchemaInfo> schemaInfoList;
+    private Map<String, Element> schemaElementList;
     
     public SchemaCollection getSchemaCollection() {
         return schemaCollection;
@@ -44,5 +48,10 @@
     public void setSchemaInfoList(List<SchemaInfo> schemaInfoList) {
         this.schemaInfoList = new ArrayList<SchemaInfo>(schemaInfoList);
     }
-
+    public Map<String, Element> getSchemaElementList() {
+        return schemaElementList;
+    }
+    public void setSchemaElementList(Map<String, Element> l) {
+        schemaElementList = l;
+    }
 }

Modified: cxf/trunk/rt/core/src/main/java/org/apache/cxf/catalog/CatalogXmlSchemaURIResolver.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/core/src/main/java/org/apache/cxf/catalog/CatalogXmlSchemaURIResolver.java?rev=686283&r1=686282&r2=686283&view=diff
==============================================================================
--- cxf/trunk/rt/core/src/main/java/org/apache/cxf/catalog/CatalogXmlSchemaURIResolver.java (original)
+++ cxf/trunk/rt/core/src/main/java/org/apache/cxf/catalog/CatalogXmlSchemaURIResolver.java Fri Aug 15 10:09:54 2008
@@ -20,6 +20,8 @@
 
 import java.io.IOException;
 import java.io.InputStream;
+import java.util.HashMap;
+import java.util.Map;
 
 import org.xml.sax.InputSource;
 
@@ -37,6 +39,7 @@
 
     private ExtendedURIResolver resolver;
     private Catalog catalogResolver;
+    private Map<String, String> resolved = new HashMap<String, String>();
 
     public CatalogXmlSchemaURIResolver(Bus bus) {
         this(OASISCatalogManager.getCatalogManager(bus));
@@ -45,6 +48,10 @@
         this.resolver = new ExtendedURIResolver();
         this.catalogResolver = catalogManager.getCatalog();
     }
+    
+    public Map<String, String> getResolvedMap() {
+        return resolved;
+    }
 
     public InputSource resolveEntity(String targetNamespace, String schemaLocation, String baseUri) {
         String resolvedSchemaLocation = null;
@@ -65,6 +72,7 @@
         if (resolvedSchemaLocation == null) {
             in = this.resolver.resolve(schemaLocation, baseUri);
         } else {
+            resolved.put(schemaLocation, resolvedSchemaLocation);
             in = this.resolver.resolve(resolvedSchemaLocation, baseUri);
         }
 

Modified: cxf/trunk/rt/core/src/main/java/org/apache/cxf/wsdl11/SchemaUtil.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/core/src/main/java/org/apache/cxf/wsdl11/SchemaUtil.java?rev=686283&r1=686282&r2=686283&view=diff
==============================================================================
--- cxf/trunk/rt/core/src/main/java/org/apache/cxf/wsdl11/SchemaUtil.java (original)
+++ cxf/trunk/rt/core/src/main/java/org/apache/cxf/wsdl11/SchemaUtil.java Fri Aug 15 10:09:54 2008
@@ -21,6 +21,7 @@
 
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.HashMap;
 import java.util.IdentityHashMap;
 import java.util.Iterator;
 import java.util.List;
@@ -47,21 +48,29 @@
 
 public final class SchemaUtil {
     private final Map<String, Element> schemaList;
+    private final Map<String, String> catalogResolved = new HashMap<String, String>();
     private final Bus bus;
-    private Map<String, String> catalogResolvedMap;
-
 
     public SchemaUtil(final Bus b, final Map<String, Element> s) {
         this.bus = b;
         this.schemaList = s;
     }
-
     public void getSchemas(final Definition def, final ServiceInfo serviceInfo) {
         SchemaCollection schemaCol = serviceInfo.getXmlSchemaCollection();
+        getSchemas(def, schemaCol, serviceInfo);
+    }
+    public void getSchemas(final Definition def, 
+                           SchemaCollection schemaCol, 
+                           ServiceInfo serviceInfo) {
+        getSchemas(def, schemaCol, serviceInfo.getSchemas());
+    }
 
+    public void getSchemas(final Definition def, 
+                           final SchemaCollection schemaCol,
+                           List<SchemaInfo> schemas) {
         List<Definition> defList = new ArrayList<Definition>();
         parseImports(def, defList);
-        extractSchema(def, schemaCol, serviceInfo);
+        extractSchema(def, schemaCol, schemas);
         // added
         getSchemaList(def);
         
@@ -69,7 +78,7 @@
         done.put(def, def);
         for (Definition def2 : defList) {
             if (!done.containsKey(def2)) {
-                extractSchema(def2, schemaCol, serviceInfo);
+                extractSchema(def2, schemaCol, schemas);
                 // added
                 getSchemaList(def2);
                 done.put(def2, def2);
@@ -77,7 +86,7 @@
         }
     }
 
-    private void extractSchema(Definition def, SchemaCollection schemaCol, ServiceInfo serviceInfo) {
+    private void extractSchema(Definition def, SchemaCollection schemaCol, List<SchemaInfo> schemaInfos) {
         Types typesElement = def.getTypes();
         if (typesElement != null) {
             int schemaCount = 1;
@@ -109,11 +118,12 @@
                         schemaCol.setSchemaResolver(schemaResolver);
                         
                         XmlSchema xmlSchema = schemaCol.read(schemaElem, systemId);
+                        catalogResolved.putAll(schemaResolver.getResolvedMap());
                         SchemaInfo schemaInfo = new SchemaInfo(xmlSchema.getTargetNamespace());
                         schemaInfo.setElement(schemaElem);
                         schemaInfo.setSchema(xmlSchema);
                         schemaInfo.setSystemId(systemId);
-                        serviceInfo.addSchema(schemaInfo);
+                        schemaInfos.add(schemaInfo);
                         schemaCount++;
                     }
                 }
@@ -179,10 +189,11 @@
                     if (importNamespace == null && tempImport != null) {
                         importNamespace = tempImport.getDocumentBaseURI();
                     }
-                    if ((catalogResolvedMap == null || !catalogResolvedMap.containsKey(key)) 
-                        && tempImport != null) {                 
+                    
+                    if (tempImport != null && !catalogResolved.containsKey(key)) {                 
                         key = tempImport.getDocumentBaseURI();
                     }
+                    
                     if (tempImport != null
                         && !isSchemaParsed(key, importNamespace)
                         && !schemaList.containsValue(tempImport.getElement())) {
@@ -204,8 +215,4 @@
         }
         return false;
     }
-
-    public void setCatalogResolvedMap(Map<String, String> resolvedMap) {
-        catalogResolvedMap = resolvedMap;
-    }
 }

Modified: cxf/trunk/rt/core/src/main/java/org/apache/cxf/wsdl11/WSDLServiceBuilder.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/core/src/main/java/org/apache/cxf/wsdl11/WSDLServiceBuilder.java?rev=686283&r1=686282&r2=686283&view=diff
==============================================================================
--- cxf/trunk/rt/core/src/main/java/org/apache/cxf/wsdl11/WSDLServiceBuilder.java (original)
+++ cxf/trunk/rt/core/src/main/java/org/apache/cxf/wsdl11/WSDLServiceBuilder.java Fri Aug 15 10:09:54 2008
@@ -101,7 +101,6 @@
     private static final Logger LOG = LogUtils.getL7dLogger(WSDLServiceBuilder.class);
     private Bus bus;
     private Map<String, Element> schemaList = new HashMap<String, Element>();
-    private Map<String, String> catalogResolvedMap;
 
     public WSDLServiceBuilder(Bus bus) {
         this.bus = bus;
@@ -165,7 +164,6 @@
         List<Definition> defList = new ArrayList<Definition>();
         defList.add(d);
         parseImports(d, defList);
-        WSDLManager wsdlManager = bus.getExtension(WSDLManager.class); 
         for (Definition def : defList) {
 
             for (Iterator ite = def.getPortTypes().entrySet().iterator(); ite.hasNext();) {
@@ -188,12 +186,6 @@
                 service.setDescription(description);
                 service.setProperty(WSDL_DEFINITION, def);
                 getSchemas(def, service);
-                if (wsdlManager != null) {
-                    ServiceSchemaInfo serviceSchemaInfo = new ServiceSchemaInfo();
-                    serviceSchemaInfo.setSchemaCollection(service.getXmlSchemaCollection());
-                    serviceSchemaInfo.setSchemaInfoList(service.getSchemas());
-                    wsdlManager.putSchemasForDefinition(def, serviceSchemaInfo);
-                }
 
                 service.setProperty(WSDL_SCHEMA_ELEMENT_LIST, this.schemaList);
                 serviceList.add(service);
@@ -219,14 +211,6 @@
 
         buildInterface(service, p);
 
-        WSDLManager wsdlManager = bus.getExtension(WSDLManager.class); 
-        if (wsdlManager != null) {
-            ServiceSchemaInfo serviceSchemaInfo = new ServiceSchemaInfo();
-            serviceSchemaInfo.setSchemaCollection(service.getXmlSchemaCollection());
-            serviceSchemaInfo.setSchemaInfoList(service.getSchemas());
-            wsdlManager.putSchemasForDefinition(def, serviceSchemaInfo);
-        }
-
         return service;
     }
 
@@ -259,7 +243,7 @@
                 service.setProperty(WSDL_DEFINITION, def);
                 service.setProperty(WSDL_SERVICE, serv);
                 getSchemas(def, service);
-                
+
                 service.setProperty(WSDL_SCHEMA_ELEMENT_LIST, this.schemaList);
                 service.setTargetNamespace(def.getTargetNamespace());
                 service.setName(serv.getQName());
@@ -291,9 +275,9 @@
         
         if (serviceSchemaInfo == null) {
             SchemaUtil schemaUtil = new SchemaUtil(bus, this.schemaList);
-            schemaUtil.setCatalogResolvedMap(this.catalogResolvedMap);
             schemaUtil.getSchemas(def, serviceInfo);
             serviceSchemaInfo = new ServiceSchemaInfo();
+            serviceSchemaInfo.setSchemaElementList(this.schemaList);
             serviceSchemaInfo.setSchemaCollection(serviceInfo.getXmlSchemaCollection());
             serviceSchemaInfo.setSchemaInfoList(serviceInfo.getSchemas());
             if (wsdlManager != null) {
@@ -301,6 +285,7 @@
             }
         } else {
             serviceInfo.setServiceSchemaInfo(serviceSchemaInfo);
+            schemaList.putAll(serviceSchemaInfo.getSchemaElementList());
         }
     }
 
@@ -735,8 +720,4 @@
         }
     }
     
-    public void setCatalogResolvedMap(Map<String, String> resolvedMap) {
-        catalogResolvedMap = resolvedMap;
-    }
-
 }

Modified: cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/ServiceImpl.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/ServiceImpl.java?rev=686283&r1=686282&r2=686283&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/ServiceImpl.java (original)
+++ cxf/trunk/rt/frontend/jaxws/src/main/java/org/apache/cxf/jaxws/ServiceImpl.java Fri Aug 15 10:09:54 2008
@@ -137,7 +137,7 @@
         }
     }
     
-    private void initializePorts() {        
+    private void initializePorts() {   
         WSDLServiceFactory sf = new WSDLServiceFactory(bus, wsdlURL, serviceName);
         Service service = sf.create();
         for (ServiceInfo si : service.getServiceInfos()) { 

Modified: cxf/trunk/tools/validator/src/main/java/org/apache/cxf/tools/validator/internal/AbstractDefinitionValidator.java
URL: http://svn.apache.org/viewvc/cxf/trunk/tools/validator/src/main/java/org/apache/cxf/tools/validator/internal/AbstractDefinitionValidator.java?rev=686283&r1=686282&r2=686283&view=diff
==============================================================================
--- cxf/trunk/tools/validator/src/main/java/org/apache/cxf/tools/validator/internal/AbstractDefinitionValidator.java (original)
+++ cxf/trunk/tools/validator/src/main/java/org/apache/cxf/tools/validator/internal/AbstractDefinitionValidator.java Fri Aug 15 10:09:54 2008
@@ -28,7 +28,7 @@
 
 public abstract class AbstractDefinitionValidator extends AbstractValidator {
     
-    protected final Definition def;
+    protected Definition def;
     protected ToolContext env;
     
     private final Bus bus;

Modified: cxf/trunk/tools/validator/src/main/java/org/apache/cxf/tools/validator/internal/WSDL11Validator.java
URL: http://svn.apache.org/viewvc/cxf/trunk/tools/validator/src/main/java/org/apache/cxf/tools/validator/internal/WSDL11Validator.java?rev=686283&r1=686282&r2=686283&view=diff
==============================================================================
--- cxf/trunk/tools/validator/src/main/java/org/apache/cxf/tools/validator/internal/WSDL11Validator.java (original)
+++ cxf/trunk/tools/validator/src/main/java/org/apache/cxf/tools/validator/internal/WSDL11Validator.java Fri Aug 15 10:09:54 2008
@@ -37,6 +37,7 @@
 import java.util.logging.Level;
 import java.util.logging.Logger;
 import javax.wsdl.Definition;
+import javax.wsdl.WSDLException;
 
 import org.w3c.dom.Document;
 import org.xml.sax.InputSource;
@@ -47,13 +48,13 @@
 import org.apache.cxf.common.i18n.Message;
 import org.apache.cxf.common.logging.LogUtils;
 import org.apache.cxf.common.util.StringUtils;
-import org.apache.cxf.helpers.XMLUtils;
 import org.apache.cxf.resource.URIResolver;
 import org.apache.cxf.tools.common.ToolConstants;
 import org.apache.cxf.tools.common.ToolContext;
 import org.apache.cxf.tools.common.ToolException;
 import org.apache.cxf.tools.util.URIParserUtil;
 import org.apache.cxf.tools.validator.AbstractValidator;
+import org.apache.cxf.wsdl.WSDLManager;
 import org.apache.xml.resolver.Catalog;
 
 public class WSDL11Validator extends AbstractDefinitionValidator {
@@ -87,7 +88,7 @@
             if (nw == null) {
                 nw = wsdl;
             }
-            return XMLUtils.parse(new InputSource(URIParserUtil.getAbsoluteURI(nw)));
+            return new Stax2DOM().getDocument(URIParserUtil.getAbsoluteURI(nw));
         } catch (FileNotFoundException fe) {
             LOG.log(Level.WARNING, "Cannot find the wsdl " + wsdl + "to validate");
             return null;
@@ -111,15 +112,22 @@
         if (doc == null) {
             return true;
         }
-        WSDLRefValidator wsdlRefValidator = new WSDLRefValidator(wsdl, doc, getBus());
-        wsdlRefValidator.setSuppressWarnings(env.optionSet(ToolConstants.CFG_SUPPRESS_WARNINGS));
-        Definition wsdlDef = wsdlRefValidator.getDefinition();        
+        if (this.def == null) {
+            try {
+                this.def = getBus().getExtension(WSDLManager.class).getDefinition(wsdl);
+            } catch (WSDLException e) {
+                throw new ToolException(e);
+            }
+        }
+        
+        WSDLRefValidator wsdlRefValidator = new WSDLRefValidator(this.def, doc, getBus());
+        wsdlRefValidator.setSuppressWarnings(env.optionSet(ToolConstants.CFG_SUPPRESS_WARNINGS));        
         validators.add(wsdlRefValidator);
-
+        
         if (env.optionSet(ToolConstants.CFG_VALIDATE_WSDL)) {
-            validators.add(new UniqueBodyPartsValidator(wsdlDef));
-            validators.add(new WSIBPValidator(wsdlDef));
-            validators.add(new MIMEBindingValidator(wsdlDef));
+            validators.add(new UniqueBodyPartsValidator(this.def));
+            validators.add(new WSIBPValidator(this.def));
+            validators.add(new MIMEBindingValidator(this.def));
         }
 
         for (AbstractValidator validator : validators) {

Modified: cxf/trunk/tools/validator/src/main/java/org/apache/cxf/tools/validator/internal/WSDLRefValidator.java
URL: http://svn.apache.org/viewvc/cxf/trunk/tools/validator/src/main/java/org/apache/cxf/tools/validator/internal/WSDLRefValidator.java?rev=686283&r1=686282&r2=686283&view=diff
==============================================================================
--- cxf/trunk/tools/validator/src/main/java/org/apache/cxf/tools/validator/internal/WSDLRefValidator.java (original)
+++ cxf/trunk/tools/validator/src/main/java/org/apache/cxf/tools/validator/internal/WSDLRefValidator.java Fri Aug 15 10:09:54 2008
@@ -23,6 +23,7 @@
 import java.net.URISyntaxException;
 import java.net.URL;
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
@@ -35,17 +36,18 @@
 import javax.wsdl.BindingOperation;
 import javax.wsdl.Definition;
 import javax.wsdl.Fault;
+import javax.wsdl.Import;
 import javax.wsdl.Operation;
 import javax.wsdl.Part;
 import javax.wsdl.Port;
 import javax.wsdl.PortType;
 import javax.wsdl.Service;
-import javax.wsdl.WSDLException;
 import javax.xml.namespace.QName;
 import javax.xml.stream.Location;
 import javax.xml.xpath.XPathConstants;
 
 import org.w3c.dom.Document;
+import org.w3c.dom.Element;
 import org.w3c.dom.Node;
 
 import org.apache.cxf.Bus;
@@ -54,7 +56,10 @@
 import org.apache.cxf.common.logging.LogUtils;
 import org.apache.cxf.common.util.StringUtils;
 import org.apache.cxf.common.xmlschema.SchemaCollection;
+import org.apache.cxf.helpers.CastUtils;
 import org.apache.cxf.helpers.XPathUtils;
+import org.apache.cxf.service.model.SchemaInfo;
+import org.apache.cxf.service.model.ServiceSchemaInfo;
 import org.apache.cxf.tools.common.ToolException;
 import org.apache.cxf.tools.validator.internal.model.FailureLocation;
 import org.apache.cxf.tools.validator.internal.model.XBinding;
@@ -70,7 +75,7 @@
 import org.apache.cxf.tools.validator.internal.model.XService;
 import org.apache.cxf.wsdl.WSDLConstants;
 import org.apache.cxf.wsdl.WSDLManager;
-import org.apache.cxf.wsdl11.WSDLDefinitionBuilder;
+import org.apache.cxf.wsdl11.SchemaUtil;
 import org.apache.ws.commons.schema.XmlSchemaElement;
 import org.apache.ws.commons.schema.XmlSchemaType;
 
@@ -85,57 +90,69 @@
     private ValidationResult vResults = new ValidationResult();
 
     private Definition definition;
+    private Document baseDoc;
 
     private List<Definition> importedDefinitions;
-    private List<SchemaCollection> schemas = new ArrayList<SchemaCollection>();
     private SchemaCollection schemaCollection = new SchemaCollection();
 
     private boolean suppressWarnings;
 
-    public WSDLRefValidator() {
-    }
-
-    public WSDLRefValidator(final String wsdl) {
-        this(wsdl, null);
-    }
-
-    public WSDLRefValidator(final String wsdl, final Document doc) {
+    public WSDLRefValidator(Definition wsdl, Document doc) {
         this(wsdl, doc, BusFactory.getDefaultBus());
     }
 
-    public WSDLRefValidator(final String wsdl, final Document doc, final Bus b) {
-        WSDLDefinitionBuilder wsdlBuilder = new WSDLDefinitionBuilder(b);
-
+    public WSDLRefValidator(Definition wsdl, Document doc, Bus bus) {
+        this.definition = wsdl;
+        baseDoc = doc;
+        importedDefinitions = new ArrayList<Definition>();
+        parseImports(wsdl);
+        processSchemas(bus);
+    }
+    private void getSchemas(Bus bus) {
+        Map<String, Element> schemaList = new HashMap<String, Element>();
+        SchemaUtil schemaUtil = new SchemaUtil(bus, schemaList);
+        List<SchemaInfo> si = new ArrayList<SchemaInfo>();
+        schemaUtil.getSchemas(definition, schemaCollection, si);
+        ServiceSchemaInfo ssi = new ServiceSchemaInfo();
+        ssi.setSchemaCollection(schemaCollection);
+        ssi.setSchemaInfoList(si);
+        ssi.setSchemaElementList(schemaList);
+        bus.getExtension(WSDLManager.class).putSchemasForDefinition(definition, ssi);
+    }
+    private void processSchemas(Bus bus) {
         try {
-            this.definition = wsdlBuilder.build(wsdl);
-            WSDLManager mgr = b.getExtension(WSDLManager.class);
-            mgr.removeDefinition(this.definition);
-
-            if (wsdlBuilder.getImportedDefinitions().size() > 0) {
-                importedDefinitions = new ArrayList<Definition>();
-                importedDefinitions.addAll(wsdlBuilder.getImportedDefinitions());
-            }
-        } catch (Exception e) {
-            if (e.getCause() instanceof WSDLException) {
-                throw new ToolException(e.getCause().getMessage());
+            ServiceSchemaInfo info = bus.getExtension(WSDLManager.class)
+                .getSchemasForDefinition(definition);
+            if (info == null) {
+                getSchemas(bus);
+            } else {
+                schemaCollection = info.getSchemaCollection();                
             }
-            throw new ToolException(e);
-        }
-
-        try {
-            schemas.add(ValidatorUtil.getSchema(this.definition));
             checkTargetNamespace(this.definition.getTargetNamespace());
-            if (importedDefinitions != null) {
-                for (Definition d : importedDefinitions) {
-                    checkTargetNamespace(d.getTargetNamespace());
-                    schemas.add(ValidatorUtil.getSchema(d));
-                }
-            }
         } catch (Exception ex) {
             throw new ToolException(ex);
+        }        
+    }
+    private Collection<Import> getImports(final Definition wsdlDef) {
+        Collection<Import> importList = new ArrayList<Import>();
+        Map imports = wsdlDef.getImports();
+        for (Iterator iter = imports.keySet().iterator(); iter.hasNext();) {
+            String uri = (String)iter.next();
+            List<Import> lst = CastUtils.cast((List)imports.get(uri));
+            importList.addAll(lst);
+        }
+        return importList;
+    }
+    private void parseImports(Definition def) {
+        for (Import impt : getImports(def)) {
+            if (!importedDefinitions.contains(impt.getDefinition())) {
+                importedDefinitions.add(impt.getDefinition());
+                parseImports(impt.getDefinition());
+            }
         }
     }
 
+    
     private void checkTargetNamespace(String path) {
         try {
             if (new URL(path).getPath().indexOf(":") != -1) {
@@ -159,6 +176,9 @@
     }
 
     private Document getWSDLDocument() throws Exception {
+        if (baseDoc != null) {
+            return baseDoc;
+        }
         return getWSDLDocument(this.definition.getDocumentBaseURI());
     }
 
@@ -564,7 +584,7 @@
 
         if (namespace.equals(WSDLConstants.NS_SCHEMA_XSD)) {
             if (isElement) {
-                XmlSchemaElement  schemaEle =
+                XmlSchemaElement schemaEle =
                     schemaCollection.getElementByQName(new QName(WSDLConstants.NS_SCHEMA_XSD, name));
                 partvalid = schemaEle != null ? true : false;
             } else {
@@ -579,20 +599,12 @@
 
         } else {
             if (isElement) {
-                for (SchemaCollection schema : schemas) {
-                    if (schema != null && schema.getElementByQName(
-                            new QName(namespace, name)) != null) {
-                        partvalid = true;
-                        break;
-                    }
+                if (schemaCollection.getElementByQName(new QName(namespace, name)) != null) {
+                    partvalid = true;
                 }
             } else {
-                for (SchemaCollection schema : schemas) {
-                    if (schema != null && schema.getTypeByQName(
-                            new QName(namespace, name)) != null) {
-                        partvalid = true;
-                        break;
-                    }
+                if (schemaCollection.getTypeByQName(new QName(namespace, name)) != null) {
+                    partvalid = true;
                 }
             }
         }

Modified: cxf/trunk/tools/validator/src/test/java/org/apache/cxf/tools/validator/internal/WSDLRefValidatorTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/tools/validator/src/test/java/org/apache/cxf/tools/validator/internal/WSDLRefValidatorTest.java?rev=686283&r1=686282&r2=686283&view=diff
==============================================================================
--- cxf/trunk/tools/validator/src/test/java/org/apache/cxf/tools/validator/internal/WSDLRefValidatorTest.java (original)
+++ cxf/trunk/tools/validator/src/test/java/org/apache/cxf/tools/validator/internal/WSDLRefValidatorTest.java Fri Aug 15 10:09:54 2008
@@ -21,19 +21,28 @@
 
 import java.util.HashSet;
 import java.util.Set;
+import javax.wsdl.Definition;
 
+import org.apache.cxf.Bus;
+import org.apache.cxf.BusFactory;
 import org.apache.cxf.common.i18n.Message;
-import org.apache.cxf.tools.common.ToolException;
 import org.apache.cxf.tools.validator.internal.model.XNode;
+import org.apache.cxf.wsdl11.WSDLDefinitionBuilder;
 import org.junit.Assert;
 import org.junit.Test;
 
 public class WSDLRefValidatorTest extends Assert {
 
+    private Definition getWSDL(String wsdl) throws Exception {
+        Bus b = BusFactory.getDefaultBus();
+        WSDLDefinitionBuilder wsdlBuilder = new WSDLDefinitionBuilder(b);
+        return wsdlBuilder.build(wsdl);
+    }
+    
     @Test
     public void testNoService() throws Exception {
         String wsdl = getClass().getResource("resources/b.wsdl").toURI().toString();
-        WSDLRefValidator validator = new WSDLRefValidator(wsdl);
+        WSDLRefValidator validator = new WSDLRefValidator(getWSDL(wsdl), null);
         assertFalse(validator.isValid());
         ValidationResult results = validator.getValidationResults();
         assertEquals(0, results.getWarnings().size());
@@ -42,7 +51,7 @@
     @Test
     public void testWSDLImport1() throws Exception {
         String wsdl = getClass().getResource("resources/a.wsdl").toURI().toString();
-        WSDLRefValidator validator = new WSDLRefValidator(wsdl);
+        WSDLRefValidator validator = new WSDLRefValidator(getWSDL(wsdl), null);
         validator.isValid();
         ValidationResult results = validator.getValidationResults();
         assertEquals(2, results.getErrors().size());
@@ -61,7 +70,7 @@
     @Test
     public void testWSDLImport2() throws Exception {
         String wsdl = getClass().getResource("resources/physicalpt.wsdl").toURI().toString();
-        WSDLRefValidator validator = new WSDLRefValidator(wsdl);
+        WSDLRefValidator validator = new WSDLRefValidator(getWSDL(wsdl), null);
         assertTrue(validator.isValid());
         String expected = "/wsdl:definitions[@targetNamespace='http://schemas.apache.org/yoko/idl/OptionsPT']"
             + "/wsdl:portType[@name='foo.bar']";
@@ -77,7 +86,7 @@
     @Test
     public void testNoTypeRef() throws Exception {
         String wsdl = getClass().getResource("resources/NoTypeRef.wsdl").toURI().toString();
-        WSDLRefValidator validator = new WSDLRefValidator(wsdl);
+        WSDLRefValidator validator = new WSDLRefValidator(getWSDL(wsdl), null);
         assertFalse(validator.isValid());
         assertEquals(3, validator.getValidationResults().getErrors().size());
 
@@ -98,13 +107,13 @@
     @Test
     public void testNoBindingWSDL() throws Exception {
         String wsdl = getClass().getResource("resources/nobinding.wsdl").toURI().toString();
-        WSDLRefValidator validator = new WSDLRefValidator(wsdl);
+        WSDLRefValidator validator = new WSDLRefValidator(getWSDL(wsdl), null);
         validator.isValid();
         ValidationResult results = validator.getValidationResults();
 
         assertEquals(0, results.getWarnings().size());
 
-        WSDLRefValidator v = new WSDLRefValidator(wsdl);
+        WSDLRefValidator v = new WSDLRefValidator(getWSDL(wsdl), null);
         v.setSuppressWarnings(true);
         assertTrue(v.isValid());
     }
@@ -112,7 +121,7 @@
     @Test
     public void testLogicalWSDL() throws Exception {
         String wsdl = getClass().getResource("resources/logical.wsdl").toURI().toString();
-        WSDLRefValidator validator = new WSDLRefValidator(wsdl);
+        WSDLRefValidator validator = new WSDLRefValidator(getWSDL(wsdl), null);
         validator.isValid();
         ValidationResult results = validator.getValidationResults();
         
@@ -129,15 +138,14 @@
 
     @Test
     public void testNotAWsdl() throws Exception {
-        String wsdl = getClass().getResource("resources/c.xsd").toURI().toString();
         try {        
-            WSDLRefValidator validator = new WSDLRefValidator(wsdl);
+            String wsdl = getClass().getResource("resources/c.xsd").toURI().toString();
+            WSDLRefValidator validator = new WSDLRefValidator(getWSDL(wsdl), null);
             validator.isValid();
         } catch (Exception e) {
-            assertTrue(e instanceof ToolException);
             String expected = "WSDLException (at /xs:schema): faultCode=INVALID_WSDL: "
                 + "Expected element '{http://schemas.xmlsoap.org/wsdl/}definitions'.";
-            assertEquals(expected, e.getMessage());
+            assertTrue(e.getMessage().contains(expected));
         }
     }
 
@@ -145,7 +153,7 @@
     public void testXSDAnyType() throws Exception {
         String wsdl = getClass().getResource("resources/anytype.wsdl").toURI().toString();
         try {
-            WSDLRefValidator validator = new WSDLRefValidator(wsdl);
+            WSDLRefValidator validator = new WSDLRefValidator(getWSDL(wsdl), null);
             assertTrue(validator.isValid());
         } catch (Exception e) {
             fail("Valid wsdl, no exception should be thrown" + e.getMessage());

Modified: cxf/trunk/tools/wsdlto/core/src/main/java/org/apache/cxf/tools/wsdlto/WSDLToJavaContainer.java
URL: http://svn.apache.org/viewvc/cxf/trunk/tools/wsdlto/core/src/main/java/org/apache/cxf/tools/wsdlto/WSDLToJavaContainer.java?rev=686283&r1=686282&r2=686283&view=diff
==============================================================================
--- cxf/trunk/tools/wsdlto/core/src/main/java/org/apache/cxf/tools/wsdlto/WSDLToJavaContainer.java (original)
+++ cxf/trunk/tools/wsdlto/core/src/main/java/org/apache/cxf/tools/wsdlto/WSDLToJavaContainer.java Fri Aug 15 10:09:54 2008
@@ -123,7 +123,8 @@
                     builder.setContext(context);
                     builder.setBus(getBus());
                     context.put(Bus.class, getBus());
-                    builder.build(URIParserUtil.getAbsoluteURI(wsdlURL));
+                    wsdlURL = URIParserUtil.getAbsoluteURI(wsdlURL);
+                    builder.build(wsdlURL);
                     builder.customize();
                     Definition definition = builder.getWSDLModel();
 
@@ -132,7 +133,6 @@
                     builder.validate(definition);
 
                     WSDLServiceBuilder serviceBuilder = new WSDLServiceBuilder(getBus());
-                    serviceBuilder.setCatalogResolvedMap(builder.getCataLogResolvedMap());
                     String serviceName = (String)context.get(ToolConstants.CFG_SERVICENAME);
 
                     if (serviceName != null) {

Modified: cxf/trunk/tools/wsdlto/core/src/main/java/org/apache/cxf/tools/wsdlto/core/AbstractWSDLBuilder.java
URL: http://svn.apache.org/viewvc/cxf/trunk/tools/wsdlto/core/src/main/java/org/apache/cxf/tools/wsdlto/core/AbstractWSDLBuilder.java?rev=686283&r1=686282&r2=686283&view=diff
==============================================================================
--- cxf/trunk/tools/wsdlto/core/src/main/java/org/apache/cxf/tools/wsdlto/core/AbstractWSDLBuilder.java (original)
+++ cxf/trunk/tools/wsdlto/core/src/main/java/org/apache/cxf/tools/wsdlto/core/AbstractWSDLBuilder.java Fri Aug 15 10:09:54 2008
@@ -19,8 +19,6 @@
 
 package org.apache.cxf.tools.wsdlto.core;
 
-import java.util.Map;
-
 import org.apache.cxf.Bus;
 import org.apache.cxf.tools.common.ToolContext;
 import org.apache.cxf.tools.common.ToolException;
@@ -44,5 +42,4 @@
 
     public abstract T getWSDLModel();
     
-    public abstract Map<String, String> getCataLogResolvedMap();
 }

Modified: cxf/trunk/tools/wsdlto/databinding/jaxb/src/main/java/org/apache/cxf/tools/wsdlto/databinding/jaxb/JAXBDataBinding.java
URL: http://svn.apache.org/viewvc/cxf/trunk/tools/wsdlto/databinding/jaxb/src/main/java/org/apache/cxf/tools/wsdlto/databinding/jaxb/JAXBDataBinding.java?rev=686283&r1=686282&r2=686283&view=diff
==============================================================================
--- cxf/trunk/tools/wsdlto/databinding/jaxb/src/main/java/org/apache/cxf/tools/wsdlto/databinding/jaxb/JAXBDataBinding.java (original)
+++ cxf/trunk/tools/wsdlto/databinding/jaxb/src/main/java/org/apache/cxf/tools/wsdlto/databinding/jaxb/JAXBDataBinding.java Fri Aug 15 10:09:54 2008
@@ -145,7 +145,7 @@
 
         for (String key : schemaLists.keySet()) {
             Element ele = schemaLists.get(key);
-            this.removeImportElement(ele);
+            ele = removeImportElement(ele);
             String tns = ele.getAttribute("targetNamespace");
             if (StringUtils.isEmpty(tns)) {
                 continue;
@@ -378,11 +378,15 @@
         return null;
     }
 
-    private void removeImportElement(Element element) {
+    private Element removeImportElement(Element element) {
         NodeList nodeList = element.getElementsByTagNameNS(ToolConstants.SCHEMA_URI, "import");
+        if (nodeList.getLength() == 0) {
+            return element;
+        }
+        element = (Element)cloneNode(element.getOwnerDocument(), element, true);
+        nodeList = element.getElementsByTagNameNS(ToolConstants.SCHEMA_URI, "import");
         List<Node> ns = new ArrayList<Node>();
         for (int tmp = 0; tmp < nodeList.getLength(); tmp++) {
-
             Node importNode = nodeList.item(tmp);
             ns.add(importNode);
         }
@@ -390,7 +394,7 @@
             Node schemaNode = item.getParentNode();
             schemaNode.removeChild(item);
         }
-
+        return element;
     }
 
     public Node cloneNode(Document document, Node node, boolean deep) throws DOMException {

Modified: cxf/trunk/tools/wsdlto/frontend/javascript/src/main/java/org/apache/cxf/tools/wsdlto/javascript/JavaScriptContainer.java
URL: http://svn.apache.org/viewvc/cxf/trunk/tools/wsdlto/frontend/javascript/src/main/java/org/apache/cxf/tools/wsdlto/javascript/JavaScriptContainer.java?rev=686283&r1=686282&r2=686283&view=diff
==============================================================================
--- cxf/trunk/tools/wsdlto/frontend/javascript/src/main/java/org/apache/cxf/tools/wsdlto/javascript/JavaScriptContainer.java (original)
+++ cxf/trunk/tools/wsdlto/frontend/javascript/src/main/java/org/apache/cxf/tools/wsdlto/javascript/JavaScriptContainer.java Fri Aug 15 10:09:54 2008
@@ -111,7 +111,6 @@
                 builder.validate(definition);
 
                 WSDLServiceBuilder serviceBuilder = new WSDLServiceBuilder(getBus());
-                serviceBuilder.setCatalogResolvedMap(builder.getCataLogResolvedMap());
                 String serviceName = (String)context.get(ToolConstants.CFG_SERVICENAME);
 
                 if (serviceName != null) {

Modified: cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/wsdl11/JAXWSDefinitionBuilder.java
URL: http://svn.apache.org/viewvc/cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/wsdl11/JAXWSDefinitionBuilder.java?rev=686283&r1=686282&r2=686283&view=diff
==============================================================================
--- cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/wsdl11/JAXWSDefinitionBuilder.java (original)
+++ cxf/trunk/tools/wsdlto/frontend/jaxws/src/main/java/org/apache/cxf/tools/wsdlto/frontend/jaxws/wsdl11/JAXWSDefinitionBuilder.java Fri Aug 15 10:09:54 2008
@@ -20,7 +20,6 @@
 package org.apache.cxf.tools.wsdlto.frontend.jaxws.wsdl11;
 
 
-import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
@@ -68,7 +67,6 @@
 
     private List<InputSource> jaxbBindings;
     private Element handlerChain;
-    private Map<String, String> cataLogResolvedMap = new HashMap<String, String>();
 
     public JAXWSDefinitionBuilder() {
     }
@@ -107,11 +105,11 @@
     }
 
     public void customize() {
-        WSDLManager mgr = bus.getExtension(WSDLManager.class);
         if (!context.containsKey(ToolConstants.CFG_BINDING)) {
-            mgr.removeDefinition(wsdlDefinition);
             return;
         }
+        WSDLManager mgr = bus.getExtension(WSDLManager.class);
+        mgr.removeDefinition(wsdlDefinition);
         cusParser = new CustomizationParser();
         cusParser.parse(context);
 
@@ -132,8 +130,6 @@
                                      (String)context.get(ToolConstants.CFG_WSDLURL));
             throw new RuntimeException(msg.toString(), e);
         }
-        
-        mgr.removeDefinition(wsdlDefinition); 
 
     }
 
@@ -187,10 +183,7 @@
         reader.setFeature("javax.wsdl.verbose", false);
         reader.setExtensionRegistry(mgr.getExtensionRegistry());       
 
-        Definition def = reader.readWSDL(wsdlLocator);
-        cataLogResolvedMap.putAll(wsdlLocator.getResolvedMap());
-        return def;
-
+        return reader.readWSDL(wsdlLocator);
     }
 
     public Definition getWSDLModel() {
@@ -208,7 +201,4 @@
         return new WSDL11Validator(def, context, bus).isValid();
     }
     
-    public Map<String, String> getCataLogResolvedMap() {
-        return this.cataLogResolvedMap;
-    }
 }