Hi,

Please see my comments inline.

Thanks,
Raymond

----- Original Message ----- From: "Jean-Sebastien Delfino" <[EMAIL PROTECTED]>
To: <tuscany-dev@ws.apache.org>
Sent: Wednesday, April 11, 2007 9:09 AM
Subject: Please review WSDL introspection code, Re: svn commit: r527397


Could somebody familiar with the Databinding framework and the DataType support in particular review how I ported the WSDLIntrospector and WSDLOperation to the new SPIs?

I had to remove some usage of generics since Operation<DataType> has changed to Operation.


Yes.

Also I am not sure if I am setting the inputType and outputType correctly on the operation, in particular if the WSDL is a doc-literal-wrapped style WSDL, do we need to unwrap the wrapper like I did or not?


We don't need to unwrap the wrapper for the operation model. The signature of the operation should be the same as defined by the IDL. I'll fix it.

And finally how is the DataBinding field on an inputType used? is DataBinding == "idl:input" correct?


Yes.

Thanks...

[EMAIL PROTECTED] wrote:
Author: jsdelfino
Date: Tue Apr 10 23:26:26 2007
New Revision: 527397

URL: http://svn.apache.org/viewvc?view=rev&rev=527397
Log:
Ported WSDL interface introspector to the latest SPIs and integrated it with the WSDLInterfaceProcessor.

Added:

incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/main/java/org/apache/tuscany/interfacedef/wsdl/introspect/

incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/main/java/org/apache/tuscany/interfacedef/wsdl/introspect/DefaultWSDLInterfaceIntrospector.java (with props)

incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/main/java/org/apache/tuscany/interfacedef/wsdl/introspect/DefaultXMLSchemaRegistry.java (with props)

incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/main/java/org/apache/tuscany/interfacedef/wsdl/introspect/InvalidWSDLException.java (with props)

incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/main/java/org/apache/tuscany/interfacedef/wsdl/introspect/WSDLInterfaceIntrospector.java (with props)

incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/main/java/org/apache/tuscany/interfacedef/wsdl/introspect/WSDLOperation.java (with props)

incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/main/java/org/apache/tuscany/interfacedef/wsdl/introspect/XMLSchemaRegistry.java (with props)
Modified:

incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/main/java/org/apache/tuscany/interfacedef/wsdl/xml/WSDLInterfaceProcessor.java
    incubator/tuscany/java/sca/modules/interface-wsdl/pom.xml

incubator/tuscany/java/sca/modules/interface/src/main/java/org/apache/tuscany/interfacedef/util/WrapperInfo.java

Added: incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/main/java/org/apache/tuscany/interfacedef/wsdl/introspect/DefaultWSDLInterfaceIntrospector.java URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/main/java/org/apache/tuscany/interfacedef/wsdl/introspect/DefaultWSDLInterfaceIntrospector.java?view=auto&rev=527397
==============================================================================
--- incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/main/java/org/apache/tuscany/interfacedef/wsdl/introspect/DefaultWSDLInterfaceIntrospector.java (added) +++ incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/main/java/org/apache/tuscany/interfacedef/wsdl/introspect/DefaultWSDLInterfaceIntrospector.java Tue Apr 10 23:26:26 2007
@@ -0,0 +1,69 @@
+/*
+ * 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.interfacedef.wsdl.introspect;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.wsdl.PortType;
+
+import org.apache.tuscany.interfacedef.InvalidInterfaceException;
+import org.apache.tuscany.interfacedef.Operation;
+import org.apache.tuscany.interfacedef.wsdl.WSDLInterface;
+import org.apache.tuscany.interfacedef.wsdl.impl.WSDLInterfaceImpl;
+
+/**
+ * Introspector for creating WSDLInterface definitions from WSDL PortTypes.
+ */
+public class DefaultWSDLInterfaceIntrospector implements WSDLInterfaceIntrospector {
+    +    private XMLSchemaRegistry schemaRegistry;
+
+ public DefaultWSDLInterfaceIntrospector(XMLSchemaRegistry schemaRegistry) {
+        super();
+        this.schemaRegistry = schemaRegistry;
+    }
+
+ // FIXME: Do we want to deal with document-literal wrapped style based on the JAX-WS spec? + protected List<Operation> introspectOperations(PortType portType) throws InvalidInterfaceException {
+        List<Operation> operations = new ArrayList<Operation>();
+        for (Object op : portType.getOperations()) {
+            javax.wsdl.Operation wsdlOp = (javax.wsdl.Operation)op;
+            operations.add(introspectOperation(wsdlOp));
+        }
+        return operations;
+    }
+
+ protected Operation introspectOperation(javax.wsdl.Operation wsdlOp) throws InvalidInterfaceException {
+
+ WSDLOperation op = new WSDLOperation(wsdlOp, null, schemaRegistry);
+        return op.getOperation();
+    }
+
+ public WSDLInterface introspect(PortType portType) throws InvalidInterfaceException {
+        WSDLInterface wsdlInterface = new WSDLInterfaceImpl();
+        wsdlInterface.setPortType(portType);
+ wsdlInterface.getOperations().addAll(introspectOperations(portType));
+        // FIXME: set to Non-conversational for now
+        wsdlInterface.setConversational(false);
+        return wsdlInterface;
+    }
+
+}

