Author: slaws
Date: Fri Sep  9 14:24:17 2011
New Revision: 1167202

URL: http://svn.apache.org/viewvc?rev=1167202&view=rev
Log:
TUSCANY-3916 - Replace WSDL representation of interface contract with an 
internal representation for passing via the registry. Still not particularly 
happy with this but I have more confidence that it will work reliably when 
compared to serializing/deserializing WSDL. It would be preferable I think to 
represent the interface contract more generally as artifacts in the domain 
registry but that's for another day. 

Added:
    
tuscany/sca-java-2.x/trunk/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/InterfaceContractProcessor.java
    
tuscany/sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/interfacedef/impl/TuscanyInterfaceContractImpl.java
    
tuscany/sca-java-2.x/trunk/testing/itest/interface-matching/src/test/java/org/apache/tuscany/sca/itest/interfaces/InterfaceWriteTestCase.java
Modified:
    tuscany/sca-java-2.x/trunk/modules/assembly-xml/META-INF/MANIFEST.MF
    
tuscany/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/RuntimeEndpointImpl.java
    
tuscany/sca-java-2.x/trunk/testing/itest/interface-matching/src/main/java/org/apache/tuscany/sca/itest/interfaces/ServiceMissmatchComponent.java
    
tuscany/sca-java-2.x/trunk/testing/itest/interface-matching/src/main/java/org/apache/tuscany/sca/itest/interfaces/ServiceMissmatchComponentImpl.java
    
tuscany/sca-java-2.x/trunk/testing/itest/interface-matching/src/test/java/org/apache/tuscany/sca/itest/interfaces/InerfaceMissmatchTestCase.java

Modified: tuscany/sca-java-2.x/trunk/modules/assembly-xml/META-INF/MANIFEST.MF
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/assembly-xml/META-INF/MANIFEST.MF?rev=1167202&r1=1167201&r2=1167202&view=diff
==============================================================================
--- tuscany/sca-java-2.x/trunk/modules/assembly-xml/META-INF/MANIFEST.MF 
(original)
+++ tuscany/sca-java-2.x/trunk/modules/assembly-xml/META-INF/MANIFEST.MF Fri 
Sep  9 14:24:17 2011
@@ -61,6 +61,7 @@ Import-Package: javax.xml.namespace,
  org.apache.tuscany.sca.extensibility;version="2.0.0",
  org.apache.tuscany.sca.interfacedef;version="2.0.0",
  org.apache.tuscany.sca.interfacedef.impl;version="2.0.0",
+ org.apache.tuscany.sca.interfacedef.util;version="2.0.0",
  org.apache.tuscany.sca.monitor;version="2.0.0",
  org.apache.tuscany.sca.policy;version="2.0.0",
  org.apache.tuscany.sca.xsd;version="2.0.0",

Added: 
tuscany/sca-java-2.x/trunk/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/InterfaceContractProcessor.java
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/InterfaceContractProcessor.java?rev=1167202&view=auto
==============================================================================
--- 
tuscany/sca-java-2.x/trunk/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/InterfaceContractProcessor.java
 (added)
+++ 
tuscany/sca-java-2.x/trunk/modules/assembly-xml/src/main/java/org/apache/tuscany/sca/assembly/xml/InterfaceContractProcessor.java
 Fri Sep  9 14:24:17 2011
