[jboss-svn-commits] JBossWS SVN: r687 - in branches/jbossws-1.0/src: main/java/org/jboss/ws/jaxb main/java/org/jboss/ws/metadata/wsdl main/java/org/jboss/ws/metadata/wsdl/xmlschema main/java/org/jboss/ws/tools test/java/org/jboss/test/ws/tools/xmlschema

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Fri Aug 4 08:23:18 EDT 2006


Author: thomas.diesler at jboss.com
Date: 2006-08-04 08:23:11 -0400 (Fri, 04 Aug 2006)
New Revision: 687

Modified:
   branches/jbossws-1.0/src/main/java/org/jboss/ws/jaxb/JBossXBSupport.java
   branches/jbossws-1.0/src/main/java/org/jboss/ws/jaxb/SchemaBindingBuilder.java
   branches/jbossws-1.0/src/main/java/org/jboss/ws/metadata/wsdl/WSDL11DefinitionFactory.java
   branches/jbossws-1.0/src/main/java/org/jboss/ws/metadata/wsdl/WSDLDefinitionsFactory.java
   branches/jbossws-1.0/src/main/java/org/jboss/ws/metadata/wsdl/xmlschema/JBossXSEntityResolver.java
   branches/jbossws-1.0/src/main/java/org/jboss/ws/metadata/wsdl/xmlschema/JBossXSStringList.java
   branches/jbossws-1.0/src/main/java/org/jboss/ws/tools/JavaToXSD.java
   branches/jbossws-1.0/src/test/java/org/jboss/test/ws/tools/xmlschema/XercesSchemaParserTestCase.java
Log:
fix schema parsing when offline

Modified: branches/jbossws-1.0/src/main/java/org/jboss/ws/jaxb/JBossXBSupport.java
===================================================================
--- branches/jbossws-1.0/src/main/java/org/jboss/ws/jaxb/JBossXBSupport.java	2006-08-04 11:52:12 UTC (rev 686)
+++ branches/jbossws-1.0/src/main/java/org/jboss/ws/jaxb/JBossXBSupport.java	2006-08-04 12:23:11 UTC (rev 687)
@@ -1,26 +1,25 @@
 package org.jboss.ws.jaxb;
 
-import org.jboss.xb.binding.sunday.unmarshalling.SchemaBinding;
-import org.jboss.xb.binding.ObjectLocalMarshaller;
-import org.jboss.xb.binding.MarshallingContext;
-import org.jboss.xb.util.Dom2Sax;
-import org.jboss.ws.soap.SOAPMessageContextImpl;
-import org.jboss.ws.soap.MessageContextAssociation;
-import org.jboss.ws.metadata.OperationMetaData;
+import java.util.Map;
+
+import javax.xml.namespace.QName;
+
+import org.jboss.util.xml.JBossEntityResolver;
 import org.jboss.ws.metadata.EndpointMetaData;
+import org.jboss.ws.metadata.OperationMetaData;
 import org.jboss.ws.metadata.ServiceMetaData;
 import org.jboss.ws.metadata.jaxrpcmapping.JavaWsdlMapping;
 import org.jboss.ws.metadata.wsdl.xmlschema.JBossXSModel;
-import org.jboss.ws.WSException;
-import org.jboss.util.xml.JBossEntityResolver;
+import org.jboss.ws.soap.MessageContextAssociation;
+import org.jboss.ws.soap.SOAPMessageContextImpl;
+import org.jboss.xb.binding.MarshallingContext;
+import org.jboss.xb.binding.ObjectLocalMarshaller;
+import org.jboss.xb.binding.sunday.unmarshalling.SchemaBinding;
+import org.jboss.xb.util.Dom2Sax;
 import org.w3c.dom.Element;
 import org.xml.sax.ContentHandler;
 import org.xml.sax.SAXException;
-import org.xml.sax.EntityResolver;
 
