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 2008/05/27 02:09:11 UTC

svn commit: r660340 [2/4] - in /incubator/tuscany/java/sca: itest/databindings/common/src/main/resources/xsd/ itest/wsdlless/src/main/java/bigbank/account/services/accountdata/ modules/ modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly...

Added: incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/JAXBTypeHelper.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/JAXBTypeHelper.java?rev=660340&view=auto
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/JAXBTypeHelper.java (added)
+++ incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/JAXBTypeHelper.java Mon May 26 17:08:32 2008
@@ -0,0 +1,121 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.    
+ */
+
+package org.apache.tuscany.sca.databinding.impl;
+
+import java.beans.Introspector;
+import java.io.IOException;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.SchemaOutputResolver;
+import javax.xml.namespace.QName;
+import javax.xml.transform.Result;
+import javax.xml.transform.dom.DOMResult;
+
+import org.apache.tuscany.sca.databinding.XMLTypeHelper;
+import org.apache.tuscany.sca.interfacedef.util.JavaXMLMapper;
+import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
+import org.apache.tuscany.sca.interfacedef.util.TypeInfo;
+import org.apache.tuscany.sca.interfacedef.util.XMLType;
+import org.apache.tuscany.sca.xsd.XSDefinition;
+import org.apache.tuscany.sca.xsd.XSDFactory;
+
+import org.w3c.dom.Document;
+import org.w3c.dom.DocumentFragment;
+import org.w3c.dom.Node;
+
+public class JAXBTypeHelper implements XMLTypeHelper {
+    private static final String SCHEMA_NS = "http://www.w3.org/2001/XMLSchema";
+    private static final String ANYTYPE_NAME = "anyType";
+    private static final QName ANYTYPE_QNAME = new QName(SCHEMA_NS, ANYTYPE_NAME);
+
+    private List<Class> types = new ArrayList<Class>();
+    
+    public JAXBTypeHelper() {
+        super();
+    }
+
+    public TypeInfo getTypeInfo(Class javaType, Object logical) {
+        QName xmlType = JavaXMLMapper.getXMLType(javaType);
+        if (xmlType != null) {
+            return new TypeInfo(xmlType, true, null);
+        } else if (javaType.isInterface()) {
+            return new TypeInfo(ANYTYPE_QNAME, true, null);
+        } else {
+            types.add(javaType);
+            if (logical instanceof XMLType) {
+                xmlType = ((XMLType)logical).getTypeName();
+            }
+            if (xmlType == null) {
+                xmlType = new QName(JavaXMLMapper.getNamespace(javaType),
+                                    Introspector.decapitalize(javaType.getSimpleName()));
+            }
+            return new TypeInfo(xmlType, false, null);
+        }
+    }
+
+    public List<XSDefinition> getSchemaDefinitions(XSDFactory factory, ModelResolver resolver) {
+        List<XSDefinition> definitions = new ArrayList<XSDefinition>();
+        generateJAXBSchemas(definitions, factory);
+        return definitions;
+    }
+
+    private void generateJAXBSchemas(List<XSDefinition> definitions, XSDFactory factory) {
+        if (types.size() > 0) {
+            try {
+                Class[] typesArray = new Class[types.size()];
+                typesArray = types.toArray(typesArray);
+                JAXBContext context = JAXBContext.newInstance(typesArray);
+                SchemaOutputResolverImpl resolver = new SchemaOutputResolverImpl();
+                context.generateSchema(resolver);
+                Map<String, DOMResult> results = resolver.getResults();
+                for (Map.Entry<String, DOMResult> entry: results.entrySet()) {
+                    XSDefinition definition = factory.createXSDefinition();
+                    definition.setUnresolved(true);
+                    definition.setDocument((Document)entry.getValue().getNode());
+                    definition.setNamespace(entry.getKey());
+                    definitions.add(definition);
+                }
+            } catch (Exception e) {
+                throw new RuntimeException(e);
+            }
+        }
+    }
+
+    private static class SchemaOutputResolverImpl extends SchemaOutputResolver {
+        private Map<String, DOMResult> results = new HashMap<String, DOMResult>();
+
+        @Override
+        public Result createOutput(String ns, String file) throws IOException {
+            DOMResult result = new DOMResult();
+            result.setSystemId("sca:dom");
+            results.put(ns, result);
+            return result;
+        }
+
+        public Map<String, DOMResult> getResults() {
+            return results;
+        }
+    }
+
+}

Modified: incubator/tuscany/java/sca/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/JAXWSJavaInterfaceProcessor.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/JAXWSJavaInterfaceProcessor.java?rev=660340&r1=660339&r2=660340&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/JAXWSJavaInterfaceProcessor.java (original)
+++ incubator/tuscany/java/sca/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/JAXWSJavaInterfaceProcessor.java Mon May 26 17:08:32 2008
@@ -46,9 +46,9 @@
 import org.apache.tuscany.sca.interfacedef.impl.DataTypeImpl;
 import org.apache.tuscany.sca.interfacedef.java.JavaInterface;
 import org.apache.tuscany.sca.interfacedef.java.JavaOperation;
-import org.apache.tuscany.sca.interfacedef.java.impl.JavaInterfaceUtil;
 import org.apache.tuscany.sca.interfacedef.java.introspect.JavaInterfaceVisitor;
 import org.apache.tuscany.sca.interfacedef.util.ElementInfo;
+import org.apache.tuscany.sca.interfacedef.util.JavaXMLMapper;
 import org.apache.tuscany.sca.interfacedef.util.WrapperInfo;
 import org.apache.tuscany.sca.interfacedef.util.XMLType;
 
@@ -79,7 +79,7 @@
 
         Class<?> clazz = contract.getJavaClass();
         WebService webService = clazz.getAnnotation(WebService.class);
-        String tns = JavaInterfaceUtil.getNamespace(clazz);
+        String tns = JavaXMLMapper.getNamespace(clazz);
         String localName = clazz.getSimpleName();
         if (webService != null) {
             tns = getValue(webService.targetNamespace(), tns);

Modified: incubator/tuscany/java/sca/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/impl/JavaInterfaceIntrospectorImpl.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/impl/JavaInterfaceIntrospectorImpl.java?rev=660340&r1=660339&r2=660340&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/impl/JavaInterfaceIntrospectorImpl.java (original)
+++ incubator/tuscany/java/sca/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/impl/JavaInterfaceIntrospectorImpl.java Mon May 26 17:08:32 2008
@@ -46,6 +46,7 @@
 import org.apache.tuscany.sca.interfacedef.java.JavaInterfaceFactory;
 import org.apache.tuscany.sca.interfacedef.java.JavaOperation;
 import org.apache.tuscany.sca.interfacedef.java.introspect.JavaInterfaceVisitor;
+import org.apache.tuscany.sca.interfacedef.util.JavaXMLMapper;
 import org.apache.tuscany.sca.interfacedef.util.XMLType;
 import org.osoa.sca.annotations.Conversational;
 import org.osoa.sca.annotations.EndsConversation;
@@ -106,7 +107,7 @@
         }
         javaInterface.setCallbackClass(callbackClass);
 
