Author: gnodet
Date: Thu Sep 27 07:08:14 2007
New Revision: 580018

URL: http://svn.apache.org/viewvc?rev=580018&view=rev
Log:
SM-1011: WSDLFlattenner / SchemaCollection do not handle nested schemas 
inclusions properly

Added:
    
incubator/servicemix/branches/servicemix-3.1/common/servicemix-common/src/test/resources/includes/
      - copied from r580017, 
incubator/servicemix/trunk/common/servicemix-common/src/test/resources/includes/
    
incubator/servicemix/branches/servicemix-3.1/common/servicemix-common/src/test/resources/includes/nested-a1.xsd
      - copied unchanged from r580017, 
incubator/servicemix/trunk/common/servicemix-common/src/test/resources/includes/nested-a1.xsd
    
incubator/servicemix/branches/servicemix-3.1/common/servicemix-common/src/test/resources/includes/nested-b1.xsd
      - copied unchanged from r580017, 
incubator/servicemix/trunk/common/servicemix-common/src/test/resources/includes/nested-b1.xsd
    
incubator/servicemix/branches/servicemix-3.1/common/servicemix-common/src/test/resources/includes/nested-b2.xsd
      - copied unchanged from r580017, 
incubator/servicemix/trunk/common/servicemix-common/src/test/resources/includes/nested-b2.xsd
    
incubator/servicemix/branches/servicemix-3.1/common/servicemix-common/src/test/resources/includes/nested-b3.xsd
      - copied unchanged from r580017, 
incubator/servicemix/trunk/common/servicemix-common/src/test/resources/includes/nested-b3.xsd
    
incubator/servicemix/branches/servicemix-3.1/common/servicemix-common/src/test/resources/includes/nested-c1.xsd
      - copied unchanged from r580017, 
incubator/servicemix/trunk/common/servicemix-common/src/test/resources/includes/nested-c1.xsd
    
incubator/servicemix/branches/servicemix-3.1/common/servicemix-common/src/test/resources/includes/service.wsdl
      - copied unchanged from r580017, 
incubator/servicemix/trunk/common/servicemix-common/src/test/resources/includes/service.wsdl
Modified:
    
incubator/servicemix/branches/servicemix-3.1/common/servicemix-common/src/main/java/org/apache/servicemix/common/tools/wsdl/SchemaCollection.java
    
incubator/servicemix/branches/servicemix-3.1/common/servicemix-common/src/test/java/org/apache/servicemix/common/tools/wsdl/WSDLFlattenerTest.java

Modified: 
incubator/servicemix/branches/servicemix-3.1/common/servicemix-common/src/main/java/org/apache/servicemix/common/tools/wsdl/SchemaCollection.java
URL: 
http://svn.apache.org/viewvc/incubator/servicemix/branches/servicemix-3.1/common/servicemix-common/src/main/java/org/apache/servicemix/common/tools/wsdl/SchemaCollection.java?rev=580018&r1=580017&r2=580018&view=diff
==============================================================================
--- 
incubator/servicemix/branches/servicemix-3.1/common/servicemix-common/src/main/java/org/apache/servicemix/common/tools/wsdl/SchemaCollection.java
 (original)
+++ 
incubator/servicemix/branches/servicemix-3.1/common/servicemix-common/src/main/java/org/apache/servicemix/common/tools/wsdl/SchemaCollection.java
 Thu Sep 27 07:08:14 2007