Propchange: incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/main/java/org/apache/tuscany/interfacedef/wsdl/introspect/DefaultWSDLInterfaceIntrospector.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/main/java/org/apache/tuscany/interfacedef/wsdl/introspect/DefaultWSDLInterfaceIntrospector.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/main/java/org/apache/tuscany/interfacedef/wsdl/introspect/DefaultXMLSchemaRegistry.java URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/main/java/org/apache/tuscany/interfacedef/wsdl/introspect/DefaultXMLSchemaRegistry.java?view=auto&rev=527397
==============================================================================
--- incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/main/java/org/apache/tuscany/interfacedef/wsdl/introspect/DefaultXMLSchemaRegistry.java (added) +++ incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/main/java/org/apache/tuscany/interfacedef/wsdl/introspect/DefaultXMLSchemaRegistry.java Tue Apr 10 23:26:26 2007
@@ -0,0 +1,127 @@
+/*
+ * 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.interfacedef.wsdl.introspect;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.URL;
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
+
+import javax.wsdl.Definition;
+import javax.wsdl.Types;
+import javax.wsdl.extensions.schema.Schema;
+import javax.xml.namespace.QName;
+
+import org.apache.ws.commons.schema.XmlSchema;
+import org.apache.ws.commons.schema.XmlSchemaCollection;
+import org.apache.ws.commons.schema.XmlSchemaElement;
+import org.apache.ws.commons.schema.XmlSchemaException;
+import org.apache.ws.commons.schema.XmlSchemaType;
+import org.w3c.dom.Element;
+
+/**
+ * Default implementation of XMLSchemaRegistry
+ */
+public class DefaultXMLSchemaRegistry implements XMLSchemaRegistry {
+    private final XmlSchemaCollection collection;
+
+    /**
+     * @param collection
+     */
+    public DefaultXMLSchemaRegistry(XmlSchemaCollection collection) {
+        super();
+        this.collection = collection;
+    }
+
+    public DefaultXMLSchemaRegistry() {
+        super();
+        this.collection = new XmlSchemaCollection();
+    }
+
+    public XmlSchemaElement getElement(QName name) {
+        return collection.getElementByQName(name);
+    }
+
+    public XmlSchemaType getType(QName name) {
+        return collection.getTypeByQName(name);
+    }
+
+    public List<XmlSchema> loadSchemas(Definition definition) {
+        Types types = definition.getTypes();
+        if (types == null) {
+            return Collections.emptyList();
+        }
+        List<XmlSchema> schemas = new ArrayList<XmlSchema>();
+        for (Object ext : types.getExtensibilityElements()) {
+            if (ext instanceof Schema) {
+                Element element = ((Schema) ext).getElement();
+ XmlSchema s = collection.read(element, element.getBaseURI());
+                schemas.add(s);
+            }
+        }
+        return schemas;
+    }
+
+ public XmlSchema loadSchema(String namespace, URL location) throws IOException, XmlSchemaException {
+        XmlSchema schema;
+ XmlSchema[] schemaList = collection.getXmlSchema(location.toExternalForm());
+        if (schemaList != null && schemaList.length > 0) {
+            schema = schemaList[0];
+        } else {
+            InputStream is = location.openStream();
+            schema = collection.read(new InputStreamReader(is), null);
+            is.close();
+        }
+ if (namespace != null && schema != null && !namespace.equals(schema.getTargetNamespace())) { + throw new XmlSchemaException(namespace + " != " + schema.getTargetNamespace());
+        }
+        return schema;
+    }
+
+ public XmlSchema loadSchema(String schemaLocation, ClassLoader classLoader) throws IOException, XmlSchemaException {
+        int index = schemaLocation.indexOf(' ');
+        if (index == -1) {
+ throw new XmlSchemaException("Invalid schemaLocation: " + schemaLocation);
+        }
+        String namespace = schemaLocation.substring(0, index).trim();
+        URL url;
+        URI uri;
+        try {
+            uri = new URI(schemaLocation.substring(index + 1).trim());
+        } catch (URISyntaxException e) {
+ throw new XmlSchemaException("Invalid schemaLocation: " + schemaLocation);
+        }
+        if (uri.isAbsolute()) {
+            url = uri.toURL();
+        } else {
+            url = classLoader.getResource(uri.toString());
+            if (url == null) {
+ throw new XmlSchemaException("Resource cannot be resolved: schemaLocation: " + schemaLocation);
+            }
+        }
+        return loadSchema(namespace, url);
+    }
+
+}

Propchange: incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/main/java/org/apache/tuscany/interfacedef/wsdl/introspect/DefaultXMLSchemaRegistry.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/main/java/org/apache/tuscany/interfacedef/wsdl/introspect/DefaultXMLSchemaRegistry.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/main/java/org/apache/tuscany/interfacedef/wsdl/introspect/InvalidWSDLException.java URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/main/java/org/apache/tuscany/interfacedef/wsdl/introspect/InvalidWSDLException.java?view=auto&rev=527397
==============================================================================
--- incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/main/java/org/apache/tuscany/interfacedef/wsdl/introspect/InvalidWSDLException.java (added) +++ incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/main/java/org/apache/tuscany/interfacedef/wsdl/introspect/InvalidWSDLException.java Tue Apr 10 23:26:26 2007
@@ -0,0 +1,35 @@
+/*
+ * 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.interfacedef.wsdl.introspect;
+
+import org.apache.tuscany.interfacedef.InvalidInterfaceException;
+
+/**
+ * An exception to indicate the WSDL definition is invalid
+ *
+ * @version $Rev$ $Date$
+ */
+public class InvalidWSDLException extends InvalidInterfaceException {
+    private static final long serialVersionUID = 3742887584293256519L;
+
+    public InvalidWSDLException(String message) {
+        super(message);
+    }
+}

