Author: slaws
Date: Sun Oct 4 12:51:37 2009
New Revision: 821535
URL: http://svn.apache.org/viewvc?rev=821535&view=rev
Log:
TUSCANY-3283 re-enable the wrapper generation logic now that the no namespace
handling is complete. Had to mess around with how the schema is generated using
the schema collection as now the default schema is being extended with wrappers
after schema has been generated. Before a new no namespace schema was being
generated.
Modified:
tuscany/branches/sca-java-1.x/modules/binding-ws-wsdlgen/src/main/java/org/apache/tuscany/sca/binding/ws/wsdlgen/Interface2WSDLGenerator.java
tuscany/branches/sca-java-1.x/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/WSDLDefinition.java
tuscany/branches/sca-java-1.x/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/impl/WSDLDefinitionImpl.java
Modified:
tuscany/branches/sca-java-1.x/modules/binding-ws-wsdlgen/src/main/java/org/apache/tuscany/sca/binding/ws/wsdlgen/Interface2WSDLGenerator.java
URL:
http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/modules/binding-ws-wsdlgen/src/main/java/org/apache/tuscany/sca/binding/ws/wsdlgen/Interface2WSDLGenerator.java?rev=821535&r1=821534&r2=821535&view=diff
==============================================================================
---
tuscany/branches/sca-java-1.x/modules/binding-ws-wsdlgen/src/main/java/org/apache/tuscany/sca/binding/ws/wsdlgen/Interface2WSDLGenerator.java
(original)
+++
tuscany/branches/sca-java-1.x/modules/binding-ws-wsdlgen/src/main/java/org/apache/tuscany/sca/binding/ws/wsdlgen/Interface2WSDLGenerator.java
Sun Oct 4 12:51:37 2009
@@ -339,7 +339,7 @@
wsdlDefinition.setBinding(binding);
// call each helper in turn to populate the wsdl.types element
- XmlSchemaCollection schemaCollection = new XmlSchemaCollection();
+ XmlSchemaCollection schemaCollection = new XmlSchemaCollection();
for (Map.Entry<XMLTypeHelper, List<DataType>> en:
getDataTypes(interfaze, true, helpers).entrySet()) {
XMLTypeHelper helper = en.getKey();
@@ -361,7 +361,7 @@
defaultNamespaceSchema = xsDef;
}
// useful for debugging DOM issues
- //printDOM(xsDef.getDocument());
+ // printDOM(xsDef.getDocument());
}
// TUSCANY-3283 merge the no namespace schema into the default
namespace schema
@@ -396,17 +396,10 @@
}
}
}
- // TUSCANY-3283
- // useful for debugging DOM issues
- //printDOM(doc);
addSchemaExtension(xsDef, schemaCollection, wsdlDefinition,
definition);
- }
+ }
}
-/* TUSCANY-3283
- * the value "true" in the above call to getDataTypes(interfaze, true,
helpers) means that
- * wrappers are generated in the context of all of the other types being
generated.
-
// remove global wrapper elements with schema definitions from
generation list
for (QName wrapperName: new HashSet<QName>(wrappers.keySet())) {
if (wsdlDefinition.getXmlSchemaElement(wrapperName) != null) {
@@ -414,14 +407,21 @@
}
}
+
// generate schema elements for wrappers that aren't defined in the
schemas
if (wrappers.size() > 0) {
int i = 0;
int index = 0;
Map<String, XSDefinition> wrapperXSDs = new HashMap<String,
XSDefinition>();
+
Map<Element, Map<String, String>> prefixMaps = new
HashMap<Element, Map<String, String>>();
for (Map.Entry<QName, List<ElementInfo>> entry:
wrappers.entrySet()) {
String targetNS = entry.getKey().getNamespaceURI();
+ // make sure wrappers are generated into the default namespace
+ if (targetNS == null ||
+ targetNS.equals("")){
+ targetNS = namespaceURI;
+ }
Document schemaDoc = null;
Element schema = null;
XSDefinition xsDef = wrapperXSDs.get(targetNS);
@@ -429,25 +429,34 @@
schemaDoc = xsDef.getDocument();
schema = schemaDoc.getDocumentElement();
} else {
- schemaDoc = createDocument();
- schema = schemaDoc.createElementNS(SCHEMA_NS, "xs:schema");
- // The elementFormDefault should be set to unqualified,
see TUSCANY-2388
- schema.setAttribute("elementFormDefault", "unqualified");
- schema.setAttribute("attributeFormDefault", "qualified");
- schema.setAttribute("targetNamespace", targetNS);
- schema.setAttributeNS(XMLNS_NS, "xmlns:xs", SCHEMA_NS);
- schemaDoc.appendChild(schema);
- Schema schemaExt = createSchemaExt(definition);
- schemaExt.setElement(schema);
- prefixMaps.put(schema, new HashMap<String, String>());
- xsDef = xsdFactory.createXSDefinition();
- xsDef.setUnresolved(true);
- xsDef.setNamespace(targetNS);
- xsDef.setDocument(schemaDoc);
- // TUSCANY-2465: Set the system id to avoid schema conflict
- xsDef.setLocation(URI.create("xsd_" + index + ".xsd"));
- index++;
- wrapperXSDs.put(targetNS, xsDef);
+ // check schema is not already in the set identified so
far
+ xsDef = wsdlDefinition.getSchema(targetNS);
+ if (xsDef != null) {
+ schemaDoc = xsDef.getDocument();
+ schema = schemaDoc.getDocumentElement();
+ wrapperXSDs.put(targetNS, xsDef);
+ } else {
+ // create a new schema document
+ schemaDoc = createDocument();
+ schema = schemaDoc.createElementNS(SCHEMA_NS,
"xs:schema");
+ // The elementFormDefault should be set to
unqualified, see TUSCANY-2388
+ schema.setAttribute("elementFormDefault",
"unqualified");
+ schema.setAttribute("attributeFormDefault",
"qualified");
+ schema.setAttribute("targetNamespace", targetNS);
+ schema.setAttributeNS(XMLNS_NS, "xmlns:xs", SCHEMA_NS);
+ schemaDoc.appendChild(schema);
+ Schema schemaExt = createSchemaExt(definition);
+ schemaExt.setElement(schema);
+ prefixMaps.put(schema, new HashMap<String, String>());
+ xsDef = xsdFactory.createXSDefinition();
+ xsDef.setUnresolved(true);
+ xsDef.setNamespace(targetNS);
+ xsDef.setDocument(schemaDoc);
+ // TUSCANY-2465: Set the system id to avoid schema
conflict
+ xsDef.setLocation(URI.create("xsd_" + index + ".xsd"));
+ index++;
+ wrapperXSDs.put(targetNS, xsDef);
+ }
}
Element wrapper = schemaDoc.createElementNS(SCHEMA_NS,
"xs:element");
schema.appendChild(wrapper);
@@ -522,11 +531,27 @@
// resolve XSDefinitions containing generated wrappers
for (XSDefinition xsDef: wrapperXSDs.values()) {
- loadXSD(schemaCollection, xsDef);
- wsdlDefinition.getXmlSchemas().add(xsDef);
+ if (wsdlDefinition.getSchema(xsDef.getNamespace()) == null){
+ wsdlDefinition.getXmlSchemas().add(xsDef);
+ }
}
+ }
+
+ // TUSCANY-3283 reload all of the schema to take account of any
wrapper editing that's
+ // happened. Can't just extend what's there as the schema
collection won't
+ // let me reload a schema that's already been loaded.
+ schemaCollection = new XmlSchemaCollection();
+ for (XSDefinition xsDef: wsdlDefinition.getXmlSchemas()) {
+ xsDef.setSchema(null);
+ xsDef.setSchemaCollection(null);
+ loadXSD(schemaCollection, xsDef);
+ }
+
+ // TUSCANY-3283
+ // useful for debugging DOM issues
+ for (XSDefinition xsDef : wsdlDefinition.getXmlSchemas()){
+ printDOM(xsDef.getDocument());
}
-*/
return definition;
}
Modified:
tuscany/branches/sca-java-1.x/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/WSDLDefinition.java
URL:
http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/WSDLDefinition.java?rev=821535&r1=821534&r2=821535&view=diff
==============================================================================
---
tuscany/branches/sca-java-1.x/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/WSDLDefinition.java
(original)
+++
tuscany/branches/sca-java-1.x/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/WSDLDefinition.java
Sun Oct 4 12:51:37 2009
@@ -137,4 +137,12 @@
* @param binding the WSDL binding
*/
void setBinding(Binding binding);
+
+ /**
+ * Find the schema definition for the provided namespace
+ *
+ * @param namespace
+ * @return the schema definition relating to the provided namespace or
null if not found
+ */
+ XSDefinition getSchema(String namespace);
}
Modified:
tuscany/branches/sca-java-1.x/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/impl/WSDLDefinitionImpl.java
URL:
http://svn.apache.org/viewvc/tuscany/branches/sca-java-1.x/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/impl/WSDLDefinitionImpl.java?rev=821535&r1=821534&r2=821535&view=diff
==============================================================================
---
tuscany/branches/sca-java-1.x/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/impl/WSDLDefinitionImpl.java
(original)
+++
tuscany/branches/sca-java-1.x/modules/interface-wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/impl/WSDLDefinitionImpl.java
Sun Oct 4 12:51:37 2009
@@ -285,5 +285,15 @@
public void setBinding(Binding binding) {
this.binding = binding;
}
+
+ public XSDefinition getSchema(String namespace){
+ for (XSDefinition xsDef : schemas){
+ if (xsDef.getNamespace().equals(namespace)){
+ return xsDef;
+ }
+ }
+
+ return null;
+ }
}