-import javax.xml.namespace.QName;
-import java.util.Map;
-
 /**
  * @author Heiko Braun <heiko.braun at jboss.com>
  * @since May 31, 2006
@@ -105,13 +104,4 @@
          }
       };
    }
-
-   /**
-    * Create an entity resolver that has local entites registered.
-    */
-   public static JBossEntityResolver createEntityResolver() {
-      JBossEntityResolver resolver = new JBossEntityResolver();
-      resolver.registerLocalEntity("http://www.w3.org/2005/08/addressing", "schema/ws-addr.xsd");      
-      return resolver;
-   }
 }

Modified: branches/jbossws-1.0/src/main/java/org/jboss/ws/jaxb/SchemaBindingBuilder.java
===================================================================
--- branches/jbossws-1.0/src/main/java/org/jboss/ws/jaxb/SchemaBindingBuilder.java	2006-08-04 11:52:12 UTC (rev 686)
+++ branches/jbossws-1.0/src/main/java/org/jboss/ws/jaxb/SchemaBindingBuilder.java	2006-08-04 12:23:11 UTC (rev 687)
@@ -34,20 +34,33 @@
 
 import org.apache.xerces.xs.XSModel;
 import org.jboss.logging.Logger;
+import org.jboss.util.xml.JBossEntityResolver;
+import org.jboss.ws.Constants;
+import org.jboss.ws.WSException;
 import org.jboss.ws.metadata.jaxrpcmapping.ExceptionMapping;
 import org.jboss.ws.metadata.jaxrpcmapping.JavaWsdlMapping;
 import org.jboss.ws.metadata.jaxrpcmapping.JavaXmlTypeMapping;
 import org.jboss.ws.metadata.jaxrpcmapping.PackageMapping;
 import org.jboss.ws.metadata.jaxrpcmapping.VariableMapping;
-import org.jboss.ws.Constants;
-import org.jboss.ws.WSException;
+import org.jboss.ws.utils.JBossWSEntityResolver;
 import org.jboss.xb.binding.metadata.ClassMetaData;
 import org.jboss.xb.binding.metadata.PackageMetaData;
 import org.jboss.xb.binding.metadata.PropertyMetaData;
 import org.jboss.xb.binding.metadata.ValueMetaData;
-import org.jboss.xb.binding.sunday.unmarshalling.*;
+import org.jboss.xb.binding.sunday.unmarshalling.AttributeBinding;
+import org.jboss.xb.binding.sunday.unmarshalling.CharactersHandler;
+import org.jboss.xb.binding.sunday.unmarshalling.DefaultSchemaResolver;
+import org.jboss.xb.binding.sunday.unmarshalling.ElementBinding;
+import org.jboss.xb.binding.sunday.unmarshalling.ModelGroupBinding;
+import org.jboss.xb.binding.sunday.unmarshalling.ParticleBinding;
+import org.jboss.xb.binding.sunday.unmarshalling.ParticleHandler;
+import org.jboss.xb.binding.sunday.unmarshalling.SchemaBinding;
+import org.jboss.xb.binding.sunday.unmarshalling.SimpleTypeBinding;
+import org.jboss.xb.binding.sunday.unmarshalling.TermBinding;
+import org.jboss.xb.binding.sunday.unmarshalling.TypeBinding;
+import org.jboss.xb.binding.sunday.unmarshalling.WildcardBinding;
+import org.jboss.xb.binding.sunday.unmarshalling.XsdBinder;
 import org.jboss.xb.binding.sunday.unmarshalling.impl.runtime.RtElementHandler;
-import org.jboss.util.xml.JBossEntityResolver;
 import org.w3c.dom.Element;
 import org.w3c.dom.Text;
 import org.xml.sax.Attributes;