@@ -146,7 +146,14 @@
         for (Iterator iter = includes.iterator(); iter.hasNext();) {
             Element ce = (Element) iter.next();
                String location = ce.getAttribute("schemaLocation");
-            schema.getRoot().removeChild(ce);
+            Node parentNode = ce.getParentNode();
+            Element root = schema.getRoot();
+            if (root == parentNode) { 
+                log.debug("Removing child include node: " + ce);
+                schema.getRoot().removeChild(ce);
+            } else {
+                log.warn("Skipping child include node removal: " + ce);
+            }
                if (location != null && !"".equals(location)) {
                    read(location, baseUri);
                }

Modified: 
incubator/servicemix/branches/servicemix-3.1/common/servicemix-common/src/test/java/org/apache/servicemix/common/tools/wsdl/WSDLFlattenerTest.java
URL: 
http://svn.apache.org/viewvc/incubator/servicemix/branches/servicemix-3.1/common/servicemix-common/src/test/java/org/apache/servicemix/common/tools/wsdl/WSDLFlattenerTest.java?rev=580018&r1=580017&r2=580018&view=diff
==============================================================================
--- 
incubator/servicemix/branches/servicemix-3.1/common/servicemix-common/src/test/java/org/apache/servicemix/common/tools/wsdl/WSDLFlattenerTest.java
 (original)
+++ 
incubator/servicemix/branches/servicemix-3.1/common/servicemix-common/src/test/java/org/apache/servicemix/common/tools/wsdl/WSDLFlattenerTest.java
 Thu Sep 27 07:08:14 2007
@@ -29,12 +29,17 @@
 import javax.xml.namespace.QName;
 import javax.xml.parsers.DocumentBuilderFactory;
 
+import org.w3c.dom.Document;
+
 import junit.framework.TestCase;
 
-import org.w3c.dom.Document;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 
 public class WSDLFlattenerTest extends TestCase {
 
+    private static transient Log logger =  
LogFactory.getLog(WSDLFlattenerTest.class);
+
     public void test() throws Exception {
         URL resource = getClass().getClassLoader().getResource("wsn/wsn.wsdl");
         WSDLReader reader = WSDLFactory.newInstance().newWSDLReader();
@@ -49,7 +54,7 @@
         WSDLWriter writer = WSDLFactory.newInstance().newWSDLWriter();
         writer.writeWSDL(flat, baos);
         
-        System.err.println(baos.toString());
+        logger.info(baos.toString());
         
         DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
         factory.setNamespaceAware(true);
@@ -60,13 +65,39 @@
         PortType portType = (PortType) 
newFlat.getPortTypes().values().iterator().next();
         assertNotNull(portType);
     }
+
+    public void testIncludes() throws Exception {
+        URL resource = 
getClass().getClassLoader().getResource("includes/service.wsdl");
+        WSDLReader reader = WSDLFactory.newInstance().newWSDLReader();
+        Definition definition = reader.readWSDL(null, resource.toString());
+        WSDLFlattener flattener = new WSDLFlattener(definition);
+
+        Definition flat = flattener.getDefinition(new 
QName("http://mycompany.com/nested/";, "ServiceInterface"));
+        assertNotNull(flat);
+
+        // Check that the definition is really standalone
+        ByteArrayOutputStream baos = new ByteArrayOutputStream();
+        WSDLWriter writer = WSDLFactory.newInstance().newWSDLWriter();
+        writer.writeWSDL(flat, baos);
+
+        logger.info(baos.toString());
+
+        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
+        factory.setNamespaceAware(true);
+        Document description = factory.newDocumentBuilder().parse(new 
ByteArrayInputStream(baos.toByteArray()));
+        Definition newFlat = 
WSDLFactory.newInstance().newWSDLReader().readWSDL(null, description);
+        assertNotNull(newFlat);
+        assertEquals(1, newFlat.getPortTypes().size());
+        PortType portType = (PortType) 
newFlat.getPortTypes().values().iterator().next();
+        assertNotNull(portType);
+    }
     
     public void testResolve() throws Exception {
         URI base = 
URI.create("jar:file:/C:/java/servicemix/servicemix-assembly/target/incubator-servicemix-3.0-SNAPSHOT/bin/incubator-servicemix-3.0-SNAPSHOT/bin/../lib/optional/servicemix-wsn2005-3.0-SNAPSHOT.jar!/org/apache/servicemix/wsn/wsn.wsdl");
         String loc = "b-2.xsd";
         URI rel = SchemaCollection.resolve(base, loc);
         
assertEquals("jar:file:/C:/java/servicemix/servicemix-assembly/target/incubator-servicemix-3.0-SNAPSHOT/bin/incubator-servicemix-3.0-SNAPSHOT/bin/../lib/optional/servicemix-wsn2005-3.0-SNAPSHOT.jar!/org/apache/servicemix/wsn/b-2.xsd",
 rel.toString());
-        System.out.println(rel);
+        logger.info(rel);
     }
     
 }


Reply via email to