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);
}
}