@@ -72,7 +85,7 @@
     */
    public SchemaBinding buildSchemaBinding(XSModel model, JavaWsdlMapping wsdlMapping)
    {
-      JBossEntityResolver resolver = JBossXBSupport.createEntityResolver();
+      JBossEntityResolver resolver = new JBossWSEntityResolver();
       SchemaBinding schemaBinding = XsdBinder.bind(model, new DefaultSchemaResolver(resolver));
 
       schemaBinding.setIgnoreLowLine(false);

Modified: branches/jbossws-1.0/src/main/java/org/jboss/ws/metadata/wsdl/WSDL11DefinitionFactory.java
===================================================================
--- branches/jbossws-1.0/src/main/java/org/jboss/ws/metadata/wsdl/WSDL11DefinitionFactory.java	2006-08-04 11:52:12 UTC (rev 686)
+++ branches/jbossws-1.0/src/main/java/org/jboss/ws/metadata/wsdl/WSDL11DefinitionFactory.java	2006-08-04 12:23:11 UTC (rev 687)
@@ -21,11 +21,15 @@
 */
 package org.jboss.ws.metadata.wsdl;
 
-// $Id: WSDL11DefinitionFactory.java 275 2006-05-04 21:36:29Z jason.greene at jboss.com $
+// $Id: WSDL11DefinitionFactory.java 680 2006-08-03 21:04:42Z thomas.diesler at jboss.com $
 
 import org.jboss.logging.Logger;
+import org.jboss.ws.utils.JBossWSEntityResolver;
+import org.xml.sax.EntityResolver;
 import org.xml.sax.InputSource;
 
+import com.ibm.wsdl.xml.WSDLReaderImpl;
+
 import javax.wsdl.Definition;
 import javax.wsdl.WSDLException;
 import javax.wsdl.factory.WSDLFactory;
@@ -83,116 +87,14 @@
       if (wsdlLocation == null)
          throw new IllegalArgumentException("URL cannot be null");
 
-      Definition wsdlDefinition = wsdlReader.readWSDL(new WSDLLocatorImpl(wsdlLocation));
+      log.debug("parse: " + wsdlLocation.toExternalForm());
+      
+      EntityResolver entityResolver = new JBossWSEntityResolver();
+      
+      // Set EntityResolver in patched version of wsdl4j-1.5.2jboss
+      ((WSDLReaderImpl)wsdlReader).setEntityResolver(entityResolver);
+      
+      Definition wsdlDefinition = wsdlReader.readWSDL(new WSDLLocatorImpl(entityResolver, wsdlLocation));
       return wsdlDefinition;
    }