@@ -0,0 +1,370 @@
+/*
+ * 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.assembly.xml;
+
+import static javax.xml.stream.XMLStreamConstants.END_ELEMENT;
+import static javax.xml.stream.XMLStreamConstants.START_ELEMENT;
+
+import java.io.IOException;
+import java.io.PrintStream;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.xml.namespace.QName;
+import javax.xml.stream.XMLStreamConstants;
+import javax.xml.stream.XMLStreamException;
+import javax.xml.stream.XMLStreamReader;
+import javax.xml.stream.XMLStreamWriter;
+
+import org.apache.tuscany.sca.contribution.processor.ContributionReadException;
+import 
org.apache.tuscany.sca.contribution.processor.ContributionResolveException;
+import 
org.apache.tuscany.sca.contribution.processor.ContributionWriteException;
+import org.apache.tuscany.sca.contribution.processor.ProcessorContext;
+import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor;
+import org.apache.tuscany.sca.contribution.resolver.ModelResolver;
+import org.apache.tuscany.sca.core.ExtensionPointRegistry;
+import org.apache.tuscany.sca.core.FactoryExtensionPoint;
+import org.apache.tuscany.sca.interfacedef.DataType;
+import org.apache.tuscany.sca.interfacedef.Interface;
+import org.apache.tuscany.sca.interfacedef.InterfaceContract;
+import org.apache.tuscany.sca.interfacedef.Operation;
+import org.apache.tuscany.sca.interfacedef.impl.DataTypeImpl;
+import org.apache.tuscany.sca.interfacedef.impl.InterfaceImpl;
+import org.apache.tuscany.sca.interfacedef.impl.OperationImpl;
+import org.apache.tuscany.sca.interfacedef.impl.TuscanyInterfaceContractImpl;
+import org.apache.tuscany.sca.interfacedef.util.XMLType;
+
+/**
+ * Processor for reading/writing the Tuscany interface model in order to 
+ * support distributed interface matching
+ *
+ */
+public class InterfaceContractProcessor extends BaseAssemblyProcessor 
implements StAXArtifactProcessor<InterfaceContract>, Constants{
+    
+    String INTERFACE_CONTRACT = "interfaceContract";
+    QName INTERFACE_CONTRACT_QNAME = new QName(SCA11_TUSCANY_NS, 
INTERFACE_CONTRACT);
+    String INTERFACE = "interface";
+    QName INTERFACE_QNAME = new QName(SCA11_TUSCANY_NS, INTERFACE);
+    String CALLBACK_INTERFACE = "callbackInterface";
+    QName CALLBACK_INTERFACE_QNAME = new QName(SCA11_TUSCANY_NS, 
CALLBACK_INTERFACE);
+    String OPERATION = "operation";
+    QName OPERATION_QNAME = new QName(SCA11_TUSCANY_NS, OPERATION);
+    String INPUT = "input"; 
+    QName INPUT_QNAME = new QName(SCA11_TUSCANY_NS, INPUT);
+    String OUTPUT = "output";
+    QName OUTPUT_QNAME = new QName(SCA11_TUSCANY_NS, OUTPUT);
+    String FAULT = "fault";
+    QName FAULT_QNAME = new QName(SCA11_TUSCANY_NS, FAULT);
+    String DATATYPE = "dataType";
+    QName DATATYPE_QNAME = new QName(SCA11_TUSCANY_NS, DATATYPE);
+    String GENERIC = "generic";
+    QName GENERIC_QNAME = new QName(SCA11_TUSCANY_NS, GENERIC);
+    String LOGICAL_COLLECTION = "logicalCollection";
+    QName LOGICAL_COLLECTION_QNAME = new QName(SCA11_TUSCANY_NS, 
LOGICAL_COLLECTION);
+    String LOGICAL_XMLTYPE = "logicalXMLType";
+    QName LOGICAL_XMLTYPE_QNAME = new QName(SCA11_TUSCANY_NS, LOGICAL_XMLTYPE);
+    String LOGICAL_TYPE = "logicalType";
+    QName LOGICAL_TYPE_QNAME = new QName(SCA11_TUSCANY_NS, LOGICAL_TYPE);
+    String PHYSICAL = "physical";
+    QName PHYSICAL_QNAME = new QName(SCA11_TUSCANY_NS, PHYSICAL);
+    String XMLTYPE = "xmlType";
+    QName XMLTYPE_QNAME = new QName(SCA11_TUSCANY_NS, XMLTYPE);
+    
+    String NO_TYPE = "NoType";
+    
+    enum Iof {
+        UNSET,
+        INPUT,
+        OUTPUT,
+        FAULT
+    }
+    
+    enum CharacterTarget {
+        UNSET,
+        GENERIC,
+        PHYSICAL,
+        XMLTYPE
+    }
+    
+    public InterfaceContractProcessor(ExtensionPointRegistry registry) {
+        super(registry.getExtensionPoint(FactoryExtensionPoint.class), 
+              null 
/*registry.getExtensionPoint(StAXArtifactProcessor.class)*/);
+    }
+
+    public InterfaceContract read(XMLStreamReader reader, ProcessorContext 
context) throws ContributionReadException, XMLStreamException {
+        
+        TuscanyInterfaceContractImpl interfaceContract = new 
TuscanyInterfaceContractImpl();
+        
+        try {
+            InterfaceImpl iface = null;
+            QName name = null;
+            Operation operation = null;
+            List<DataType> inputs = null;
+            List<DataType> outputs = null;
+            List<DataType> faults = null;
+            XMLType logicalXMLType = null;
+            
+            Iof iof = Iof.UNSET;
+            CharacterTarget characterTarget = CharacterTarget.UNSET;
+            
+            boolean logicalCollection = false;            
+          
+            DataType dataType = null;
+            
+            while (reader.hasNext()) {
+                int event = reader.getEventType();
+                
+                switch (event) {
+                    case START_ELEMENT:
+                        name = reader.getName();
+                        if (INTERFACE_CONTRACT_QNAME.equals(name)){
+                        } else if (INTERFACE_QNAME.equals(name)){
+                            iface = new InterfaceImpl();
+                            interfaceContract.setInterface(iface);
+                            iface.setRemotable(getBoolean(reader, 
"isRemotable"));
+                        } else if (CALLBACK_INTERFACE_QNAME.equals(name)){
+                            iface = new InterfaceImpl();
+                            interfaceContract.setCallbackInterface(iface);
+                            iface.setRemotable(getBoolean(reader, 
"isRemotable"));
+                        } else if (OPERATION_QNAME.equals(name)) {
+                            operation = new OperationImpl();
+                            iface.getOperations().add(operation);
+                            
+                            operation.setName(getString(reader, "name"));
+                            operation.setDynamic(getBoolean(reader, 
"isDynamic"));
+                            operation.setNonBlocking(getBoolean(reader, 
"isNonBlocking"));
+                            operation.setWrapperStyle(getBoolean(reader, 
"isWrapperStyle"));
+                            
+                            inputs = new ArrayList<DataType>();
+                            DataType inputType = new 
DataTypeImpl<List<DataType>>(null, null);
+                            inputType.setLogical(inputs);
+                            operation.setInputType(inputType);
+                            
+                            outputs = new ArrayList<DataType>();
+                            DataType outputType = new 
DataTypeImpl<List<DataType>>(null, null);
+                            outputType.setLogical(outputs);
+                            operation.setOutputType(outputType);
+                            
+                            faults = new ArrayList<DataType>();
+                            operation.setFaultTypes(faults);
+                        } else if (INPUT_QNAME.equals(name)) {
+                            iof = Iof.INPUT;
+                        } else if (OUTPUT_QNAME.equals(name)) {
+                            iof = Iof.OUTPUT;
+                        } else if (FAULT_QNAME.equals(name)) {
+                            iof = Iof.FAULT;
+                        } else if (DATATYPE_QNAME.equals(name)){
+                            DataType newDataType = new 
DataTypeImpl<XMLType>(null, null);
+                            newDataType.setDataBinding(getString(reader, 
"dataBinding"));
+                            if (logicalCollection) {
+                                dataType.setLogical(newDataType);
+                                dataType = newDataType;
+                            } else if (iof == Iof.INPUT) {
+                                inputs.add(newDataType);
+                                dataType = newDataType;
+                            } else if (iof == Iof.OUTPUT){
+                                outputs.add(newDataType);
+                                dataType = newDataType;
+                            } else if (iof == Iof.FAULT){
+                                faults.add(newDataType);
+                                dataType = newDataType;
+                            } 
+                        } else if (GENERIC_QNAME.equals(name)){
+                            characterTarget = CharacterTarget.GENERIC;
+                        } else if (PHYSICAL_QNAME.equals(name)){
+                            characterTarget = CharacterTarget.PHYSICAL;
+                        } else if (LOGICAL_COLLECTION_QNAME.equals(name)){
+                            logicalCollection = true;
+                        } else if (LOGICAL_XMLTYPE_QNAME.equals(name)){
+                            characterTarget = CharacterTarget.XMLTYPE;
+                            logicalXMLType = new XMLType(null, null);
+                            dataType.setLogical(logicalXMLType);
+                        } else if (LOGICAL_TYPE_QNAME.equals(name)){
+                            // is this ever used?
+                        } else if (XMLTYPE_QNAME.equals(name)){
+                            // is this ever used?
+                        } else {
+                            System.out.println("Unexpected element " + name);
+                        }
+                        break;
+                    case XMLStreamConstants.CHARACTERS:
+                        if (characterTarget == CharacterTarget.GENERIC){
+                            String generic = reader.getText();
+                            // Not sure what to do with this as we may not 
have the actual type
+                        } else if (characterTarget == 
CharacterTarget.PHYSICAL){
+                            String physical = reader.getText();
+                            // Not sure what to do with this as we may not 
have the actual type
+                        } else if (characterTarget == CharacterTarget.XMLTYPE) 
{
+                            String xmlType = reader.getText();
+                            if (!xmlType.equals(NO_TYPE)){
+                                int splitPoint = xmlType.indexOf("}");
+                                String namespace = xmlType.substring(1, 
splitPoint);
+                                String localname = 
xmlType.substring(splitPoint + 1);
+                                QName typeName = new QName(namespace, 
localname);
+                                logicalXMLType.setTypeName(typeName);
+                            }
+                        }
+                        characterTarget = CharacterTarget.UNSET;
+                        break;
+                    case END_ELEMENT:
+                        name = reader.getName();
+                        if (INPUT_QNAME.equals(name) ||
+                            OUTPUT_QNAME.equals(name) ||
+                            FAULT_QNAME.equals(name)) {
+                            iof = Iof.UNSET;
+                        } else if (LOGICAL_COLLECTION_QNAME.equals(name)) {
+                            logicalCollection = false;
+                        }
+                }
+    
+                // Read the next element
+                if (reader.hasNext()) {
+                    reader.next();
+                }
+            }
+        } catch (XMLStreamException e) {
+            ContributionReadException ex = new ContributionReadException(e);
+            //error(monitor, "XMLStreamException", reader, ex);
+        }                    
+        
+        return interfaceContract;
+    }
+
+    public void write(InterfaceContract interfaceContract, XMLStreamWriter 
writer, ProcessorContext context)
+        throws ContributionWriteException, XMLStreamException {
+
+        if (interfaceContract == null || interfaceContract.getInterface() == 
null) {
+            return;
+        }
+        
+        writer.writeStartElement(Constants.SCA11_TUSCANY_NS, 
INTERFACE_CONTRACT);
+        writer.writeStartElement(Constants.SCA11_TUSCANY_NS, INTERFACE);
+        writeInterface(interfaceContract.getInterface(), writer, context);
+        
+        if (interfaceContract.getCallbackInterface() != null){
+            writer.writeStartElement(Constants.SCA11_TUSCANY_NS, 
CALLBACK_INTERFACE);
+            writeInterface(interfaceContract.getCallbackInterface(), writer, 
context);
+        }
+        writer.writeEndElement();
+
+    }
+
+    private void writeInterface(Interface iface, XMLStreamWriter writer, 
ProcessorContext context) throws XMLStreamException {
+
+        
+        writer.writeAttribute("isRemotable", 
String.valueOf(iface.isRemotable()));
+       
+        for (Operation operation : iface.getOperations()){
+            writer.writeStartElement(Constants.SCA11_TUSCANY_NS, OPERATION);
+            writer.writeAttribute("name", operation.getName());
+            writer.writeAttribute("isDynamic", 
String.valueOf(operation.isDynamic()));
+            writer.writeAttribute("isNonBlocking", 
String.valueOf(operation.isNonBlocking()));
+            writer.writeAttribute("isWrapperStyle", 
String.valueOf(operation.isWrapperStyle()));
+
+            List<DataType> outputTypes = 
operation.getOutputType().getLogical();
+            List<DataType> inputTypes = operation.getInputType().getLogical();
+            List<DataType> faultTypes = operation.getFaultTypes();
+
+            if (operation.isWrapperStyle() && operation.getWrapper() != null) {
+                inputTypes = 
operation.getWrapper().getUnwrappedInputType().getLogical();
+                outputTypes = 
operation.getWrapper().getUnwrappedOutputType().getLogical();
+            }
+          
+            writer.writeStartElement(Constants.SCA11_TUSCANY_NS, INPUT);
+            writeDataTypes(inputTypes, writer);
+            writer.writeEndElement();
+            
+            writer.writeStartElement(Constants.SCA11_TUSCANY_NS, OUTPUT);
+            writeDataTypes(outputTypes, writer);
+            writer.writeEndElement();
+            
+            writer.writeStartElement(Constants.SCA11_TUSCANY_NS, FAULT);
+            writeDataTypes(faultTypes, writer);
+            writer.writeEndElement();
+
+            writer.writeEndElement(); 
+        }
+        writer.writeEndElement();        
+    }
+    
+    private void writeDataTypes(List<DataType> dataTypes, XMLStreamWriter 
writer) throws XMLStreamException {
+        for(DataType dataType : dataTypes){
+            writeDataType(dataType, writer);
+        }
+    }
+    
+    private void writeDataType(DataType<?> dataType, XMLStreamWriter writer)  
throws XMLStreamException {
+        writer.writeStartElement(Constants.SCA11_TUSCANY_NS, DATATYPE);
+        if (dataType.getDataBinding() != null){
+            writer.writeAttribute("dataBinding", dataType.getDataBinding());
+        }
+       
+        if (dataType.getGenericType() != null){
+            writer.writeStartElement(Constants.SCA11_TUSCANY_NS, GENERIC);
+            writer.writeCharacters(dataType.getGenericType().toString());
+            writer.writeEndElement();  
+        }
+        
+        if (dataType.getLogical() instanceof DataType){
+            writer.writeStartElement(Constants.SCA11_TUSCANY_NS, 
LOGICAL_COLLECTION);
+            writeDataType((DataType<?>)dataType.getLogical(), writer);
+        } else if (dataType.getLogical() instanceof XMLType){
+            writer.writeStartElement(Constants.SCA11_TUSCANY_NS, 
LOGICAL_XMLTYPE);
+            writer.writeStartElement(Constants.SCA11_TUSCANY_NS, XMLTYPE);
+            XMLType xmlType = (XMLType)dataType.getLogical();
+            if (xmlType.getTypeName() != null){
+                writer.writeCharacters(xmlType.getTypeName().toString());
+            } else {
+                writer.writeCharacters("NoType");
+            }
+            writer.writeEndElement();  
+        } else {
+            writer.writeStartElement(Constants.SCA11_TUSCANY_NS, LOGICAL_TYPE);
+            writer.writeCharacters(dataType.getLogical().toString());
+        }
+        writer.writeEndElement();
+       
+        if (dataType.getPhysical() != null){
+            writer.writeStartElement(Constants.SCA11_TUSCANY_NS, PHYSICAL);
+            writer.writeCharacters(dataType.getPhysical().getName());
+            writer.writeEndElement();
+        }
+        
+        writer.writeEndElement();
+
+    }
+
+    public void resolve(InterfaceContract interfaceContract, ModelResolver 
resolver, ProcessorContext context)
+        throws ContributionResolveException {
+        // do nothing
+    }
+
+    public QName getArtifactType() {
+        // these internal interface contracts aren't found in the composite 
file
+        return null;
+    }
+
+    public Class<InterfaceContract> getModelType() {
+        return InterfaceContract.class;
+    }
+
+}
+
+

