Author: bimargulies
Date: Wed May 27 00:42:56 2009
New Revision: 778936

URL: http://svn.apache.org/viewvc?rev=778936&view=rev
Log:
Enhance to eat WSDL files.

Modified:
    
webservices/commons/branches/modules/XmlSchema/1_4_X_BRANCH/src/main/java/org/apache/ws/commons/schema/tools/ReadSchemaFromURL.java

Modified: 
webservices/commons/branches/modules/XmlSchema/1_4_X_BRANCH/src/main/java/org/apache/ws/commons/schema/tools/ReadSchemaFromURL.java
URL: 
http://svn.apache.org/viewvc/webservices/commons/branches/modules/XmlSchema/1_4_X_BRANCH/src/main/java/org/apache/ws/commons/schema/tools/ReadSchemaFromURL.java?rev=778936&r1=778935&r2=778936&view=diff
==============================================================================
--- 
webservices/commons/branches/modules/XmlSchema/1_4_X_BRANCH/src/main/java/org/apache/ws/commons/schema/tools/ReadSchemaFromURL.java
 (original)
+++ 
webservices/commons/branches/modules/XmlSchema/1_4_X_BRANCH/src/main/java/org/apache/ws/commons/schema/tools/ReadSchemaFromURL.java
 Wed May 27 00:42:56 2009
@@ -20,16 +20,27 @@
 package org.apache.ws.commons.schema.tools;
 
 import java.io.IOException;
+import java.util.ArrayList;
+import java.util.Iterator;
+import java.util.List;
 
+import javax.xml.namespace.NamespaceContext;
 import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.xpath.XPath;
+import javax.xml.xpath.XPathConstants;
+import javax.xml.xpath.XPathExpressionException;
+import javax.xml.xpath.XPathFactory;
 
 import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NodeList;
 
 import org.xml.sax.SAXException;
 
 import org.apache.ws.commons.schema.XmlSchemaCollection;
+import org.custommonkey.xmlunit.XMLConstants;
 
 /**
  * 
@@ -42,18 +53,55 @@
      * @throws ParserConfigurationException 
      * @throws IOException 
      * @throws SAXException 
+     * @throws XPathExpressionException 
      */
-    public static void main(String[] args) throws 
ParserConfigurationException, SAXException, IOException {
-        if (args.length != 1) {
-            System.err.println("Usage: ReadSchemaFromURL URL");
+    public static void main(String[] args) throws 
ParserConfigurationException, SAXException, IOException, 
XPathExpressionException {
+        if (args.length != 1 && args.length != 2) {
+            System.err.println("Usage: ReadSchemaFromURL URL -wsdl");
             return;
         }
+        boolean wsdl = false;
+        if (args.length == 2) {
+            wsdl = true;
+        }
         XmlSchemaCollection collection = new XmlSchemaCollection();
         DocumentBuilderFactory documentBuilderFactory = 
DocumentBuilderFactory.newInstance();
         documentBuilderFactory.setNamespaceAware(true);
         DocumentBuilder documentBuilder = 
documentBuilderFactory.newDocumentBuilder();
         Document document = documentBuilder.parse(args[0]);
-        collection.read(document, args[0], null);
+        Element schema = document.getDocumentElement();
+        if (wsdl) {
+            NodeList schemas;
+            XPath xpath = XPathFactory.newInstance().newXPath();
+            xpath.setNamespaceContext(new NamespaceContext() {
+
+                public String getNamespaceURI(String prefix) {
+                    if ("xsd".equals(prefix)) {
+                        return XMLConstants.W3C_XML_SCHEMA_NS_URI;
+                    }
+                    return null;
+                }
+
+                public String getPrefix(String namespaceURI) {
+                    if 
(XMLConstants.W3C_XML_SCHEMA_NS_URI.equals(namespaceURI)) {
+                        return "xsd";
+                    }
+                    return null;
+                }
+
+                public Iterator getPrefixes(String namespaceURI) {
+                    List prefixes = new ArrayList();
+                    prefixes.add("xsd");
+                    return prefixes.iterator();
+                }});
+            schemas = (NodeList)xpath.evaluate("//xsd:schema", document, 
XPathConstants.NODESET);
+            for (int x = 0; x < schemas.getLength(); x ++) {
+                schema = (Element)schemas.item(x);
+                collection.read(schema, args[0]);
+            }
+        } else {
+            collection.read(document, args[0], null);
+        }
         System.out.println("Success.");
     }
 


Reply via email to