-
-   /* A WSDLLocator that can handle wsdl imports
-   */
-   public static class WSDLLocatorImpl implements WSDLLocator
-   {
-      private URL wsdlURL;
-      private String latestImportURI;
-
-      public WSDLLocatorImpl(URL wsdlFile)
-      {
-         if (wsdlFile == null)
-            throw new IllegalArgumentException("WSDL file argument cannot be null");
-
-         this.wsdlURL = wsdlFile;
-      }
-
-      public InputSource getBaseInputSource()
-      {
-         log.debug("getBaseInputSource [wsdlUrl=" + wsdlURL + "]");
-         try
-         {
-            InputStream is = wsdlURL.openStream();
-            if (is == null)
-               throw new IllegalArgumentException("Cannot obtain wsdl from [" + wsdlURL + "]");
-
-            return new InputSource(is);
-         }
-         catch (IOException e)
-         {
-            throw new RuntimeException("Cannot access wsdl from [" + wsdlURL + "], " + e.getMessage());
-         }
-      }
-
-      public String getBaseURI()
-      {
-         return wsdlURL.toExternalForm();
-      }
-
-      public InputSource getImportInputSource(String parent, String resource)
-      {
-         log.debug("getImportInputSource [parent=" + parent + ",resource=" + resource + "]");
-
-         URL parentURL = null;
-         try
-         {
-            parentURL = new URL(parent);
-         }
-         catch (MalformedURLException e)
-         {
-            log.error("Not a valid URL: " + parent);
-            return null;
-         }
-
-         String wsdlImport = null;
-         String external = parentURL.toExternalForm();
-
-         // An external URL
-         if (resource.startsWith("http://") || resource.startsWith("https://"))
-         {
-            wsdlImport = resource;
-         }
-
-         // Absolute path
-         else if (resource.startsWith("/"))
-         {
-            String beforePath = external.substring(0, external.indexOf(parentURL.getPath()));
-            wsdlImport = beforePath + resource;
-         }
-
-         // A relative path
-         else
-         {
-            String parentDir = external.substring(0, external.lastIndexOf("/"));
-
-            // remove references to current dir
-            while (resource.startsWith("./"))
-               resource = resource.substring(2);
-
-            // remove references to parentdir
-            while (resource.startsWith("../"))
-            {
-               parentDir = parentDir.substring(0, parentDir.lastIndexOf("/"));
-               resource = resource.substring(3);
-            }
-
-            wsdlImport = parentDir + "/" + resource;
-         }
-
-         try
-         {
-            log.debug("Resolved to: " + wsdlImport);
-            InputStream is = new URL(wsdlImport).openStream();
-            if (is == null)
-               throw new IllegalArgumentException("Cannot import wsdl from [" + wsdlImport + "]");
-
-            latestImportURI = wsdlImport;
-            return new InputSource(is);
-         }
-         catch (IOException e)
-         {
-            throw new RuntimeException("Cannot access imported wsdl [" + wsdlImport + "], " + e.getMessage());
-         }
-      }
-
-      public String getLatestImportURI()
-      {
-         return latestImportURI;
-      }
-   }
 }

Modified: branches/jbossws-1.0/src/main/java/org/jboss/ws/metadata/wsdl/WSDLDefinitionsFactory.java
===================================================================
--- branches/jbossws-1.0/src/main/java/org/jboss/ws/metadata/wsdl/WSDLDefinitionsFactory.java	2006-08-04 11:52:12 UTC (rev 686)
+++ branches/jbossws-1.0/src/main/java/org/jboss/ws/metadata/wsdl/WSDLDefinitionsFactory.java	2006-08-04 12:23:11 UTC (rev 687)
@@ -23,10 +23,8 @@
 
 // $Id$
 
-import java.io.IOException;
 import java.io.InputStream;
 import java.io.StringWriter;
-import java.net.MalformedURLException;
 import java.net.URL;
 import java.util.HashMap;
 import java.util.Iterator;
@@ -34,20 +32,16 @@
 
 import javax.wsdl.Definition;
 import javax.wsdl.factory.WSDLFactory;
-import javax.wsdl.xml.WSDLLocator;
 import javax.wsdl.xml.WSDLReader;
 import javax.xml.parsers.DocumentBuilder;
 
 import org.jboss.logging.Logger;
 import org.jboss.util.xml.DOMUtils;
-import org.jboss.util.xml.JBossEntityResolver;
 import org.jboss.ws.Constants;
-import org.jboss.ws.WSException;
-import org.jboss.ws.jaxb.JBossXBSupport;
+import org.jboss.ws.utils.JBossWSEntityResolver;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 import org.xml.sax.EntityResolver;
-import org.xml.sax.InputSource;
 
 import com.ibm.wsdl.xml.WSDLReaderImpl;
 
@@ -103,9 +97,9 @@
       if (wsdlLocation == null)
          throw new IllegalArgumentException("URL cannot be null");
 
-      EntityResolver entityResolver = JBossXBSupport.createEntityResolver();
-      
       log.debug("parse: " + wsdlLocation.toExternalForm());
+      
+      EntityResolver entityResolver = new JBossWSEntityResolver();
       WSDLDefinitions wsdlDefinitions = null;
       try
       {
@@ -213,124 +207,4 @@
       String defaultNamespace = root.getNamespaceURI();
       return defaultNamespace;
    }
