You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@servicemix.apache.org by gn...@apache.org on 2007/03/29 00:39:39 UTC
svn commit: r523487 - in
/incubator/servicemix/trunk/common/servicemix-common/src/main/java/org/apache/servicemix/common/tools/wsdl:
Schema.java SchemaCollection.java
Author: gnodet
Date: Wed Mar 28 15:39:38 2007
New Revision: 523487
URL: http://svn.apache.org/viewvc?view=rev&rev=523487
Log:
SM-900: WSDLFlattener does not handle schemas inclusions
Modified:
incubator/servicemix/trunk/common/servicemix-common/src/main/java/org/apache/servicemix/common/tools/wsdl/Schema.java
incubator/servicemix/trunk/common/servicemix-common/src/main/java/org/apache/servicemix/common/tools/wsdl/SchemaCollection.java
Modified: incubator/servicemix/trunk/common/servicemix-common/src/main/java/org/apache/servicemix/common/tools/wsdl/Schema.java
URL: http://svn.apache.org/viewvc/incubator/servicemix/trunk/common/servicemix-common/src/main/java/org/apache/servicemix/common/tools/wsdl/Schema.java?view=diff&rev=523487&r1=523486&r2=523487
==============================================================================
--- incubator/servicemix/trunk/common/servicemix-common/src/main/java/org/apache/servicemix/common/tools/wsdl/Schema.java (original)
+++ incubator/servicemix/trunk/common/servicemix-common/src/main/java/org/apache/servicemix/common/tools/wsdl/Schema.java Wed Mar 28 15:39:38 2007
@@ -32,7 +32,7 @@
private Element root;
private String namespace;
private List imports;
- private URI sourceUri;
+ private List sourceUris;
/**
* Add a reference to an imported namespace.
@@ -90,15 +90,18 @@
/**
* @return Returns the sourceUri.
*/
- public URI getSourceUri() {
- return sourceUri;
+ public List getSourceUris() {
+ return sourceUris;
}
/**
* @param sourceUri The sourceUri to set.
*/
- public void setSourceUri(URI sourceUri) {
- this.sourceUri = sourceUri;
+ public void addSourceUri(URI sourceUri) {
+ if (sourceUris == null) {
+ sourceUris = new ArrayList();
+ }
+ sourceUris.add(sourceUri);
}
}
Modified: incubator/servicemix/trunk/common/servicemix-common/src/main/java/org/apache/servicemix/common/tools/wsdl/SchemaCollection.java
URL: http://svn.apache.org/viewvc/incubator/servicemix/trunk/common/servicemix-common/src/main/java/org/apache/servicemix/common/tools/wsdl/SchemaCollection.java?view=diff&rev=523487&r1=523486&r2=523487
==============================================================================
--- incubator/servicemix/trunk/common/servicemix-common/src/main/java/org/apache/servicemix/common/tools/wsdl/SchemaCollection.java (original)
+++ incubator/servicemix/trunk/common/servicemix-common/src/main/java/org/apache/servicemix/common/tools/wsdl/SchemaCollection.java Wed Mar 28 15:39:38 2007
@@ -64,12 +64,22 @@
}
public void read(Element elem, URI sourceUri) throws Exception {
- Schema schema = new Schema();
- schema.setSourceUri(sourceUri);
- schema.setRoot(elem);
- schema.setNamespace(elem.getAttribute("targetNamespace"));
- schemas.put(schema.getNamespace(), schema);
- handleImports(schema);
+ String namespace = elem.getAttribute("targetNamespace");
+ Schema schema = (Schema) schemas.get(namespace);
+ if (schema == null) {
+ schema = new Schema();
+ schema.addSourceUri(sourceUri);
+ schema.setRoot(elem);
+ schema.setNamespace(elem.getAttribute("targetNamespace"));
+ schemas.put(schema.getNamespace(), schema);
+ } else if (!schema.getSourceUris().contains(sourceUri)) {
+ NodeList nodes = elem.getChildNodes();
+ for (int i = 0; i < nodes.getLength(); i++) {
+ schema.getRoot().appendChild(schema.getRoot().getOwnerDocument().importNode(nodes.item(i), true));
+ }
+ schema.addSourceUri(sourceUri);
+ }
+ handleImports(schema, sourceUri);
}
public void read(String location, URI baseUri) throws Exception {
@@ -106,9 +116,10 @@
inputSource.getSystemId() != null ? new URI(inputSource.getSystemId()) : null);
}
- protected void handleImports(Schema schema) throws Exception {
+ protected void handleImports(Schema schema, URI baseUri) throws Exception {
NodeList children = schema.getRoot().getChildNodes();
List imports = new ArrayList();
+ List includes = new ArrayList();
for (int i = 0; i < children.getLength(); i++) {
Node child = children.item(i);
if (child instanceof Element) {
@@ -116,20 +127,29 @@
if ("http://www.w3.org/2001/XMLSchema".equals(ce.getNamespaceURI()) &&
"import".equals(ce.getLocalName())) {
imports.add(ce);
+ } else if ("http://www.w3.org/2001/XMLSchema".equals(ce.getNamespaceURI()) &&
+ "include".equals(ce.getLocalName())) {
+ includes.add(ce);
}
}
}
for (Iterator iter = imports.iterator(); iter.hasNext();) {
Element ce = (Element) iter.next();
String namespace = ce.getAttribute("namespace");
- if (schemas.get(namespace) == null) {
- String location = ce.getAttribute("schemaLocation");
- if (location != null && !"".equals(location)) {
- read(location, schema.getSourceUri());
- }
- }
+ String location = ce.getAttribute("schemaLocation");
schema.addImport(namespace);
schema.getRoot().removeChild(ce);
+ if (location != null && !"".equals(location)) {
+ read(location, baseUri);
+ }
+ }
+ for (Iterator iter = includes.iterator(); iter.hasNext();) {
+ Element ce = (Element) iter.next();
+ String location = ce.getAttribute("schemaLocation");
+ schema.getRoot().removeChild(ce);
+ if (location != null && !"".equals(location)) {
+ read(location, baseUri);
+ }
}
}