Propchange: incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/main/java/org/apache/tuscany/interfacedef/wsdl/introspect/InvalidWSDLException.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/main/java/org/apache/tuscany/interfacedef/wsdl/introspect/InvalidWSDLException.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/main/java/org/apache/tuscany/interfacedef/wsdl/introspect/WSDLInterfaceIntrospector.java URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/main/java/org/apache/tuscany/interfacedef/wsdl/introspect/WSDLInterfaceIntrospector.java?view=auto&rev=527397
==============================================================================
--- incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/main/java/org/apache/tuscany/interfacedef/wsdl/introspect/WSDLInterfaceIntrospector.java (added) +++ incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/main/java/org/apache/tuscany/interfacedef/wsdl/introspect/WSDLInterfaceIntrospector.java Tue Apr 10 23:26:26 2007
@@ -0,0 +1,41 @@
+/*
+ * 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.interfacedef.wsdl.introspect;
+
+import javax.wsdl.PortType;
+
+import org.apache.tuscany.interfacedef.InvalidInterfaceException;
+import org.apache.tuscany.interfacedef.wsdl.WSDLInterface;
+
+/**
+ * Introspector for creating WSDLInterface definitions from WSDL PortTypes.
+ *
+ * @version $Rev$ $Date$
+ */
+public interface WSDLInterfaceIntrospector {
+
+    /**
+ * Introspect a WSDL portType and return a WSDL interface definition.
+     *
+     * @param type the portType to inspect
+     * @return a WSDLInterface corresponding to the WSDL portType
+     */
+ WSDLInterface introspect(PortType portType) throws InvalidInterfaceException;
+
+}