-
-   /* A WSDLLocator that can handle wsdl imports
-   */
-   public static class WSDLLocatorImpl implements WSDLLocator
-   {
-      private EntityResolver entityResolver;
-      private URL wsdlURL;
-      private String latestImportURI;
-
-      public WSDLLocatorImpl(EntityResolver entityResolver, URL wsdlFile)
-      {
-         if (wsdlFile == null)
-            throw new IllegalArgumentException("WSDL file argument cannot be null");
-
-         this.entityResolver = entityResolver;
-         this.wsdlURL = wsdlFile;
-      }
-
-      public InputSource getBaseInputSource()
-      {
-         log.trace("getBaseInputSource [wsdlUrl=" + wsdlURL + "]");
-         try
-         {
-            InputStream is = wsdlURL.openStream();
-            if (is == null)
-               throw new IllegalArgumentException("Cannot obtain wsdl from [" + wsdlURL + "]");
-
-            return new InputSource(is);
-         }
-         catch (IOException e)
-         {
-            throw new RuntimeException("Cannot access wsdl from [" + wsdlURL + "], " + e.getMessage());
-         }
-      }
-
-      public String getBaseURI()
-      {
-         return wsdlURL.toExternalForm();
-      }
-
-      public InputSource getImportInputSource(String parent, String resource)
-      {
-         log.trace("getImportInputSource [parent=" + parent + ",resource=" + resource + "]");
-
-         URL parentURL = null;
-         try
-         {
-            parentURL = new URL(parent);
-         }
-         catch (MalformedURLException e)
-         {
-            log.error("Not a valid URL: " + parent);
-            return null;
-         }
-
-         String wsdlImport = null;
-         String external = parentURL.toExternalForm();
-
-         // An external URL
-         if (resource.startsWith("http://") || resource.startsWith("https://"))
-         {
-            wsdlImport = resource;
-         }
-
-         // Absolute path
-         else if (resource.startsWith("/"))
-         {
-            String beforePath = external.substring(0, external.indexOf(parentURL.getPath()));
-            wsdlImport = beforePath + resource;
-         }
-
-         // A relative path
-         else
-         {
-            String parentDir = external.substring(0, external.lastIndexOf("/"));
-
-            // remove references to current dir
-            while (resource.startsWith("./"))
-               resource = resource.substring(2);
-
-            // remove references to parentdir
-            while (resource.startsWith("../"))
-            {
-               parentDir = parentDir.substring(0, parentDir.lastIndexOf("/"));
-               resource = resource.substring(3);
-            }
-
-            wsdlImport = parentDir + "/" + resource;
-         }
-
-         try
-         {
-            log.trace("Trying to resolve: " + wsdlImport);
-            InputSource inputSource = entityResolver.resolveEntity(wsdlImport, wsdlImport);
-            if (inputSource != null)
-            {
-               latestImportURI = wsdlImport;
-            }
-            else
-            {
-               throw new IllegalArgumentException("Cannot resolve imported resource: " + wsdlImport);
-            }
-            
-            return inputSource;
-         }
-         catch (RuntimeException rte)
-         {
-            throw rte;
-         }
-         catch (Exception e)
-         {
-            throw new WSException("Cannot access imported wsdl [" + wsdlImport + "], " + e.getMessage());
-         }
-      }
-
-      public String getLatestImportURI()
-      {
-         return latestImportURI;
-      }
-   }
 }

Modified: branches/jbossws-1.0/src/main/java/org/jboss/ws/metadata/wsdl/xmlschema/JBossXSEntityResolver.java
===================================================================
--- branches/jbossws-1.0/src/main/java/org/jboss/ws/metadata/wsdl/xmlschema/JBossXSEntityResolver.java	2006-08-04 11:52:12 UTC (rev 686)
+++ branches/jbossws-1.0/src/main/java/org/jboss/ws/metadata/wsdl/xmlschema/JBossXSEntityResolver.java	2006-08-04 12:23:11 UTC (rev 687)
@@ -34,8 +34,8 @@
 import org.apache.xerces.xni.parser.XMLEntityResolver;
 import org.apache.xerces.xni.parser.XMLInputSource;
 import org.jboss.logging.Logger;