Added: 
tuscany/sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/interfacedef/impl/TuscanyInterfaceContractImpl.java
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/interfacedef/impl/TuscanyInterfaceContractImpl.java?rev=1167202&view=auto
==============================================================================
--- 
tuscany/sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/interfacedef/impl/TuscanyInterfaceContractImpl.java
 (added)
+++ 
tuscany/sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/interfacedef/impl/TuscanyInterfaceContractImpl.java
 Fri Sep  9 14:24:17 2011
@@ -0,0 +1,38 @@
+/*
+ * 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.interfacedef.impl;
+
+
+/**
+ * Represents a Java interface contract.
+ * 
+ * @version $Rev: 1149451 $ $Date: 2011-07-22 05:12:56 +0100 (Fri, 22 Jul 
2011) $
+ */
+public class TuscanyInterfaceContractImpl extends InterfaceContractImpl {
+    
+    
+    public TuscanyInterfaceContractImpl() {
+    }
+
+    @Override
+    public TuscanyInterfaceContractImpl clone() throws 
CloneNotSupportedException {
+        return (TuscanyInterfaceContractImpl) super.clone();
+    }
+
+}

Modified: 
tuscany/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/RuntimeEndpointImpl.java
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/RuntimeEndpointImpl.java?rev=1167202&r1=1167201&r2=1167202&view=diff
==============================================================================
--- 
tuscany/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/RuntimeEndpointImpl.java
 (original)