Propchange: incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/main/java/org/apache/tuscany/interfacedef/wsdl/introspect/WSDLInterfaceIntrospector.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/main/java/org/apache/tuscany/interfacedef/wsdl/introspect/WSDLInterfaceIntrospector.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/main/java/org/apache/tuscany/interfacedef/wsdl/introspect/WSDLOperation.java URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/main/java/org/apache/tuscany/interfacedef/wsdl/introspect/WSDLOperation.java?view=auto&rev=527397
==============================================================================
--- incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/main/java/org/apache/tuscany/interfacedef/wsdl/introspect/WSDLOperation.java (added) +++ incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/main/java/org/apache/tuscany/interfacedef/wsdl/introspect/WSDLOperation.java Tue Apr 10 23:26:26 2007
@@ -0,0 +1,517 @@
+/*
+ * 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.interfacedef.wsdl.introspect;
+
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.List;
+
+import javax.wsdl.Fault;
+import javax.wsdl.Input;
+import javax.wsdl.Message;
+import javax.wsdl.Output;
+import javax.wsdl.Part;
+import javax.xml.namespace.QName;
+
+import org.apache.tuscany.interfacedef.DataType;
+import org.apache.tuscany.interfacedef.InvalidInterfaceException;
+import org.apache.tuscany.interfacedef.Operation;
+import org.apache.tuscany.interfacedef.impl.DataTypeImpl;
+import org.apache.tuscany.interfacedef.impl.OperationImpl;
+import org.apache.tuscany.interfacedef.util.ElementInfo;
+import org.apache.tuscany.interfacedef.util.FaultException;
+import org.apache.tuscany.interfacedef.util.TypeInfo;
+import org.apache.tuscany.interfacedef.util.WrapperInfo;
+import org.apache.tuscany.interfacedef.util.XMLType;
+import org.apache.ws.commons.schema.XmlSchemaComplexType;
+import org.apache.ws.commons.schema.XmlSchemaElement;
+import org.apache.ws.commons.schema.XmlSchemaObject;
+import org.apache.ws.commons.schema.XmlSchemaObjectCollection;
+import org.apache.ws.commons.schema.XmlSchemaParticle;
+import org.apache.ws.commons.schema.XmlSchemaSequence;
+import org.apache.ws.commons.schema.XmlSchemaSimpleType;
+import org.apache.ws.commons.schema.XmlSchemaType;
+
+/**
+ * Metadata for a WSDL operation
+ * + * @version $Rev$ $Date$
+ */
+public class WSDLOperation {
+    protected XMLSchemaRegistry schemaRegistry;
+    protected javax.wsdl.Operation operation;
+    protected Operation operationModel;
+    protected DataType<List<DataType>> inputType;
+    protected DataType<XMLType> outputType;
+    protected List<DataType<XMLType>> faultTypes;
+    private String dataBinding;
+
+    /**
+     * @param operation The WSDL4J operation
+     * @param dataBinding The default databinding
+     * @param schemaRegistry The XML Schema registry
+     */
+ public WSDLOperation(javax.wsdl.Operation operation, String dataBinding, XMLSchemaRegistry schemaRegistry) {
+        super();
+        this.operation = operation;
+        this.dataBinding = dataBinding;
+        this.schemaRegistry = schemaRegistry;
+        this.wrapper = new Wrapper();
+    }
+
+    private Wrapper wrapper;
+
+    private Boolean wrapperStyle;
+
+    /**
+ * Test if the operation qualifies wrapper style as defined by the JAX-WS
+     * 2.0 spec
+ * + * @return true if the operation qualifies wrapper style, otherwise false
+     */
+    public boolean isWrapperStyle() throws InvalidWSDLException {
+        if (wrapperStyle == null) {
+            wrapperStyle =
+ wrapper.getInputChildElements() != null && (operation.getOutput() == null || wrapper
+                    .getOutputChildElements() != null);
+        }
+        return wrapperStyle;
+    }
+
+    public Wrapper getWrapper() throws InvalidInterfaceException {
+        if (!isWrapperStyle()) {
+ throw new IllegalStateException("The operation is not wrapper style.");
+        } else {
+            return wrapper;
+        }
+    }
+
+    /**
+     * @return
+     * @throws InvalidServiceContractException
+     */
+ public DataType<List<DataType>> getInputType() throws InvalidWSDLException {
+        if (inputType == null) {
+            Input input = operation.getInput();
+ Message message = (input == null) ? null : input.getMessage();
+            inputType = getMessageType(message);
+            inputType.setDataBinding("idl:input");
+        }
+        return inputType;
+    }
+
+    /**
+     * @return
+     * @throws NotSupportedWSDLException
+     */
+ public DataType<XMLType> getOutputType() throws InvalidWSDLException {
+        if (outputType == null) {
+            Output output = operation.getOutput();
+ Message outputMsg = (output == null) ? null : output.getMessage();
+
+ List outputParts = (outputMsg == null) ? null : outputMsg.getOrderedParts(null);
+            if (outputParts != null && outputParts.size() > 0) {
+                if (outputParts.size() > 1) {
+                    // We don't support output with multiple parts
+ throw new InvalidWSDLException("Multi-part output is not supported");
+                }
+                Part part = (Part)outputParts.get(0);
+ outputType = new WSDLPart(part, Object.class).getDataType(); + // outputType.setMetadata(WSDLOperation.class.getName(), this);
+            }
+        }
+        return outputType;
+    }
+
+    /**
+     * @return
+     * @throws NotSupportedWSDLException
+     */
+ public List<DataType<XMLType>> getFaultTypes() throws InvalidWSDLException {
+        if (faultTypes == null) {
+            Collection faults = operation.getFaults().values();
+            faultTypes = new ArrayList<DataType<XMLType>>();
+            for (Object f : faults) {
+                Fault fault = (Fault)f;
+                Message faultMsg = fault.getMessage();
+                List faultParts = faultMsg.getOrderedParts(null);
+                if (faultParts.size() != 1) {
+ throw new InvalidWSDLException("The fault message MUST have a single part");
+                }
+                Part part = (Part)faultParts.get(0);
+ WSDLPart wsdlPart = new WSDLPart(part, FaultException.class);
+                faultTypes.add(wsdlPart.getDataType());
+            }
+        }
+        return faultTypes;
+    }
+
+ private DataType<List<DataType>> getMessageType(Message message) throws InvalidWSDLException {
+        List<DataType> partTypes = new ArrayList<DataType>();
+        if (message != null) {
+            Collection parts = message.getOrderedParts(null);
+            for (Object p : parts) {
+                WSDLPart part = new WSDLPart((Part)p, Object.class);
+                DataType<XMLType> partType = part.getDataType();
+                partTypes.add(partType);
+            }
+        }
+ return new DataTypeImpl<List<DataType>>(dataBinding, Object[].class, partTypes);
+    }
+
+    /**
+     * @return
+     * @throws NotSupportedWSDLException
+     */
+    public Operation getOperation() throws InvalidInterfaceException {
+        if (operationModel == null) {
+            boolean oneway = (operation.getOutput() == null);
+            operationModel = new OperationImpl();
+            operationModel.setName(operation.getName());
+            operationModel.getFaultTypes().addAll(getFaultTypes());
+            operationModel.setNonBlocking(oneway);
+ operationModel.setConversationSequence(Operation.ConversationSequence.NO_CONVERSATION);
+            if (isWrapperStyle()) {
+                WrapperInfo wrapperInfo = getWrapper().getWrapperInfo();
+ operationModel.setInputType(wrapperInfo.getUnwrappedInputType()); + operationModel.setOutputType(wrapperInfo.getUnwrappedOutputType());
+            } else {
+                List<DataType> inputTypes = new ArrayList<DataType>();
+                inputTypes.add(getInputType());
+ DataType<List<DataType>> inputType = new DataTypeImpl<List<DataType>>("idl:unwrapped.input", Object[].class, + inputTypes);
+                operationModel.setInputType(inputType);
+                operationModel.setOutputType(getOutputType());
+            }
+        }
+        return operationModel;
+    }
+
+    /**
+     * Metadata for a WSDL part
+     */
+    public class WSDLPart {
+        private Part part;
+
+        private XmlSchemaElement element;
+
+        private DataType<XMLType> dataType;
+
+ public WSDLPart(Part part, Class javaType) throws InvalidWSDLException {
+            this.part = part;
+            QName elementName = part.getElementName();
+            if (elementName != null) {
+                element = schemaRegistry.getElement(elementName);
+                if (element == null) {
+ throw new InvalidWSDLException("Element cannot be resolved: " + elementName.toString());
+                }
+            } else {
+                // Create an faked XSD element to host the metadata
+                element = new XmlSchemaElement();
+                element.setName(part.getName());
+                element.setQName(new QName(null, part.getName()));
+                QName typeName = part.getTypeName();
+                if (typeName != null) {
+ XmlSchemaType type = schemaRegistry.getType(typeName);
+                    if (type == null) {
+ throw new InvalidWSDLException("Type cannot be resolved: " + typeName.toString());
+                    }
+                    element.setSchemaType(type);
+                    element.setSchemaTypeName(type.getQName());
+                }
+            }
+ dataType = new DataTypeImpl<XMLType>(dataBinding, javaType, new XMLType(getElementInfo(element)));
+            // dataType.setMetadata(WSDLPart.class.getName(), this);
+ // dataType.setMetadata(ElementInfo.class.getName(), getElementInfo(element));
+        }
+
+        /**
+         * @return the element
+         */
+        public XmlSchemaElement getElement() {
+            return element;
+        }
+
+        /**
+         * @return the part
+         */
+        public Part getPart() {
+            return part;
+        }
+
+        /**
+         * @return the dataType
+         */
+        public DataType<XMLType> getDataType() {
+            return dataType;
+        }
+    }
+
+    /**
+     * The "Wrapper Style" WSDL operation is defined by The Java API for
+ * XML-Based Web Services (JAX-WS) 2.0 specification, section 2.3.1.2 + * Wrapper Style. <p/> A WSDL operation qualifies for wrapper style mapping
+     * only if the following criteria are met:
+     * <ul>
+ * <li>(i) The operation�s input and output messages (if present) each
+     * contain only a single part
+ * <li>(ii) The input message part refers to a global element declaration
+     * whose localname is equal to the operation name
+ * <li>(iii) The output message part refers to a global element declaration + * <li>(iv) The elements referred to by the input and output message parts + * (henceforth referred to as wrapper elements) are both complex types
+     * defined using the xsd:sequence compositor
+ * <li>(v) The wrapper elements only contain child elements, they must not + * contain other structures such as wildcards (element or attribute), + * xsd:choice, substitution groups (element references are not permitted) or
+     * attributes; furthermore, they must not be nillable.
+     * </ul>
+     */
+    public class Wrapper {
+        private XmlSchemaElement inputWrapperElement;
+
+        private XmlSchemaElement outputWrapperElement;
+
+        private List<XmlSchemaElement> inputElements;
+
+        private List<XmlSchemaElement> outputElements;
+
+        private DataType<List<DataType<XMLType>>> unwrappedInputType;
+
+        private DataType<XMLType> unwrappedOutputType;
+
+        private transient WrapperInfo wrapperInfo;
+
+ private List<XmlSchemaElement> getChildElements(XmlSchemaElement element) throws InvalidWSDLException {
+            if (element == null) {
+                return null;
+            }
+            if (element.isNillable()) {
+                // Wrapper element cannot be nillable
+                return null;
+            }
+            XmlSchemaType type = element.getSchemaType();
+            if (type == null) {
+                String qName = element.getQName().toString();
+ throw new InvalidWSDLException("The XML schema element does not have a type: " + qName);
+            }
+            if (!(type instanceof XmlSchemaComplexType)) {
+                // Has to be a complexType
+                return null;
+            }
+ XmlSchemaComplexType complexType = (XmlSchemaComplexType)type; + if (complexType.getAttributes().getCount() != 0 || complexType.getAnyAttribute() != null) {
+                // No attributes
+                return null;
+            }
+            XmlSchemaParticle particle = complexType.getParticle();
+            if (particle == null) {
+                // No particle
+                return Collections.emptyList();
+            }
+            if (!(particle instanceof XmlSchemaSequence)) {
+                return null;
+            }
+ XmlSchemaSequence sequence = (XmlSchemaSequence)complexType.getParticle();
+            XmlSchemaObjectCollection items = sequence.getItems();
+ List<XmlSchemaElement> childElements = new ArrayList<XmlSchemaElement>();
+            for (int i = 0; i < items.getCount(); i++) {
+                XmlSchemaObject schemaObject = items.getItem(i);
+                if (!(schemaObject instanceof XmlSchemaElement)) {
+                    return null;
+                }
+ XmlSchemaElement childElement = (XmlSchemaElement)schemaObject; + if (childElement.getName() == null || childElement.getRefName() != null) {
+                    return null;
+                }
+                // TODO: Do we support maxOccurs >1 ?
+                if (childElement.getMaxOccurs() > 1) {
+                    return null;
+                }
+                childElements.add(childElement);
+            }
+            return childElements;
+        }
+
+        /**
+ * Return a list of child XSD elements under the wrapped request element + * + * @return a list of child XSD elements or null if if the request
+         *         element is not wrapped
+         */
+ public List<XmlSchemaElement> getInputChildElements() throws InvalidWSDLException {
+            if (inputElements != null) {
+                return inputElements;
+            }
+            Input input = operation.getInput();
+            if (input != null) {
+                Message inputMsg = input.getMessage();
+                Collection parts = inputMsg.getParts().values();
+                if (parts.size() != 1) {
+                    return null;
+                }
+                Part part = (Part)parts.iterator().next();
+                QName elementName = part.getElementName();
+                if (elementName == null) {
+                    return null;
+                }
+ if (!operation.getName().equals(elementName.getLocalPart())) {
+                    return null;
+                }
+ inputWrapperElement = schemaRegistry.getElement(elementName);
+                if (inputWrapperElement == null) {
+ throw new InvalidWSDLException("The element is not declared in a XML schema: " + elementName
+                        .toString());
+                }
+                inputElements = getChildElements(inputWrapperElement);
+                return inputElements;
+            } else {
+                return null;
+            }
+        }
+
+        /**
+ * Return a list of child XSD elements under the wrapped response
+         * element
+ * + * @return a list of child XSD elements or null if if the response
+         *         element is not wrapped
+         */
+ public List<XmlSchemaElement> getOutputChildElements() throws InvalidWSDLException {
+            if (outputElements != null) {
+                return outputElements;
+            }
+            Output output = operation.getOutput();
+            if (output != null) {
+                Message outputMsg = output.getMessage();
+                Collection parts = outputMsg.getParts().values();
+                if (parts.size() != 1) {
+                    return null;
+                }
+                Part part = (Part)parts.iterator().next();
+                QName elementName = part.getElementName();
+                if (elementName == null) {
+ throw new InvalidWSDLException("The element is not declared in the XML schema: " + part.getName());
+                }
+ outputWrapperElement = schemaRegistry.getElement(elementName);
+                if (outputWrapperElement == null) {
+                    return null;
+                }
+                outputElements = getChildElements(outputWrapperElement);
+                // FIXME: Do we support multiple child elements for the
+                // response?
+                return outputElements;
+            } else {
+                return null;
+            }
+        }
+
+        /**
+         * @return the inputWrapperElement
+         */
+        public XmlSchemaElement getInputWrapperElement() {
+            return inputWrapperElement;
+        }
+
+        /**
+         * @return the outputWrapperElement
+         */
+        public XmlSchemaElement getOutputWrapperElement() {
+            return outputWrapperElement;
+        }
+
+        /*
+ public DataType<List<DataType<XMLType>>> getUnwrappedInputType() throws InvalidWSDLException {
+            if (unwrappedInputType == null) {
+ List<DataType<XMLType>> childTypes = new ArrayList<DataType<XMLType>>(); + for (XmlSchemaElement element : getInputChildElements()) {
+                    DataType<XMLType> type =
+ new DataType<XMLType>(dataBinding, Object.class, new XMLType(getElementInfo(element))); + // type.setMetadata(ElementInfo.class.getName(), getElementInfo(element));
+                    childTypes.add(type);
+                }
+                unwrappedInputType =
+ new DataType<List<DataType<XMLType>>>("idl:unwrapped.input", Object[].class, childTypes);
+            }
+            return unwrappedInputType;
+        }
+
+ public DataType<XMLType> getUnwrappedOutputType() throws InvalidServiceContractException {
+            if (unwrappedOutputType == null) {
+ List<XmlSchemaElement> elements = getOutputChildElements();
+                if (elements != null && elements.size() > 0) {
+                    if (elements.size() > 1) {
+                        // We don't support output with multiple parts
+ throw new NotSupportedWSDLException("Multi-part output is not supported");
+                    }
+                    XmlSchemaElement element = elements.get(0);
+                    unwrappedOutputType =
+ new DataType<XMLType>(dataBinding, Object.class, new XMLType(getElementInfo(element))); + // unwrappedOutputType.setMetadata(ElementInfo.class.getName(), getElementInfo(element));
+                }
+            }
+            return unwrappedOutputType;
+        }
+        */
+
+ public WrapperInfo getWrapperInfo() throws InvalidWSDLException {
+            if (wrapperInfo == null) {
+ ElementInfo in = getElementInfo(getInputWrapperElement()); + ElementInfo out = getElementInfo(getOutputWrapperElement()); + List<ElementInfo> inChildren = new ArrayList<ElementInfo>();
+                for (XmlSchemaElement e : getInputChildElements()) {
+                    inChildren.add(getElementInfo(e));
+                }
+ List<ElementInfo> outChildren = new ArrayList<ElementInfo>();
+                if (out != null) {
+ for (XmlSchemaElement e : getOutputChildElements()) {
+                        outChildren.add(getElementInfo(e));
+                    }
+                }
+                wrapperInfo =
+ new WrapperInfo(dataBinding, in, out, inChildren, outChildren);
+            }
+            return wrapperInfo;
+        }
+    }
+
+ private static ElementInfo getElementInfo(XmlSchemaElement element) {
+        if (element == null) {
+            return null;
+        }
+ return new ElementInfo(element.getQName(), getTypeInfo(element.getSchemaType()));
+    }
+
+    private static TypeInfo getTypeInfo(XmlSchemaType type) {
+        if (type == null) {
+            return null;
+        }
+ XmlSchemaType baseType = (XmlSchemaType)type.getBaseSchemaType();
+        QName name = type.getQName();
+        boolean simple = (type instanceof XmlSchemaSimpleType);
+        if (baseType == null) {
+            return new TypeInfo(name, simple, null);
+        } else {
+            return new TypeInfo(name, simple, getTypeInfo(baseType));
+        }
+    }
+
+}