-import org.jboss.util.xml.JBossEntityResolver;
 import org.jboss.ws.Constants;
+import org.xml.sax.EntityResolver;
 import org.xml.sax.InputSource;
 import org.xml.sax.SAXException;
 
@@ -52,11 +52,12 @@
 
    private Map<String, URL> schemaLocationByNamespace = new HashMap<String, URL>();
 
-   private JBossEntityResolver resolver = new JBossEntityResolver();
+   private EntityResolver delegate;
 
-   public JBossXSEntityResolver(Map<String, URL> schemaLocationByNamespace)
+   public JBossXSEntityResolver(EntityResolver resolver, Map<String, URL> schemaLocationByNamespace)
    {
       this.schemaLocationByNamespace = schemaLocationByNamespace;
+      this.delegate = resolver;
    }
 
    /**
@@ -79,7 +80,7 @@
       try
       {
          String publicURI = (publicId != null ? publicId : namespace);
-         InputSource inputSource = resolver.resolveEntity(publicURI, systemId);
+         InputSource inputSource = delegate.resolveEntity(publicURI, systemId);
          if (inputSource != null)
          {
             XMLInputSource source = getXMLInputSource(inputSource, resId);
@@ -136,7 +137,7 @@
 
          // Delegate to JBoss Entity Resolver
          XMLInputSource source = getXMLInputSource(
-               resolver.resolveEntity(null, namespaceURI), resId);
+               delegate.resolveEntity(null, namespaceURI), resId);
          if (source != null)
             return source;
       }

Modified: branches/jbossws-1.0/src/main/java/org/jboss/ws/metadata/wsdl/xmlschema/JBossXSStringList.java
===================================================================
--- branches/jbossws-1.0/src/main/java/org/jboss/ws/metadata/wsdl/xmlschema/JBossXSStringList.java	2006-08-04 11:52:12 UTC (rev 686)
+++ branches/jbossws-1.0/src/main/java/org/jboss/ws/metadata/wsdl/xmlschema/JBossXSStringList.java	2006-08-04 12:23:11 UTC (rev 687)
@@ -91,7 +91,7 @@
       return strList;
    }
 
-   void addItem(String str)
+   public void addItem(String str)
    {
       strList.add(str);
    }

Modified: branches/jbossws-1.0/src/main/java/org/jboss/ws/tools/JavaToXSD.java
===================================================================
--- branches/jbossws-1.0/src/main/java/org/jboss/ws/tools/JavaToXSD.java	2006-08-04 11:52:12 UTC (rev 686)
+++ branches/jbossws-1.0/src/main/java/org/jboss/ws/tools/JavaToXSD.java	2006-08-04 12:23:11 UTC (rev 687)
@@ -25,9 +25,8 @@
 
 import java.io.IOException;
 import java.net.URL;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
+import java.util.HashMap;
+import java.util.Iterator;
 import java.util.Map;
 
 import javax.xml.namespace.QName;
@@ -46,6 +45,7 @@
 import org.jboss.ws.tools.helpers.JavaToXSDHelper;
 import org.jboss.ws.tools.interfaces.JavaToXSDIntf;
 import org.jboss.ws.tools.interfaces.SchemaCreatorIntf;
+import org.jboss.ws.utils.JBossWSEntityResolver;
 import org.jboss.xb.binding.sunday.unmarshalling.LSInputAdaptor;
 import org.jboss.xb.binding.sunday.unmarshalling.SchemaBinding;
 import org.jboss.xb.binding.sunday.unmarshalling.SchemaBindingResolver;
@@ -126,12 +126,14 @@
    public JBossXSModel parseSchema(URL xsdURL)
    {
       JBossXSErrorHandler xserr = new JBossXSErrorHandler();
-      XMLSchemaLoader loader = (XMLSchemaLoader)schemautils.getXSLoader(xserr, null);
+      JBossWSEntityResolver resolver = new JBossWSEntityResolver();
+      JBossXSEntityResolver xsresolve = new JBossXSEntityResolver(resolver, new HashMap<String, URL>());
+      XMLSchemaLoader loader = (XMLSchemaLoader)schemautils.getXSLoader(xserr, xsresolve);
+      
       XSModel xsmodel = loader.loadURI(xsdURL.toExternalForm());
-      //XSModel xsmodel =  schemautils.parseSchema(xsdURL);
-      String typeNamespace = SchemaUtils.getTargetNamespace(xsmodel);
       if (xsmodel == null)
-         throw new WSException("Parsed XSModel is null");
+         throw new WSException("Cannot load schema: " + xsdURL);
+      
       WSSchemaUtils sutils = WSSchemaUtils.getInstance(null, null);
       JBossXSModel jbxs = new JBossXSModel();
       sutils.copyXSModel(xsmodel, jbxs);
@@ -139,66 +141,44 @@
    }
 
    /**
-    * Given a set of schema files, parse them to yield an unified
-    * JBossXSModel
-    * @param locations a List of locations of schema files as String
-    * @return unified JBossXSModel
-    */
-   public JBossXSModel parseSchema(List<String> locations)
-   {
-
-      XSModel xsmodel = schemautils.parseSchema(locations);
-      String typeNamespace = SchemaUtils.getTargetNamespace(xsmodel);
-      if (xsmodel == null)
-         throw new WSException("Parsed XSModel is null");
-      WSSchemaUtils sutils = WSSchemaUtils.getInstance(null, null);
-      JBossXSModel jbxs = new JBossXSModel();
-      sutils.copyXSModel(xsmodel, jbxs);
-      return jbxs;
-   }
-
-   /**
-    * Given a set of schema files, parse them to yield an unified
-    * JBossXSModel
+    * Given a set of schema files, parse them to yield an unified JBossXSModel
     * @param locs a map of schema namespace to schema location
     * @return unified JBossXSModel
     */
    public JBossXSModel parseSchema(Map<String, URL> locs)
    {
-      if (locs == null)
-         throw new IllegalArgumentException("Illegal Null Argument:locs");
-      if (locs.size() == 0)
-         throw new IllegalArgumentException("Illegal size Argument:locs is zero");
-      Collection<URL> col = locs.values();
-      List<String> strlist = new ArrayList<String>();
-      for (URL uri : col)
-      {
-         strlist.add(uri.toExternalForm());
-      }
+      if (locs == null || locs.size() == 0)
+         throw new IllegalArgumentException("Illegal schema location map");
+
       JBossXSErrorHandler xserr = new JBossXSErrorHandler();
-      JBossXSEntityResolver xsresolve = new JBossXSEntityResolver(locs);
+      JBossWSEntityResolver resolver = new JBossWSEntityResolver();
+      JBossXSEntityResolver xsresolve = new JBossXSEntityResolver(resolver, locs);
       XMLSchemaLoader loader = (XMLSchemaLoader)schemautils.getXSLoader(xserr, xsresolve);
-      //XMLSchemaLoader loader = (XMLSchemaLoader)schemautils.getXSLoader();
-      List<String> locations = new ArrayList<String>();
-      Collection<URL> urls = locs.values();
-      for (URL url : urls)
+      
+      JBossXSStringList slist = new JBossXSStringList();
+      Iterator<String> keys = locs.keySet().iterator();
+      while (keys.hasNext())
       {
-         locations.add(url.toExternalForm());
+         String nsURI = keys.next();
+         URL orgURL = locs.get(nsURI); 
+         URL resURL = resolver.resolveNamespaceURI(nsURI);
+         URL url = resURL != null ? resURL : orgURL;
+         log.debug("load schema: " + nsURI + "=" + url);
+         slist.addItem(url.toExternalForm());
       }
-      JBossXSStringList slist = new JBossXSStringList(locations);
+      
       XSModel xsmodel = loader.loadURIList(slist);
       if (xsmodel == null)
          throw new WSException("Cannot load schema: " + slist);
 
       //TODO: Once JBXB-33 is fixed, migrate Schema Parsing to XB
       //XSModel xsmodel = Util.loadSchema(slist,this.getSchemaBindingResolver(locs));
-      String typeNamespace = SchemaUtils.getTargetNamespace(xsmodel);
-      if (xsmodel == null)
-         throw new WSException("Parsed XSModel is null");
       
+      // Convert Xerces XSModel into r/w JBossXSModel 
       WSSchemaUtils sutils = WSSchemaUtils.getInstance(null, null);
       JBossXSModel jbxs = new JBossXSModel();
       sutils.copyXSModel(xsmodel, jbxs);
+      
       return jbxs;
    }
 