+++ 
tuscany/sca-java-2.x/trunk/modules/core/src/main/java/org/apache/tuscany/sca/core/assembly/impl/RuntimeEndpointImpl.java
 Fri Sep  9 14:24:17 2011
@@ -19,6 +19,7 @@
 
 package org.apache.tuscany.sca.core.assembly.impl;
 
+import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.Externalizable;
 import java.io.IOException;
@@ -38,8 +39,11 @@ import javax.wsdl.WSDLException;
 import javax.wsdl.factory.WSDLFactory;
 import javax.wsdl.xml.WSDLWriter;
 import javax.xml.namespace.QName;
+import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.XMLOutputFactory;
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamReader;
+import javax.xml.stream.XMLStreamWriter;
 import javax.xml.transform.stream.StreamSource;
 
 import org.apache.tuscany.sca.assembly.AssemblyFactory;
@@ -58,6 +62,7 @@ import org.apache.tuscany.sca.assembly.b
 import org.apache.tuscany.sca.assembly.builder.BuilderContext;
 import org.apache.tuscany.sca.assembly.builder.BuilderExtensionPoint;
 import org.apache.tuscany.sca.assembly.impl.EndpointImpl;
+import org.apache.tuscany.sca.assembly.xml.InterfaceContractProcessor;
 import org.apache.tuscany.sca.context.CompositeContext;
 import org.apache.tuscany.sca.contribution.processor.ContributionReadException;
 import org.apache.tuscany.sca.contribution.processor.ProcessorContext;