-        String ns = JavaInterfaceUtil.getNamespace(clazz);
+        String ns = JavaXMLMapper.getNamespace(clazz);
         javaInterface.getOperations().addAll(getOperations(clazz, remotable, conversational, ns));
 
         for (JavaInterfaceVisitor extension : visitors) {

Modified: incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/pom.xml
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/pom.xml?rev=660340&r1=660339&r2=660340&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/pom.xml (original)
+++ incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/pom.xml Mon May 26 17:08:32 2008
@@ -52,6 +52,16 @@
         </dependency>        
         <dependency>
             <groupId>org.apache.tuscany.sca</groupId>
+            <artifactId>tuscany-xsd</artifactId>
+            <version>2.0-incubating-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.tuscany.sca</groupId>
+            <artifactId>tuscany-xsd-xml</artifactId>
+            <version>2.0-incubating-SNAPSHOT</version>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.tuscany.sca</groupId>
             <artifactId>tuscany-databinding</artifactId>
             <version>2.0-incubating-SNAPSHOT</version>
         </dependency>

Modified: incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/interface2wsdl/Interface2WSDLGenerator.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/interface2wsdl/Interface2WSDLGenerator.java?rev=660340&r1=660339&r2=660340&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/interface2wsdl/Interface2WSDLGenerator.java (original)
+++ incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/interface2wsdl/Interface2WSDLGenerator.java Mon May 26 17:08:32 2008
@@ -19,12 +19,14 @@
 
 package org.apache.tuscany.sca.interfacedef.wsdl.interface2wsdl;
 
-import java.beans.Introspector;
+import java.io.PrintWriter;
 import java.lang.reflect.Method;
 import java.util.ArrayList;
 import java.util.HashMap;
+import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
 import javax.wsdl.Binding;
 import javax.wsdl.BindingOperation;
@@ -39,39 +41,51 @@
 import javax.wsdl.Types;
 import javax.wsdl.WSDLException;
 import javax.wsdl.extensions.schema.Schema;
+import javax.wsdl.extensions.schema.SchemaImport;
 import javax.wsdl.factory.WSDLFactory;
 import javax.xml.bind.JAXBContext;
 import javax.xml.namespace.QName;
 import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.parsers.ParserConfigurationException;
 
+import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
 import org.apache.tuscany.sca.databinding.DataBinding;
 import org.apache.tuscany.sca.databinding.DataBindingExtensionPoint;
+import org.apache.tuscany.sca.databinding.XMLTypeHelper;
 import org.apache.tuscany.sca.databinding.jaxb.JAXBContextHelper;
 import org.apache.tuscany.sca.interfacedef.DataType;
 import org.apache.tuscany.sca.interfacedef.Interface;
 import org.apache.tuscany.sca.interfacedef.Operation;
 import org.apache.tuscany.sca.interfacedef.java.JavaInterface;
 import org.apache.tuscany.sca.interfacedef.java.JavaOperation;
-import org.apache.tuscany.sca.interfacedef.java.impl.JavaInterfaceUtil;
 import org.apache.tuscany.sca.interfacedef.util.ElementInfo;
 import org.apache.tuscany.sca.interfacedef.util.JavaXMLMapper;
 import org.apache.tuscany.sca.interfacedef.util.TypeInfo;
 import org.apache.tuscany.sca.interfacedef.util.XMLType;
+import org.apache.tuscany.sca.interfacedef.util.WrapperInfo;
 import org.apache.tuscany.sca.interfacedef.wsdl.WSDLDefinition;
 import org.apache.tuscany.sca.interfacedef.wsdl.WSDLInterface;
-import org.apache.tuscany.sca.interfacedef.util.WrapperInfo;
+import org.apache.tuscany.sca.xsd.XSDefinition;
+import org.apache.tuscany.sca.xsd.XSDFactory;
+
 import org.apache.ws.commons.schema.XmlSchema;
 import org.apache.ws.commons.schema.XmlSchemaCollection;
 import org.apache.ws.commons.schema.XmlSchemaComplexType;
 import org.apache.ws.commons.schema.XmlSchemaElement;
+import org.apache.ws.commons.schema.XmlSchemaException;
 import org.apache.ws.commons.schema.XmlSchemaForm;
 import org.apache.ws.commons.schema.XmlSchemaSequence;
+import org.apache.ws.commons.schema.XmlSchemaSerializer;
 import org.apache.ws.commons.schema.XmlSchemaType;
+import org.apache.ws.commons.schema.utils.NamespaceMap;
 import org.w3c.dom.Document;
+import org.w3c.dom.DOMImplementation;
 import org.w3c.dom.Element;
 import org.w3c.dom.Node;
 import org.w3c.dom.NodeList;
+import org.w3c.dom.ls.DOMImplementationLS;
+import org.w3c.dom.ls.LSOutput;
+import org.w3c.dom.ls.LSSerializer;
 
 /**
  * @version $Rev$ $Date$
@@ -80,29 +94,34 @@
     private static final String SCHEMA_NS = "http://www.w3.org/2001/XMLSchema";
     private static final String SCHEMA_NAME = "schema";
     private static final QName SCHEMA_QNAME = new QName(SCHEMA_NS, SCHEMA_NAME);
-    private static final String ANYTYPE_NAME = "anyType";
-    private static final QName ANYTYPE_QNAME = new QName(SCHEMA_NS, ANYTYPE_NAME);
+    private static final String XMLNS_NS = "http://www.w3.org/2000/xmlns/";
 
     private WSDLFactory factory;
-    private DataBindingExtensionPoint dataBindingExtensionPoint;
+    private DataBindingExtensionPoint dataBindings;
     private WSDLDefinitionGenerator definitionGenerator;
-    private boolean requiresSOAP12; 
+    private boolean requiresSOAP12;
+    private ModelResolver resolver;
+    private XSDFactory xsdFactory;
 
-    public Interface2WSDLGenerator(boolean requiresSOAP12) throws WSDLException {
-        super();
-        this.requiresSOAP12 = requiresSOAP12; 
-        definitionGenerator = new WSDLDefinitionGenerator(requiresSOAP12);
-        this.factory = WSDLFactory.newInstance();
+    public Interface2WSDLGenerator(boolean requiresSOAP12,
+                                   ModelResolver resolver,
+                                   DataBindingExtensionPoint dataBindings,
+                                   XSDFactory xsdFactory) throws WSDLException {
+        this(requiresSOAP12, resolver, dataBindings, xsdFactory, WSDLFactory.newInstance());
     }
 
     public Interface2WSDLGenerator(boolean requiresSOAP12,
-                                   WSDLFactory factory,
-                                   DataBindingExtensionPoint dataBindingExtensionPoint) {
+                                   ModelResolver resolver,
+                                   DataBindingExtensionPoint dataBindings,
+                                   XSDFactory xsdFactory,
+                                   WSDLFactory factory) {
         super();
         this.requiresSOAP12 = requiresSOAP12; 
+        this.resolver = resolver; 
         definitionGenerator = new WSDLDefinitionGenerator(requiresSOAP12);
+        this.dataBindings = dataBindings;
+        this.xsdFactory = xsdFactory;
         this.factory = factory;
-        this.dataBindingExtensionPoint = dataBindingExtensionPoint;
     }
 
     public Definition generate(Interface interfaze, WSDLDefinition wsdlDefinition) throws WSDLException {
@@ -115,7 +134,8 @@
         if (interfaze instanceof WSDLInterface) {
             return ((WSDLInterface)interfaze).getWsdlDefinition().getDefinition();
         }
-        QName name = getQName(interfaze);
+        JavaInterface iface = (JavaInterface)interfaze;
+        QName name = getQName(iface);
         Definition definition = factory.newDefinition();
         if (requiresSOAP12) {
             definition.addNamespace("soap12", "http://schemas.xmlsoap.org/wsdl/soap12/");
@@ -133,10 +153,10 @@
         PortType portType = definition.createPortType();
         portType.setQName(name);
         Binding binding = definitionGenerator.createBinding(definition, portType);
-        ArrayList<Class> javaTypes = new ArrayList<Class>(); 
+        Map<String, XMLTypeHelper> helpers = new HashMap<String, XMLTypeHelper>();
         Map<QName, List<ElementInfo>> wrappers = new HashMap<QName, List<ElementInfo>>();
         for (Operation op : interfaze.getOperations()) {
-            javax.wsdl.Operation operation = generateOperation(definition, op, javaTypes, wrappers);
+            javax.wsdl.Operation operation = generateOperation(definition, op, helpers, wrappers);
             portType.addOperation(operation);
             String action = ((JavaOperation)op).getAction();
             BindingOperation bindingOp = definitionGenerator.createBindingOperation(definition, operation, action);
@@ -148,67 +168,77 @@
         definition.addBinding(binding);
         wsdlDefinition.setBinding(binding);
 
-        Map<String, Element> schemas = new HashMap<String, Element>();
-        Document schemaDoc = null;
-        if (javaTypes.size() > 0) {
-            try {
-                // generate schema document for all required types
-                Class[] types = new Class[javaTypes.size()];
-                types = javaTypes.toArray(types);
-                JAXBContext context = JAXBContext.newInstance(types);
-                schemaDoc = (Document)JAXBContextHelper.generateSchema(context);
-
-                // create a map entry for each schema in the document
-                NodeList docNodes = schemaDoc.getChildNodes();
-                for (int i = 0; i < docNodes.getLength(); i++) {
-                    Node docNode = docNodes.item(i);
-                    if (docNode.getNodeType() == Node.ELEMENT_NODE &&
-                        SCHEMA_NS.equals(docNode.getNamespaceURI()) &&
-                        SCHEMA_NAME.equals(docNode.getLocalName())) {
-                        Schema schemaExt = createSchemaExt(definition);
-                        schemaExt.setElement((Element)docNode);
-                        String targetNS = ((Element)docNode).getAttribute("targetNamespace");
-                        if (!"".equals(targetNS)) {
-                            schemas.put(targetNS, (Element)docNode);
+        // call each helper in turn to populate the wsdl.types element
+        XmlSchemaCollection schemaCollection = new XmlSchemaCollection(); 
+        int index = 0;
+        for (XMLTypeHelper helper: new HashSet<XMLTypeHelper>(helpers.values())) {
+            List<XSDefinition> xsDefinitions = helper.getSchemaDefinitions(xsdFactory, resolver);
+            for (XSDefinition xsDef: xsDefinitions) {
+                String nsURI = xsDef.getNamespace();
+                Document document = xsDef.getDocument();
+                XmlSchema schemaDef = xsDef.getSchema();
+                if (document == null) {
+                    try {
+                        NamespaceMap prefixMap = new NamespaceMap();
+                        prefixMap.add("xs", SCHEMA_NS);
+                        prefixMap.add("tns", nsURI);
+                        schemaDef.setNamespaceContext(prefixMap);
+                        Document[] docs = schemaDef.getAllSchemas();
+                        document = docs[0];
+                        xsDef.setDocument(document);
+                        for (int i = 1; i < docs.length; i++) {
+                            Element schema = docs[i].getDocumentElement();
+                            Schema schemaExt = createSchemaExt(definition);
+                            schemaExt.setElement(schema);
                         }
+                    } catch (XmlSchemaException e) {
+                        throw new RuntimeException(e);
                     }
                 }
+                loadXSD(schemaCollection, xsDef);
+                wsdlDefinition.getXmlSchemas().add(xsDef);
+                Element schema = document.getDocumentElement();
+                Schema schemaExt = createSchemaExt(definition);
+                schemaExt.setElement(schema);
+            }
+        }
 
-                // remove global wrapper elements from generation list
-                for (Map.Entry<String, Element> entry: schemas.entrySet()) {
-                    String targetNS = entry.getKey();
-                    NodeList childNodes = entry.getValue().getChildNodes();
-                    for (int i = 0; i < childNodes.getLength(); i++) {
-                        Node childNode = childNodes.item(i);
-                        if (childNode.getNodeType() == Node.ELEMENT_NODE) {
-                            String elementName = ((Element)childNode).getAttribute("name");
-                            QName elementQName = new QName(targetNS, elementName); 
-                            wrappers.remove(elementQName);  // it's OK if not found
-                        }
-                    }
-                }
-            } catch (Exception e) {
-                throw new RuntimeException(e);
+        // remove global wrapper elements with schema definitions from generation list
+        for (QName wrapperName: new HashSet<QName>(wrappers.keySet())) {
+            if (wsdlDefinition.getXmlSchemaElement(wrapperName) != null) {
+                wrappers.remove(wrapperName);
             }
         }
 
-        // generate schema for any wrappers that weren't generated by JAXB
+        // generate schema elements for wrappers that aren't defined in the schemas
         if (wrappers.size() > 0) {
+            int i = 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();
-                Element schema = schemas.get(targetNS);
-                if (schema == null) {
-                    if (schemaDoc == null) {
-                        schemaDoc = createDocument();
-                    }
+                Document schemaDoc = null;
+                Element schema = null;
+                XSDefinition xsDef = wrapperXSDs.get(targetNS);
+                if (xsDef != null) {
+                    schemaDoc = xsDef.getDocument();
+                    schema = schemaDoc.getDocumentElement();
+                } else {
+                    schemaDoc = createDocument();
                     schema = schemaDoc.createElementNS(SCHEMA_NS, "xs:schema");
                     schema.setAttribute("elementFormDefault", "qualified");
                     schema.setAttribute("attributeFormDefault", "qualified");
                     schema.setAttribute("targetNamespace", targetNS);
-                    schema.setAttributeNS("http://www.w3.org/2000/xmlns/", "xmlns:xs", SCHEMA_NS);
+                    schema.setAttributeNS(XMLNS_NS, "xmlns:xs", SCHEMA_NS);
+                    schemaDoc.appendChild(schema);
                     Schema schemaExt = createSchemaExt(definition);
                     schemaExt.setElement(schema);
-                    schemas.put(targetNS, schema);
+                    prefixMaps.put(schema, new HashMap<String, String>());
+                    xsDef = xsdFactory.createXSDefinition();
+                    xsDef.setUnresolved(true);
+                    xsDef.setNamespace(targetNS);
+                    xsDef.setDocument(schemaDoc);
+                    wrapperXSDs.put(targetNS, xsDef);
                 }
                 Element wrapper = schemaDoc.createElementNS(SCHEMA_NS, "xs:element");
                 schema.appendChild(wrapper);
@@ -235,18 +265,55 @@
                                 xsElement.setAttribute("nillable", "true");
                             }
                             QName typeName = element.getType().getQName();
-                            xsElement.setAttribute("type", typeName.getLocalPart());
+                            String nsURI = typeName.getNamespaceURI();
+                            if ("".equals(nsURI) || targetNS.equals(nsURI)) {
+                                xsElement.setAttribute("type", typeName.getLocalPart());
+                            } else if (SCHEMA_NS.equals(nsURI)) {
+                                xsElement.setAttribute("type", "xs:" + typeName.getLocalPart());
+                            } else {
+                                Map<String, String> prefixMap = prefixMaps.get(schema);
+                                String prefix = prefixMap.get(nsURI);
+                                if (prefix == null) {
+                                    prefix = "ns" + i++;
+                                    prefixMap.put(nsURI, prefix);
+                                    schema.setAttributeNS(XMLNS_NS, "xmlns:" + prefix, nsURI);
+                                }
+                                xsElement.setAttribute("type", prefix + ":" + typeName.getLocalPart());
+                            }
                             sequence.appendChild(xsElement);
                         }
                     }
                 }
             }
+ 
+            // resolve XSDefinitions containing generated wrappers
+            for (XSDefinition xsDef: wrapperXSDs.values()) {
+                loadXSD(schemaCollection, xsDef);
+                wsdlDefinition.getXmlSchemas().add(xsDef);
+            }
         }
 
         return definition;
     }
 
-    private DocumentBuilderFactory documentBuilderFactory;
+    private static void loadXSD(XmlSchemaCollection schemaCollection, XSDefinition definition) {
+        if (definition.getSchema() != null) {
+            return;
+        }
+        if (definition.getDocument() != null) {
+            String uri = null;
+            if (definition.getLocation() != null) {
+                uri = definition.getLocation().toString();
+            }
+            XmlSchema schema = schemaCollection.read(definition.getDocument(), uri, null);
+            if (definition.getSchemaCollection() == null) {
+                definition.setSchemaCollection(schemaCollection);
+            }
+            if (definition.getSchema() == null) {
+                definition.setSchema(schema);
+            }
+        }
+    }
 
     public Schema createSchemaExt(Definition definition) throws WSDLException {
         Types types = definition.getTypes();
@@ -255,13 +322,18 @@
             definition.setTypes(types);
         }
 
-        Schema schemaExt = (Schema)definition.getExtensionRegistry()
-                               .createExtension(Types.class, SCHEMA_QNAME);
+        Schema schemaExt = createSchema(definition);
         types.addExtensibilityElement(schemaExt);
 
         return schemaExt;
     }
 
+    public Schema createSchema(Definition definition) throws WSDLException {
+        return (Schema)definition.getExtensionRegistry().createExtension(Types.class, SCHEMA_QNAME);
+    }
+
+    private DocumentBuilderFactory documentBuilderFactory;
+
     public Document createDocument() {
         Document document;
         try {
@@ -273,24 +345,24 @@
         } catch (ParserConfigurationException e) {
             throw new RuntimeException(e);
         }
-        document.setDocumentURI("http://");
+        // document.setDocumentURI("http://");
         return document;
     }
 
-    protected QName getQName(Interface i) {
-        JavaInterface ji = (JavaInterface)i;
-        QName qname = ji.getQName();
+    protected QName getQName(Interface interfaze) {
+        JavaInterface iface = (JavaInterface)interfaze;
+        QName qname = iface.getQName();
         if (qname != null) {
             return qname;
         } else {
-            Class<?> javaClass = ((JavaInterface)i).getJavaClass();
-            return new QName(JavaInterfaceUtil.getNamespace(javaClass), javaClass.getSimpleName(), "tns");
+            Class<?> javaClass = iface.getJavaClass();
+            return new QName(JavaXMLMapper.getNamespace(javaClass), javaClass.getSimpleName(), "tns");
         }
     }
 
     public javax.wsdl.Operation generateOperation(Definition definition,
                                                   Operation op,
-                                                  ArrayList<Class> javaTypes,
+                                                  Map<String, XMLTypeHelper> helpers,
                                                   Map<QName, List<ElementInfo>> wrappers)
                                               throws WSDLException {
         javax.wsdl.Operation operation = definition.createOperation();
@@ -308,7 +380,7 @@
         // FIXME: By default, java interface is mapped to doc-lit-wrapper style WSDL
         if (op.getWrapper() != null) {
             // Generate doc-lit-wrapper style
-            inputMsg.addPart(generateWrapperPart(definition, op, javaTypes, wrappers, true));
+            inputMsg.addPart(generateWrapperPart(definition, op, helpers, wrappers, true));
         } else {
             // Bare style
             int i = 0;
@@ -329,7 +401,7 @@
             definition.addMessage(outputMsg);
 
             if (op.getWrapper() != null) {
-                outputMsg.addPart(generateWrapperPart(definition, op, javaTypes, wrappers, false));
+                outputMsg.addPart(generateWrapperPart(definition, op, helpers, wrappers, false));
             } else {
                 outputMsg.addPart(generatePart(definition, op.getOutputType(), "return"));
             }
@@ -360,13 +432,13 @@
                 // create special wrapper for type indirection to real fault bean
                 elements = new ArrayList<ElementInfo>(1);
                 DataType logical = faultType.getLogical();
-                elements.add(getElementInfo(logical.getPhysical(),logical.getLogical(), null, javaTypes));
+                elements.add(getElementInfo(logical.getPhysical(), logical, null, helpers));
              } else {
                 // convert synthesized fault bean to a wrapper type
                 elements = new ArrayList<ElementInfo>();
                 for (DataType<XMLType> propDT: op.getFaultBeans().get(faultName)) {
                     XMLType logical = propDT.getLogical();
-                    elements.add(getElementInfo(propDT.getPhysical(), logical, logical.getElementName(), javaTypes));
+                    elements.add(getElementInfo(propDT.getPhysical(), propDT, logical.getElementName(), helpers));
                 }
             }
             wrappers.put(faultName, elements);
@@ -391,7 +463,7 @@
 
     public Part generateWrapperPart(Definition definition,
                                     Operation operation,
-                                    ArrayList<Class> javaTypes, 
+                                    Map<String, XMLTypeHelper> helpers, 
                                     Map<QName, List<ElementInfo>> wrappers,
                                     boolean input) throws WSDLException {
         Part part = definition.createPart();
@@ -411,75 +483,74 @@
             if (input) {
                 Class<?>[] paramTypes = method.getParameterTypes();
                 for (int i = 0; i < paramTypes.length; i++) {
-                    Object logical = operation.getInputType().getLogical().get(i).getLogical();
-                    elements.set(i, getElementInfo(paramTypes[i], logical, elements.get(i).getQName(), javaTypes));
+                    DataType dataType = operation.getInputType().getLogical().get(i);
+                    elements.set(i, getElementInfo(paramTypes[i], dataType, elements.get(i).getQName(), helpers));
                 }
             } else {
                 Class<?> returnType = method.getReturnType();
                 if (returnType != Void.TYPE) {
-                    Object logical = operation.getOutputType().getLogical();
-                    elements.set(0, getElementInfo(returnType, logical, elements.get(0).getQName(), javaTypes));
+                    DataType dataType = operation.getOutputType();
+                    elements.set(0, getElementInfo(returnType, dataType, elements.get(0).getQName(), helpers));
                 }
             }
         }
         return part;
     }
 
-    private ElementInfo getElementInfo(Class javaType, Object logical, QName name, ArrayList<Class> javaTypes) {
-        TypeInfo typeInfo = getTypeInfo(javaType.isArray() ? javaType.getComponentType() : javaType, logical);
-        if (!typeInfo.isSimpleType()) {
-            javaTypes.add(javaType);
+    private ElementInfo getElementInfo(Class javaType,
+                                       DataType dataType,
+                                       QName name,
+                                       Map<String, XMLTypeHelper> helpers) {
+        String db = dataType.getDataBinding();
+        while ("java:array".equals(db)) {
+            dataType = (DataType)dataType.getLogical();
+            db = dataType.getDataBinding();
+        }
+        DataBinding dataBinding = dataBindings.getDataBinding(db);
+        if (dataBinding == null) {
+            throw new RuntimeException("no data binding for " + db);
+        }
+        XMLTypeHelper helper = helpers.get(db);
+        if (helper == null) {
+            Class helperClass = dataBinding.getXMLTypeHelperClass();
+            for (XMLTypeHelper xth : helpers.values()) { 
+                if (xth.getClass() == helperClass) {
+                    helper = xth;
+                    break;
+                }
+            }
+            if (helper == null) {
+                try {
+                    helper = (XMLTypeHelper)helperClass.newInstance();
+                } catch (Exception e) {
+                    throw new RuntimeException(e);
+                }
+            }
+            helpers.put(db, helper);
         }
+        TypeInfo typeInfo = helper.getTypeInfo(javaType.isArray() ? javaType.getComponentType() : javaType,
+                                               dataType.getLogical());
         ElementInfo element = new ElementInfo(name, typeInfo);
         element.setMany(javaType.isArray());
         element.setNillable(!javaType.isPrimitive());
         return element;
     }
 
-    private TypeInfo getTypeInfo(Class javaType, Object logical) {
-        QName xmlType = JavaXMLMapper.getXMLType(javaType);
-        if (xmlType != null) {
-            return new TypeInfo(xmlType, true, null);
-        } else if (javaType.isInterface()) {
-            return new TypeInfo(ANYTYPE_QNAME, true, null);
-        } else {
-            if (logical instanceof XMLType) {
-                xmlType = ((XMLType)logical).getTypeName();
-            }
-            if (xmlType == null) {
-                xmlType = new QName(JavaInterfaceUtil.getNamespace(javaType),
-                                    Introspector.decapitalize(javaType.getSimpleName()));
-            }
-            return new TypeInfo(xmlType, false, null);
-        }
-    }
-
+    /*
+    // currently not using the next three methods
     public XmlSchemaType getXmlSchemaType(DataType type) {
         return null;
     }
 
     // FIXME: WE need to add databinding-specific Java2XSD generation
     public Element generateXSD(DataType dataType) {
-        DataBinding dataBinding = dataBindingExtensionPoint.getDataBinding(dataType.getDataBinding());
+        DataBinding dataBinding = dataBindings.getDataBinding(dataType.getDataBinding());
         if (dataBinding != null) {
             // return dataBinding.generateSchema(dataType);
         }
         return null;
     }
 
-    // The following method isn't currently used and would need updating to be
-    // usable.  Instead, we generate an inline schema DOM in this class and
-    // convert it to an XMLSchemaCollection when this method returns to
-    // Java2WSDLHelper.  It would be possible for this class to generate the
-    // XMLSchemaCollection and add it to the WSDLDefinition that's passed into
-    // this method.  This doesn't completely remove the need for DOM to
-    // XMLSchemaCollection conversion, because a DOM is produced by the
-    // JAXB schema generator.  We could do that DOM to XMLSchemaCollection
-    // conversion in this class and then add all the schemas generated here
-    // to the XMLSchemaCollection.  This would only be a worthwhile improvement
-    // over the current code if we could omit the inline DOM schemas from the
-    // generated wsdl4j Definition, and I'm not sure about all the implications
-    // of going down this path.
     public void generateWrapperElements(Operation op) {
         XmlSchemaCollection collection = new XmlSchemaCollection();
         String ns = getQName(op.getInterface()).getNamespaceURI();
@@ -527,6 +598,7 @@
         schema.getElements().add(outputElement.getQName(), outputElement);
 
     }
+    */
 
     public WSDLFactory getFactory() {
         return factory;

Modified: incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/java2wsdl/Java2WSDLHelper.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/java2wsdl/Java2WSDLHelper.java?rev=660340&r1=660339&r2=660340&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/java2wsdl/Java2WSDLHelper.java (original)
+++ incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/java2wsdl/Java2WSDLHelper.java Mon May 26 17:08:32 2008
@@ -55,22 +55,24 @@
 import javax.xml.XMLConstants;
 import javax.xml.namespace.QName;
 
+import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
+import org.apache.tuscany.sca.databinding.DataBindingExtensionPoint;
 import org.apache.tuscany.sca.interfacedef.DataType;
 import org.apache.tuscany.sca.interfacedef.Operation;
 import org.apache.tuscany.sca.interfacedef.java.JavaInterface;
 import org.apache.tuscany.sca.interfacedef.java.JavaInterfaceContract;
 import org.apache.tuscany.sca.interfacedef.util.XMLType;
-import org.apache.tuscany.sca.interfacedef.wsdl.DefaultWSDLFactory;
 import org.apache.tuscany.sca.interfacedef.wsdl.WSDLDefinition;
 import org.apache.tuscany.sca.interfacedef.wsdl.WSDLFactory;
 import org.apache.tuscany.sca.interfacedef.wsdl.WSDLInterface;
 import org.apache.tuscany.sca.interfacedef.wsdl.WSDLInterfaceContract;
-import org.apache.tuscany.sca.interfacedef.wsdl.XSDefinition;
 import org.apache.tuscany.sca.interfacedef.wsdl.impl.InvalidWSDLException;
-import org.apache.tuscany.sca.interfacedef.wsdl.impl.WSDLOperationIntrospectorImpl;
+import org.apache.tuscany.sca.interfacedef.wsdl.impl.WSDLInterfaceIntrospectorImpl;
 import org.apache.tuscany.sca.interfacedef.wsdl.interface2wsdl.Interface2WSDLGenerator;
 import org.apache.tuscany.sca.interfacedef.wsdl.xml.WSDLModelResolver;
-import org.apache.tuscany.sca.interfacedef.wsdl.xml.XMLDocumentHelper;
+import org.apache.tuscany.sca.xsd.XSDefinition;
+import org.apache.tuscany.sca.xsd.XSDFactory;
+import org.apache.tuscany.sca.xsd.xml.XMLDocumentHelper;
 import org.apache.ws.commons.schema.XmlSchema;
 import org.apache.ws.commons.schema.XmlSchemaCollection;
 import org.apache.ws.java2wsdl.Java2WSDLBuilder;
@@ -89,7 +91,7 @@
  */
 public class Java2WSDLHelper {
     // the following 3 switches are temporary for debugging
-    public static boolean newGenerator;  // external code sets this to force new generator
+    public static boolean newGenerator = true;  // external code sets this to force new generator
     public static boolean oldGenerator;  // external code sets this to force old generator
     public static boolean printWSDL;     // external code sets this to print generated WSDL
 
@@ -151,16 +153,23 @@
     /**
      * Create a WSDLInterfaceContract from a JavaInterfaceContract
      */
-    public static WSDLInterfaceContract createWSDLInterfaceContract(JavaInterfaceContract contract) {
-        return createWSDLInterfaceContract(contract, false);
+    public static WSDLInterfaceContract createWSDLInterfaceContract(JavaInterfaceContract contract,
+                                                                    ModelResolver resolver,
+                                                                    DataBindingExtensionPoint dataBindings,
+                                                                    WSDLFactory wsdlFactory,
+                                                                    XSDFactory xsdFactory) {
+        return createWSDLInterfaceContract(contract, false, resolver, dataBindings, wsdlFactory, xsdFactory);
     }
     
     /**
      * Create a WSDLInterfaceContract from a JavaInterfaceContract
      */
     public static WSDLInterfaceContract createWSDLInterfaceContract(JavaInterfaceContract contract,
-                                                                    boolean requiresSOAP12) {
-        final DefaultWSDLFactory wsdlFactory = new DefaultWSDLFactory();
+                                                                    boolean requiresSOAP12,
+                                                                    ModelResolver resolver,
+                                                                    DataBindingExtensionPoint dataBindings,
+                                                                    WSDLFactory wsdlFactory,
+                                                                    XSDFactory xsdFactory) {
 
         WSDLInterfaceContract wsdlContract = wsdlFactory.createWSDLInterfaceContract();
         WSDLInterface wsdlInterface = wsdlFactory.createWSDLInterface();
@@ -172,12 +181,15 @@
         //FIXME: When Interface2WSDLGenerator supports all databindings, change this
         // code to use it in all cases instead of calling createDefinition()
         Definition def = null;
+        boolean usedNewGenerator = false;
         if (newGenerator || (!oldGenerator && useNewGenerator(iface))) {
+            usedNewGenerator = true;
             /*
             System.out.println("$$ new gen: " + iface.getName());
             */
             try {
-                Interface2WSDLGenerator wsdlGenerator = new Interface2WSDLGenerator(requiresSOAP12);
+                Interface2WSDLGenerator wsdlGenerator =
+                    new Interface2WSDLGenerator(requiresSOAP12, resolver, dataBindings, xsdFactory);
                 def = wsdlGenerator.generate(iface, wsdlDefinition);
             } catch (WSDLException e) {
                 throw new RuntimeException(e);
@@ -203,6 +215,7 @@
         // for debugging
         if (printWSDL) {
             try {
+                System.out.println("Generated WSDL for Java interface " + iface.getName() + " class " + iface.getJavaClass().getName());
                 WSDLWriter writer =  javax.wsdl.factory.WSDLFactory.newInstance().newWSDLWriter();
                 writer.writeWSDL(def, System.out);
             } catch (WSDLException e) {
@@ -219,26 +232,24 @@
         PortType portType = (PortType)def.getAllPortTypes().values().iterator().next();
         wsdlInterface.setPortType(portType);
 
-        //FIXME: Should Interface2WSDLGenerator create an XmlSchemaCollection so that
-        // there's no need to call readInlineSchemas here?
-        //
-        // Allow privileged access to read properties. Requires PropertiesPermission read in
-        // security policy.
-        final Definition fdef = def;
-        AccessController.doPrivileged(new PrivilegedAction<Object>() {
-            public Object run() {
-                readInlineSchemas(wsdlFactory, wsdlDefinition, fdef, new XmlSchemaCollection());
-                return null;
-            }
-        });
+        if (!usedNewGenerator) {
+            // Allow privileged access to read properties. Requires PropertiesPermission read in
+            // security policy.
+            final XSDFactory finalFactory = xsdFactory;
+            final Definition fdef = def;
+            AccessController.doPrivileged(new PrivilegedAction<Object>() {
+                public Object run() {
+                    readInlineSchemas(finalFactory, wsdlDefinition, fdef, new XmlSchemaCollection());
+                    return null;
+                }
+            });
+        }
 
         try {
             for (Operation op : iface.getOperations()) {
                 javax.wsdl.Operation wsdlOp = portType.getOperation(op.getName(), null, null);
-                WSDLOperationIntrospectorImpl opx =
-                    new WSDLOperationIntrospectorImpl(wsdlFactory, wsdlOp, wsdlDefinition, null, null);
-                
-                wsdlInterface.getOperations().add(opx.getOperation());
+                wsdlInterface.getOperations().add(WSDLInterfaceIntrospectorImpl.getOperation(
+                                                      wsdlOp, wsdlDefinition, resolver, xsdFactory));
 
                 /*
                 Operation clonedOp = (Operation)op.clone();
@@ -302,7 +313,7 @@
      * @param definition
      * @param schemaCollection
      */
-    private static void readInlineSchemas(WSDLFactory wsdlFactory,
+    private static void readInlineSchemas(XSDFactory xsdFactory,
                                           WSDLDefinition wsdlDefinition,
                                           Definition definition,
                                           XmlSchemaCollection schemaCollection) {
@@ -321,7 +332,7 @@
                 }
                 if (element != null) {
                     Document doc = promote(element);
-                    XSDefinition xsDefinition = wsdlFactory.createXSDefinition();
+                    XSDefinition xsDefinition = xsdFactory.createXSDefinition();
                     xsDefinition.setUnresolved(true);
                     xsDefinition.setNamespace(element.getAttribute("targetNamespace"));
                     xsDefinition.setDocument(doc);
@@ -338,7 +349,7 @@
                 javax.wsdl.Import anImport = (javax.wsdl.Import)i;
                 // Read inline schemas 
                 if (anImport.getDefinition() != null) {
-                    readInlineSchemas(wsdlFactory, wsdlDefinition, anImport.getDefinition(), schemaCollection);
+                    readInlineSchemas(xsdFactory, wsdlDefinition, anImport.getDefinition(), schemaCollection);
                 }
             }
         }

Modified: incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/test/java/org/apache/tuscany/sca/interfacedef/wsdl/interface2wsdl/Java2WSDLGeneratorTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/test/java/org/apache/tuscany/sca/interfacedef/wsdl/interface2wsdl/Java2WSDLGeneratorTestCase.java?rev=660340&r1=660339&r2=660340&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/test/java/org/apache/tuscany/sca/interfacedef/wsdl/interface2wsdl/Java2WSDLGeneratorTestCase.java (original)
+++ incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/test/java/org/apache/tuscany/sca/interfacedef/wsdl/interface2wsdl/Java2WSDLGeneratorTestCase.java Mon May 26 17:08:32 2008
@@ -24,6 +24,7 @@
 import javax.wsdl.Definition;
 import javax.wsdl.xml.WSDLWriter;
 
+import org.apache.tuscany.sca.contribution.DefaultModelFactoryExtensionPoint;
 import org.apache.tuscany.sca.core.databinding.processor.DataBindingJavaInterfaceProcessor;
 import org.apache.tuscany.sca.databinding.DefaultDataBindingExtensionPoint;
 import org.apache.tuscany.sca.interfacedef.java.DefaultJavaInterfaceFactory;
@@ -33,6 +34,8 @@
 import org.apache.tuscany.sca.interfacedef.wsdl.DefaultWSDLFactory;
 import org.apache.tuscany.sca.interfacedef.wsdl.TestJavaInterface;
 import org.apache.tuscany.sca.interfacedef.wsdl.WSDLDefinition;
+import org.apache.tuscany.sca.xsd.DefaultXSDFactory;
+import org.apache.tuscany.sca.xsd.xml.XSDModelResolver;
 import org.junit.Test;
 
 /**
@@ -48,8 +51,10 @@
         JAXWSFaultExceptionMapper faultExceptionMapper = new JAXWSFaultExceptionMapper(dataBindings);
         new JAXWSJavaInterfaceProcessor(dataBindings, faultExceptionMapper).visitInterface(iface);
         new DataBindingJavaInterfaceProcessor(dataBindings).visitInterface(iface);
-        WSDLDefinition wsdlDefinition = new DefaultWSDLFactory().createWSDLDefinition();
-        Interface2WSDLGenerator generator = new Interface2WSDLGenerator(false);
+        DefaultModelFactoryExtensionPoint modelFactories = new DefaultModelFactoryExtensionPoint();
+        WSDLDefinition wsdlDefinition = new DefaultWSDLFactory(modelFactories).createWSDLDefinition();
+        DefaultXSDFactory factory = new DefaultXSDFactory();
+        Interface2WSDLGenerator generator = new Interface2WSDLGenerator(false, new XSDModelResolver(null, null), dataBindings, factory);
         Definition definition = generator.generate(iface, wsdlDefinition);
 
         // print the generated WSDL file and inline schemas

Modified: incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/test/java/org/apache/tuscany/sca/interfacedef/wsdl/java2wsdl/Java2WSDLHelperTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/test/java/org/apache/tuscany/sca/interfacedef/wsdl/java2wsdl/Java2WSDLHelperTestCase.java?rev=660340&r1=660339&r2=660340&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/test/java/org/apache/tuscany/sca/interfacedef/wsdl/java2wsdl/Java2WSDLHelperTestCase.java (original)
+++ incubator/tuscany/java/sca/modules/interface-wsdl-java2wsdl/src/test/java/org/apache/tuscany/sca/interfacedef/wsdl/java2wsdl/Java2WSDLHelperTestCase.java Mon May 26 17:08:32 2008
@@ -27,6 +27,7 @@
 
 import junit.framework.TestCase;
 
+import org.apache.tuscany.sca.contribution.DefaultModelFactoryExtensionPoint;
 import org.apache.tuscany.sca.core.databinding.processor.DataBindingJavaInterfaceProcessor;
 import org.apache.tuscany.sca.databinding.DefaultDataBindingExtensionPoint;
 import org.apache.tuscany.sca.interfacedef.InvalidInterfaceException;
@@ -36,8 +37,11 @@
 import org.apache.tuscany.sca.interfacedef.java.jaxws.JAXWSFaultExceptionMapper;
 import org.apache.tuscany.sca.interfacedef.java.jaxws.JAXWSJavaInterfaceProcessor;
 import org.apache.tuscany.sca.interfacedef.wsdl.TestJavaInterface;
+import org.apache.tuscany.sca.interfacedef.wsdl.WSDLFactory;
 import org.apache.tuscany.sca.interfacedef.wsdl.WSDLInterface;
 import org.apache.tuscany.sca.interfacedef.wsdl.WSDLInterfaceContract;
+import org.apache.tuscany.sca.xsd.XSDFactory;
+import org.apache.tuscany.sca.xsd.xml.XSDModelResolver;
 import org.osoa.sca.annotations.Remotable;
 
 /**
@@ -64,8 +68,10 @@
         assertEquals("sayHello", operation.getName());
     }
 
-
     public void testCreateWSDLInterfaceContract() throws InvalidInterfaceException {
+        DefaultModelFactoryExtensionPoint modelFactories = new DefaultModelFactoryExtensionPoint();
+        WSDLFactory wsdlFactory = modelFactories.getFactory(WSDLFactory.class);
+        XSDFactory xsdFactory = modelFactories.getFactory(XSDFactory.class);
         DefaultJavaInterfaceFactory factory = new DefaultJavaInterfaceFactory();
         JavaInterfaceContract javaIC = factory.createJavaInterfaceContract();
         JavaInterface iface = factory.createJavaInterface(HelloWorld.class);
@@ -74,7 +80,7 @@
         new JAXWSJavaInterfaceProcessor(dataBindings, faultExceptionMapper).visitInterface(iface);
         new DataBindingJavaInterfaceProcessor(dataBindings).visitInterface(iface);
         javaIC.setInterface(iface);
-        WSDLInterfaceContract wsdlIC = Java2WSDLHelper.createWSDLInterfaceContract(javaIC);
+        WSDLInterfaceContract wsdlIC = Java2WSDLHelper.createWSDLInterfaceContract(javaIC, new XSDModelResolver(null, null), dataBindings, wsdlFactory, xsdFactory);
         assertNotNull(wsdlIC);
         WSDLInterface wsdlInterface = (WSDLInterface)wsdlIC.getInterface();
         assertNotNull(wsdlInterface);
@@ -87,7 +93,7 @@
         new JAXWSJavaInterfaceProcessor(dataBindings, faultExceptionMapper).visitInterface(iface2);
         new DataBindingJavaInterfaceProcessor(dataBindings).visitInterface(iface2);
         javaIC2.setInterface(iface2);
-        WSDLInterfaceContract wsdlIC2 = Java2WSDLHelper.createWSDLInterfaceContract(javaIC2);
+        WSDLInterfaceContract wsdlIC2 = Java2WSDLHelper.createWSDLInterfaceContract(javaIC2, new XSDModelResolver(null, null), dataBindings, wsdlFactory, xsdFactory);
         assertNotNull(wsdlIC2);
     }
 

Modified: incubator/tuscany/java/sca/modules/interface-wsdl-xml/pom.xml
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface-wsdl-xml/pom.xml?rev=660340&r1=660339&r2=660340&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/interface-wsdl-xml/pom.xml (original)
+++ incubator/tuscany/java/sca/modules/interface-wsdl-xml/pom.xml Mon May 26 17:08:32 2008
@@ -62,6 +62,12 @@
         
         <dependency>
             <groupId>org.apache.tuscany.sca</groupId>
+            <artifactId>tuscany-xsd-xml</artifactId>
+            <version>2.0-incubating-SNAPSHOT</version>
+        </dependency>
+        
+        <dependency>
+            <groupId>org.apache.tuscany.sca</groupId>
             <artifactId>tuscany-binding-sca</artifactId>
             <version>2.0-incubating-SNAPSHOT</version>
             <scope>test</scope>

Modified: incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/xml/WSDLDocumentProcessor.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/xml/WSDLDocumentProcessor.java?rev=660340&r1=660339&r2=660340&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/xml/WSDLDocumentProcessor.java (original)
+++ incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/main/java/org/apache/tuscany/sca/interfacedef/wsdl/xml/WSDLDocumentProcessor.java Mon May 26 17:08:32 2008
@@ -41,10 +41,11 @@
 import org.apache.tuscany.sca.contribution.service.ContributionResolveException;
 import org.apache.tuscany.sca.interfacedef.wsdl.WSDLDefinition;
 import org.apache.tuscany.sca.interfacedef.wsdl.WSDLFactory;
-import org.apache.tuscany.sca.interfacedef.wsdl.XSDefinition;
 import org.apache.tuscany.sca.monitor.Monitor;
 import org.apache.tuscany.sca.monitor.Problem;
 import org.apache.tuscany.sca.monitor.Problem.Severity;
+import org.apache.tuscany.sca.xsd.XSDefinition;
+import org.apache.tuscany.sca.xsd.XSDFactory;
 
 /**
  * An ArtifactProcessor for WSDL documents.
@@ -60,10 +61,12 @@
     private static final XMLInputFactory inputFactory = XMLInputFactory.newInstance();
 
     private WSDLFactory factory;
+    private XSDFactory xsdFactory;
     private Monitor monitor;
 
     public WSDLDocumentProcessor(ModelFactoryExtensionPoint modelFactories, Monitor monitor) {
         this.factory = modelFactories.getFactory(WSDLFactory.class);
+        this.xsdFactory = modelFactories.getFactory(XSDFactory.class);
         this.monitor = monitor;
     }
     
@@ -187,7 +190,7 @@
                     }
                     if (XSD.equals(reader.getName())) {
                         String tns = reader.getAttributeValue(null, "targetNamespace");
-                        XSDefinition xsd = factory.createXSDefinition();
+                        XSDefinition xsd = xsdFactory.createXSDefinition();
                         xsd.setUnresolved(true);
                         xsd.setNamespace(tns);
                         xsd.setLocation(URI.create(doc.toURI() + "#" + index));