@@ -212,8 +192,6 @@
 
    /**
     * Set the WSDL Style
-    *
-    * @param style
     */
    public void setWSDLStyle(String style)
    {
@@ -224,16 +202,8 @@
    //             PRIVATE METHODS
    //******************************************************************
 
-   private Class loadClass(String classname) throws ClassNotFoundException
-   {
-      return Thread.currentThread().getContextClassLoader().loadClass(classname);
-   }
-
    /**
     * FIXME: JBXB-33
-    *
-    * @param map
-    * @return
     */
    private SchemaBindingResolver getSchemaBindingResolver(final Map<String, URL> map)
    {

Modified: branches/jbossws-1.0/src/test/java/org/jboss/test/ws/tools/xmlschema/XercesSchemaParserTestCase.java
===================================================================
--- branches/jbossws-1.0/src/test/java/org/jboss/test/ws/tools/xmlschema/XercesSchemaParserTestCase.java	2006-08-04 11:52:12 UTC (rev 686)
+++ branches/jbossws-1.0/src/test/java/org/jboss/test/ws/tools/xmlschema/XercesSchemaParserTestCase.java	2006-08-04 12:23:11 UTC (rev 687)
@@ -23,7 +23,6 @@
 
 import java.io.File;
 import java.io.FileOutputStream;
-import java.io.FileWriter;
 import java.io.IOException;
 import java.net.URL;
 import java.util.HashMap;
@@ -55,6 +54,7 @@
 import org.jboss.ws.metadata.wsdl.xmlschema.JBossXSParticle;
 import org.jboss.ws.metadata.wsdl.xsd.SchemaUtils;
 import org.jboss.ws.tools.JavaToXSD;
+import org.jboss.ws.utils.JBossWSEntityResolver;
 import org.jboss.xb.binding.sunday.unmarshalling.LSInputAdaptor;
 import org.jboss.xb.binding.sunday.unmarshalling.SchemaBinding;
 import org.jboss.xb.binding.sunday.unmarshalling.SchemaBindingResolver;
@@ -180,7 +180,7 @@
       map.put(typeNS,new File("resources/wsdlfixture/customtype/CustomTypeObj.xsd").toURL());
       map.put(arrTypeNS,new File("resources/wsdlfixture/customtype/CustomTypeArrays.xsd").toURL());
 
-      ((XMLSchemaLoader)xsloader).setEntityResolver(new JBossXSEntityResolver(map));
+      ((XMLSchemaLoader)xsloader).setEntityResolver(new JBossXSEntityResolver(new JBossWSEntityResolver(), map));
       //Construct a StringList
       StringList slist = new StringListImpl(arr, 2);
       System.out.println("FIXME: JBXB-33");




More information about the jboss-svn-commits mailing list