@@ -147,8 +152,7 @@ public class RuntimeEndpointImpl extends
     private transient ServiceBindingProvider bindingProvider;
     private transient List<PolicyProvider> policyProviders;
     private String xml;
-    private String wsdl;
-    private String wsdlCallback;
+    private String interfaceContractXML;
 
     protected InterfaceContract bindingInterfaceContract;
     protected InterfaceContract serviceInterfaceContract;
@@ -1022,8 +1026,10 @@ public class RuntimeEndpointImpl extends
     public void readExternal(ObjectInput in) throws IOException, 
ClassNotFoundException {
         this.uri = in.readUTF();
         this.xml = in.readUTF();       
-        this.wsdl = in.readUTF();
+        this.interfaceContractXML = in.readUTF();
+/*        
         this.wsdlCallback = in.readUTF();
+*/        
 
     }
 
@@ -1038,16 +1044,11 @@ public class RuntimeEndpointImpl extends
                 throw new IllegalStateException("No serializer is configured");
             }
         }
-              
-        if (wsdl == null) {
-            wsdl = getWsdl();
-        }
-        out.writeUTF(wsdl);
         
-        if (wsdlCallback == null) {
-            wsdlCallback = getWsdlCallback();
+        if (interfaceContractXML == null) {
+            interfaceContractXML = getXMLFromTuscanyInterfaceContract();
         }
-        out.writeUTF(wsdlCallback);        
+        out.writeUTF(interfaceContractXML);
     }
     
     public String getAsXML() {
@@ -1057,6 +1058,44 @@ public class RuntimeEndpointImpl extends
         return xml;
     }
     