Propchange: incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/main/java/org/apache/tuscany/interfacedef/wsdl/introspect/WSDLOperation.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/main/java/org/apache/tuscany/interfacedef/wsdl/introspect/WSDLOperation.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/main/java/org/apache/tuscany/interfacedef/wsdl/introspect/XMLSchemaRegistry.java URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/main/java/org/apache/tuscany/interfacedef/wsdl/introspect/XMLSchemaRegistry.java?view=auto&rev=527397
==============================================================================
--- incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/main/java/org/apache/tuscany/interfacedef/wsdl/introspect/XMLSchemaRegistry.java (added) +++ incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/main/java/org/apache/tuscany/interfacedef/wsdl/introspect/XMLSchemaRegistry.java Tue Apr 10 23:26:26 2007
@@ -0,0 +1,87 @@
+/*
+ * 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.interfacedef.wsdl.introspect;
+
+import java.io.IOException;
+import java.net.URL;
+import java.util.List;
+
+import javax.wsdl.Definition;
+import javax.xml.namespace.QName;
+
+import org.apache.ws.commons.schema.XmlSchema;
+import org.apache.ws.commons.schema.XmlSchemaElement;
+import org.apache.ws.commons.schema.XmlSchemaException;
+import org.apache.ws.commons.schema.XmlSchemaType;
+
+/**
+ * A service for caching XML Schemas
+ *
+ * @version $Rev$ $Date$
+ */
+public interface XMLSchemaRegistry {
+    /**
+     * Load all inline schemas from the WSDL definition
+ * + * @param definition The WSDL defintion whose types element contains a list of schemas
+     * @return A list of inline schemas
+     */
+    List<XmlSchema> loadSchemas(Definition definition);
+    +    /**
+     * Loads and registers a XML schema.
+     *
+ * @param namespace the expected namespace, or null if any namespace should be allowed
+     * @param location  the location to load the schema from
+     * @return the loaded Definition
+     * @throws IOException   if there was a problem reading the document
+ * @throws XmlSchemaException if there was a problem parsing the schema
+     */
+ XmlSchema loadSchema(String namespace, URL location) throws IOException, XmlSchemaException;
+
+    /**
+ * Load and register a XML schema as specified in a XSD schemaLocation attribute.
+     *
+     * @param schemaLocation the value of the schemaLocation attribute
+ * @param classLoader application classloader used to support relative locations
+     * @return the loaded schema
+     * @throws IOException   if there was a problem reading the document
+ * @throws XmlSchemaException if there was a problem parsing the schema
+     */
+ XmlSchema loadSchema(String schemaLocation, ClassLoader classLoader) throws IOException, XmlSchemaException;
+
+    /**
+ * Returns the XSD Element with the supplied qualified name, or null if no such element has been defined.
+     *
+     * @param name the qualified name of the XSD element
+ * @return the XSD element for the supplied name, or null if none has been defined
+     */
+    XmlSchemaElement getElement(QName name);
+
+    /**
+ * Returns the XmlSchemaType with the supplied qualified name, or null if no such type has been defined.
+     *
+     * @param name the qualified name of the XSD type
+ * @return the XSD type for the supplied name, or null if none has been defined
+     */
+    XmlSchemaType getType(QName name);
+
+
+
+}

