You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by na...@apache.org on 2009/09/11 13:46:11 UTC

svn commit: r813785 - /tuscany/branches/sca-java-1.x/modules/binding-ws-wsdlgen/src/main/java/org/apache/tuscany/sca/binding/ws/wsdlgen/Interface2WSDLGenerator.java

Author: nash
Date: Fri Sep 11 11:46:11 2009
New Revision: 813785

URL: http://svn.apache.org/viewvc?rev=813785&view=rev
Log:
Fix TUSCANY-3267 and TUSCANY-2757 (ensure wrapper elements have nillable=false)

Modified:
    tuscany/branches/sca-java-1.x/modules/binding-ws-wsdlgen/src/main/java/org/apache/tuscany/sca/binding/ws/wsdlgen/Interface2WSDLGenerator.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=813785&r1=813784&r2=813785&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 Fri Sep 11 11:46:11 2009
@@ -78,6 +78,7 @@
 import org.apache.ws.commons.schema.utils.NamespaceMap;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
+import org.w3c.dom.NamedNodeMap;
 import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
 
@@ -340,6 +341,29 @@
             }
             List<XSDefinition> xsDefinitions = helper.getSchemaDefinitions(xsdFactory, resolver, en.getValue());
             for (XSDefinition xsDef: xsDefinitions) {
+                // TUSCANY-2757 and TUSCANY-3267 - flip global wrapper elements with nillable 
+                // set true to be set to false.  The JAXB RI seems to be generating this setting
+                // incorrectly according to the JAXB spec.
+                Document doc = xsDef.getDocument();
+                if (doc != null) {
+                    NodeList nodes = doc.getFirstChild().getChildNodes();
+                    for (int i = 0; i < nodes.getLength(); i++) {
+                        Node aNode = nodes.item(i);
+                        if (aNode.getLocalName() != null && aNode.getLocalName().equals("element")) {
+                            NamedNodeMap attributes = aNode.getAttributes();
+                            Node nameAttr = attributes.getNamedItem("name");
+                            if (nameAttr != null) { 
+                                QName elementName = new QName(xsDef.getNamespace(), nameAttr.getNodeValue());
+                                if (wrappers.containsKey(elementName)) {
+                                    Node nillable = attributes.getNamedItem("nillable");
+                                    if (nillable != null) {
+                                        nillable.setNodeValue("false");
+                                    }
+                                }
+                            }
+                        }
+                    }
+                }
                 addSchemaExtension(xsDef, schemaCollection, wsdlDefinition, definition);
             }
         }