+    private String getXMLFromTuscanyInterfaceContract() throws IOException{
+        String interfaceContract = null;
+        try {
+            InterfaceContractProcessor processor = new 
InterfaceContractProcessor(registry);
+            ProcessorContext context = new ProcessorContext();
+            FactoryExtensionPoint modelFactories = 
registry.getExtensionPoint(FactoryExtensionPoint.class);
+            ByteArrayOutputStream bos = new ByteArrayOutputStream();
+            XMLOutputFactory outputFactory = 
modelFactories.getFactory(XMLOutputFactory.class);
+            XMLStreamWriter writer = outputFactory.createXMLStreamWriter(bos);
+            processor.write(getComponentServiceInterfaceContract(), writer, 
context);
+            writer.close();
+            interfaceContract = bos.toString();
+        } catch (Exception ex){
+            throw new IOException(ex);
+        }
+        //System.out.println("Generated IC XML: " + interfaceContract);
+        return interfaceContract;
+    }
+    
+    private InterfaceContract getTuscanyInterfaceContractFromXML() {  
+        InterfaceContract interfaceContract = null;
+        //System.out.println("Reading IC XML: " + interfaceContractXML);
+        if (interfaceContractXML != null && interfaceContractXML.length() > 0){
+            try {
+                FactoryExtensionPoint modelFactories = 
registry.getExtensionPoint(FactoryExtensionPoint.class);
+                InterfaceContractProcessor processor = new 
InterfaceContractProcessor(registry);
+                ProcessorContext context = new ProcessorContext();
+                ByteArrayInputStream bis = new 
ByteArrayInputStream(interfaceContractXML.getBytes());
+                XMLInputFactory inputFactory = 
modelFactories.getFactory(XMLInputFactory.class);
+                XMLStreamReader reader = 
inputFactory.createXMLStreamReader(bis);
+                interfaceContract = processor.read(reader, context);
+            } catch (Exception ex){
+                new ServiceRuntimeException(ex);  
+            }
+        }
+        return interfaceContract;
+    }
+    
     private String getWsdl() {       
         InterfaceContract ic = getComponentServiceInterfaceContract();
         if (ic == null || ic.getInterface() == null || 
!ic.getInterface().isRemotable()) {
@@ -1202,12 +1241,15 @@ public class RuntimeEndpointImpl extends
     }  
     
     private void setNormalizedWSDLContract() {
-        if (wsdl == null || wsdl.length() < 1) {
+        if (interfaceContractXML == null || interfaceContractXML.length() < 1) 
{
             return;
         }
         InterfaceContract ic = getComponentServiceInterfaceContract();
         if (ic != null) {
+/*            
             
ic.setNormalizedWSDLContract(WSDLHelper.createWSDLInterfaceContract(registry, 
wsdl, wsdlCallback));
+*/            
+            ic.setNormalizedWSDLContract(getTuscanyInterfaceContractFromXML());
         }
     }
 

Modified: 
tuscany/sca-java-2.x/trunk/testing/itest/interface-matching/src/main/java/org/apache/tuscany/sca/itest/interfaces/ServiceMissmatchComponent.java
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/testing/itest/interface-matching/src/main/java/org/apache/tuscany/sca/itest/interfaces/ServiceMissmatchComponent.java?rev=1167202&r1=1167201&r2=1167202&view=diff
==============================================================================
--- 
tuscany/sca-java-2.x/trunk/testing/itest/interface-matching/src/main/java/org/apache/tuscany/sca/itest/interfaces/ServiceMissmatchComponent.java
 (original)
+++ 
tuscany/sca-java-2.x/trunk/testing/itest/interface-matching/src/main/java/org/apache/tuscany/sca/itest/interfaces/ServiceMissmatchComponent.java
 Fri Sep  9 14:24:17 2011
@@ -18,6 +18,8 @@
  */
 package org.apache.tuscany.sca.itest.interfaces;
 
+import java.util.List;
+
 import org.oasisopen.sca.annotation.Callback;
 import org.oasisopen.sca.annotation.Remotable;
 
@@ -39,5 +41,12 @@ public interface ServiceMissmatchCompone
     void modifyParameter();
 
     ParameterObject getPO();
-
+    
+    void inArray(String[] stringArray);
+    
+    String[] outArray();     
+    
+    void inCollection(List<String> stringArray);
+    
+    List<String> outCollection();      
 }

Modified: 
tuscany/sca-java-2.x/trunk/testing/itest/interface-matching/src/main/java/org/apache/tuscany/sca/itest/interfaces/ServiceMissmatchComponentImpl.java
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/testing/itest/interface-matching/src/main/java/org/apache/tuscany/sca/itest/interfaces/ServiceMissmatchComponentImpl.java?rev=1167202&r1=1167201&r2=1167202&view=diff
==============================================================================
--- 
tuscany/sca-java-2.x/trunk/testing/itest/interface-matching/src/main/java/org/apache/tuscany/sca/itest/interfaces/ServiceMissmatchComponentImpl.java
 (original)
+++ 
tuscany/sca-java-2.x/trunk/testing/itest/interface-matching/src/main/java/org/apache/tuscany/sca/itest/interfaces/ServiceMissmatchComponentImpl.java
 Fri Sep  9 14:24:17 2011
@@ -18,6 +18,8 @@
  */
 package org.apache.tuscany.sca.itest.interfaces;
 
+import java.util.List;
+
 import org.oasisopen.sca.annotation.Callback;
 import org.oasisopen.sca.annotation.Service;
 
@@ -49,5 +51,18 @@ public class ServiceMissmatchComponentIm
     public ParameterObject getPO() {
         return po;
     }
-
+    
+    public void inArray(String[] stringArray) {
+    }  
+    
+    public String[] outArray() {
+        return null;
+    } 
+    
+    public void inCollection(List<String> stringArray) {
+    }  
+    
+    public List<String> outCollection() {
+        return null;
+    }     
 }