Propchange: incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/main/java/org/apache/tuscany/interfacedef/wsdl/introspect/XMLSchemaRegistry.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/main/java/org/apache/tuscany/interfacedef/wsdl/introspect/XMLSchemaRegistry.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/main/java/org/apache/tuscany/interfacedef/wsdl/xml/WSDLInterfaceProcessor.java URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/main/java/org/apache/tuscany/interfacedef/wsdl/xml/WSDLInterfaceProcessor.java?view=diff&rev=527397&r1=527396&r2=527397
==============================================================================
--- incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/main/java/org/apache/tuscany/interfacedef/wsdl/xml/WSDLInterfaceProcessor.java (original) +++ incubator/tuscany/java/sca/modules/interface-wsdl-xml/src/main/java/org/apache/tuscany/interfacedef/wsdl/xml/WSDLInterfaceProcessor.java Tue Apr 10 23:26:26 2007
@@ -28,11 +28,15 @@
 import javax.xml.stream.XMLStreamWriter;
 import org.apache.tuscany.assembly.xml.Constants;
+import org.apache.tuscany.interfacedef.InvalidInterfaceException;
 import org.apache.tuscany.interfacedef.wsdl.WSDLDefinition;
 import org.apache.tuscany.interfacedef.wsdl.WSDLFactory;
 import org.apache.tuscany.interfacedef.wsdl.WSDLInterface;
 import org.apache.tuscany.interfacedef.wsdl.WSDLInterfaceContract;
 import org.apache.tuscany.interfacedef.wsdl.impl.DefaultWSDLFactory;