Modified: 
tuscany/sca-java-2.x/trunk/testing/itest/interface-matching/src/test/java/org/apache/tuscany/sca/itest/interfaces/InerfaceMissmatchTestCase.java
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/testing/itest/interface-matching/src/test/java/org/apache/tuscany/sca/itest/interfaces/InerfaceMissmatchTestCase.java?rev=1167202&r1=1167201&r2=1167202&view=diff
==============================================================================
--- 
tuscany/sca-java-2.x/trunk/testing/itest/interface-matching/src/test/java/org/apache/tuscany/sca/itest/interfaces/InerfaceMissmatchTestCase.java
 (original)
+++ 
tuscany/sca-java-2.x/trunk/testing/itest/interface-matching/src/test/java/org/apache/tuscany/sca/itest/interfaces/InerfaceMissmatchTestCase.java
 Fri Sep  9 14:24:17 2011
@@ -148,13 +148,16 @@ public class InerfaceMissmatchTestCase {
         
         try {
             local.foo1(po);
+            node1.stop();
+            node2.stop();
             Assert.fail("Expected exception indicating that interfaces don't 
match");
         } catch (ServiceRuntimeException ex){
+            node1.stop();
+            node2.stop();
             Assert.assertTrue(ex.getMessage().startsWith("Unable to bind []"));
         }
         
-        node1.stop();
-        node2.stop();
+
     }
     
     /**
@@ -190,13 +193,14 @@ public class InerfaceMissmatchTestCase {
         
         try {
             local.foo1(po);
+            node1.stop();
+            node2.stop();
             Assert.fail("Expected exception indicating that interfaces don't 
match");
         } catch (ServiceRuntimeException ex){
+            node1.stop();
+            node2.stop();
             Assert.assertTrue(ex.getMessage().startsWith("Unable to bind []"));
         }
-        
-        node1.stop();
-        node2.stop();
 
     }
 }

Added: 
tuscany/sca-java-2.x/trunk/testing/itest/interface-matching/src/test/java/org/apache/tuscany/sca/itest/interfaces/InterfaceWriteTestCase.java
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/testing/itest/interface-matching/src/test/java/org/apache/tuscany/sca/itest/interfaces/InterfaceWriteTestCase.java?rev=1167202&view=auto
==============================================================================
--- 
tuscany/sca-java-2.x/trunk/testing/itest/interface-matching/src/test/java/org/apache/tuscany/sca/itest/interfaces/InterfaceWriteTestCase.java
 (added)
+++ 
tuscany/sca-java-2.x/trunk/testing/itest/interface-matching/src/test/java/org/apache/tuscany/sca/itest/interfaces/InterfaceWriteTestCase.java
 Fri Sep  9 14:24:17 2011
@@ -0,0 +1,110 @@
+/*
+ * 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.itest.interfaces;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.net.URI;
+
+import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.XMLOutputFactory;
+import javax.xml.stream.XMLStreamReader;
+import javax.xml.stream.XMLStreamWriter;
+
+import junit.framework.Assert;
+
+
+
+import org.apache.tuscany.sca.assembly.Component;
+import org.apache.tuscany.sca.assembly.Service;
+import org.apache.tuscany.sca.assembly.xml.InterfaceContractProcessor;
+import org.apache.tuscany.sca.contribution.processor.ProcessorContext;
+import org.apache.tuscany.sca.core.FactoryExtensionPoint;
+
+import org.apache.tuscany.sca.interfacedef.InterfaceContract;
+import org.apache.tuscany.sca.interfacedef.InterfaceContractMapper;
+import org.apache.tuscany.sca.interfacedef.impl.InterfaceContractMapperImpl;
+import org.apache.tuscany.sca.interfacedef.util.Audit;
+import org.apache.tuscany.sca.node.NodeFactory;
+import org.apache.tuscany.sca.node.impl.NodeImpl;
+import org.junit.Test;
+
+public class InterfaceWriteTestCase {
+    
+    /**
+     * Looks at writing and reading the Tuscany interface model
+     * 
+     * @throws Exception
+     */
+    @Test
+    public void testInterfaceWriteRead() throws Exception {
+        String [] contributions = {"./target/classes"};
+        NodeImpl node1 = 
(NodeImpl)NodeFactory.newInstance().createNode(URI.create("uri:default"), 
+                                                                        
"org/apache/tuscany/sca/itest/interfaces/missmatch/distributed/MissmatchDistributedService.composite",
 
+                                                                        
contributions);
+        node1.start();
+        
+        Component serviceComponent = 
node1.getDomainComposite().getComponents().get(0);
+        Service service = serviceComponent.getServices().get(0);
+        
+        InterfaceContractProcessor processor = new 
InterfaceContractProcessor(node1.getExtensionPointRegistry());
+        ProcessorContext context = new ProcessorContext();
+        
+        FactoryExtensionPoint modelFactories = 
node1.getExtensionPointRegistry().getExtensionPoint(FactoryExtensionPoint.class);
+
+        ByteArrayOutputStream bos = new ByteArrayOutputStream();
+        XMLOutputFactory outputFactory = 
modelFactories.getFactory(XMLOutputFactory.class);
+        XMLStreamWriter writer = outputFactory.createXMLStreamWriter(bos);
+        processor.write(service.getInterfaceContract(), writer, context);
+        writer.close();
+        
+        String xml = bos.toString();
+        System.out.println("Written ouput is:\n" + xml);
+        
+        ByteArrayInputStream bis = new ByteArrayInputStream(xml.getBytes());
+        XMLInputFactory inputFactory = 
modelFactories.getFactory(XMLInputFactory.class);
+        XMLStreamReader reader = inputFactory.createXMLStreamReader(bis);
+        InterfaceContract interfaceContract = processor.read(reader, context);
+        
+        bos = new ByteArrayOutputStream();
+        writer = outputFactory.createXMLStreamWriter(bos);
+        processor.write(interfaceContract, writer, context);
+        writer.close();
+        
+        System.out.println("Read ouput is:\n" + bos);
+        
+        InterfaceContractMapper interfaceContractMapper = new 
InterfaceContractMapperImpl(node1.getExtensionPointRegistry());
+        
+        Audit matchAudit = new Audit();
+        boolean match = false;
+        match = 
interfaceContractMapper.isCompatibleSubset(service.getInterfaceContract(), 
+                                                           interfaceContract, 
+                                                           matchAudit);
+        
+        if (!match){
+            System.out.println(matchAudit.toString());
+        }
+        
+        Assert.assertTrue(match);
+       
+        node1.stop(); 
+    }  
+    
+}


Reply via email to