+import org.apache.tuscany.interfacedef.wsdl.introspect.DefaultWSDLInterfaceIntrospector; +import org.apache.tuscany.interfacedef.wsdl.introspect.DefaultXMLSchemaRegistry; +import org.apache.tuscany.interfacedef.wsdl.introspect.WSDLInterfaceIntrospector;
 import org.apache.tuscany.services.spi.contribution.ArtifactResolver;
import org.apache.tuscany.services.spi.contribution.ContributionReadException; import org.apache.tuscany.services.spi.contribution.ContributionResolveException;
@@ -43,13 +47,15 @@
public class WSDLInterfaceProcessor implements StAXArtifactProcessor<WSDLInterfaceContract>, WSDLConstants {
 private WSDLFactory wsdlFactory;
+    private WSDLInterfaceIntrospector wsdlIntrospector;
 -    public WSDLInterfaceProcessor(WSDLFactory wsdlFactory) {
+ public WSDLInterfaceProcessor(WSDLFactory wsdlFactory, WSDLInterfaceIntrospector wsdlIntrospector) {
         this.wsdlFactory = wsdlFactory;
+        this.wsdlIntrospector = wsdlIntrospector;
     }
     public WSDLInterfaceProcessor() {
-        this(new DefaultWSDLFactory());
+ this(new DefaultWSDLFactory(), new DefaultWSDLInterfaceIntrospector(new DefaultXMLSchemaRegistry()));
     }
 /**
@@ -143,7 +149,7 @@
         }
     }
- private WSDLInterface resolveWSDLInterface(WSDLInterface wsdlInterface, ArtifactResolver resolver) { + private WSDLInterface resolveWSDLInterface(WSDLInterface wsdlInterface, ArtifactResolver resolver) throws ContributionResolveException {
         if (wsdlInterface != null && wsdlInterface.isUnresolved()) {
 @@ -160,15 +166,13 @@
PortType portType = wsdlDefinition.getDefinition().getPortType(wsdlInterface.getName());
                     if (portType != null) {
- // Add the resolved WSDL interface to the resolver
-                        // so that it's found next time
-                        wsdlInterface.setPortType(portType);
- - // Introspect the WSDL portType and populate the interface and
-                        // operations
-                        //FIXME
- - wsdlInterface.setUnresolved(false); + // Introspect the WSDL portType and add the resulting
+                        // WSDLInterface to the resolver
+                        try {
+ wsdlInterface = wsdlIntrospector.introspect(portType);
+                        } catch (InvalidInterfaceException e) {
+                            throw new ContributionResolveException(e);
+                        }
                         resolver.add(wsdlInterface);
                     }
                 }

Modified: incubator/tuscany/java/sca/modules/interface-wsdl/pom.xml
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface-wsdl/pom.xml?view=diff&rev=527397&r1=527396&r2=527397
==============================================================================
--- incubator/tuscany/java/sca/modules/interface-wsdl/pom.xml (original)
+++ incubator/tuscany/java/sca/modules/interface-wsdl/pom.xml Tue Apr 10 23:26:26 2007
@@ -34,6 +34,12 @@
             <artifactId>tuscany-interface</artifactId>
             <version>1.0-incubating-SNAPSHOT</version>
         </dependency>
+        +        <dependency>
+            <groupId>org.apache.ws.commons.schema</groupId>
+            <artifactId>XmlSchema</artifactId>
+            <version>1.2</version>
+        </dependency>
 <dependency>
              <groupId>wsdl4j</groupId>

Modified: incubator/tuscany/java/sca/modules/interface/src/main/java/org/apache/tuscany/interfacedef/util/WrapperInfo.java URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface/src/main/java/org/apache/tuscany/interfacedef/util/WrapperInfo.java?view=diff&rev=527397&r1=527396&r2=527397
==============================================================================
--- incubator/tuscany/java/sca/modules/interface/src/main/java/org/apache/tuscany/interfacedef/util/WrapperInfo.java (original) +++ incubator/tuscany/java/sca/modules/interface/src/main/java/org/apache/tuscany/interfacedef/util/WrapperInfo.java Tue Apr 10 23:26:26 2007
@@ -56,7 +56,7 @@
 private List<ElementInfo> outputChildElements;
 -    private DataType<List<DataType<XMLType>>> unwrappedInputType;
+    private DataType<List<DataType>> unwrappedInputType;
 private DataType<XMLType> unwrappedOutputType;
 @@ -106,14 +106,14 @@
     /**
      * @return the unwrappedInputType
      */
-    public DataType<List<DataType<XMLType>>> getUnwrappedInputType() {
+    public DataType<List<DataType>> getUnwrappedInputType() {
         if (unwrappedInputType == null) {
- List<DataType<XMLType>> childTypes = new ArrayList<DataType<XMLType>>();
+            List<DataType> childTypes = new ArrayList<DataType>();
             for (ElementInfo element : getInputChildElements()) {
DataType<XMLType> type = new DataTypeImpl<XMLType>(dataBinding, Object.class, new XMLType(element));
                 childTypes.add(type);
             }
- unwrappedInputType = new DataTypeImpl<List<DataType<XMLType>>>("idl:unwrapped.input", Object[].class, + unwrappedInputType = new DataTypeImpl<List<DataType>>("idl:unwrapped.input", Object[].class,

childTypes);
         }
         return unwrappedInputType;
@@ -122,7 +122,7 @@
     /**
      * @return the unwrappedOutputType
      */
-    public DataType<XMLType> getUnwrappedOutputType() {
+    public DataType getUnwrappedOutputType() {
         if (unwrappedOutputType == null) {
             List<ElementInfo> elements = getOutputChildElements();
             if (elements != null && elements.size() > 0) {



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]





--
Jean-Sebastien


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to