Author: slaws
Date: Mon Feb 20 10:57:50 2012
New Revision: 1291191

URL: http://svn.apache.org/viewvc?rev=1291191&view=rev
Log:
TUSCANY-3459 - Allow the remotable status of an interface to be overridden 
using the remotable attributed on the SCDL interface element as described by 
the OASIS assembly spec. 

Added:
    
tuscany/sca-java-2.x/trunk/testing/itest/interfaces/src/main/java/org/apache/tuscany/sca/itest/interfaces/Helloworld.java
    
tuscany/sca-java-2.x/trunk/testing/itest/interfaces/src/main/java/org/apache/tuscany/sca/itest/interfaces/HelloworldImpl.java
    
tuscany/sca-java-2.x/trunk/testing/itest/interfaces/src/main/resources/org/apache/tuscany/sca/itest/interfaces/remoteoverride/
    
tuscany/sca-java-2.x/trunk/testing/itest/interfaces/src/main/resources/org/apache/tuscany/sca/itest/interfaces/remoteoverride/helloworld.composite
    
tuscany/sca-java-2.x/trunk/testing/itest/interfaces/src/test/java/org/apache/tuscany/sca/itest/interfaces/RemoteOverrideTestCase.java
Modified:
    
tuscany/sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/interfacedef/Interface.java
    
tuscany/sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/interfacedef/impl/InterfaceImpl.java
    
tuscany/sca-java-2.x/trunk/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/service/mocks/TestInterface.java
    
tuscany/sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ComponentBuilderImpl.java
    
tuscany/sca-java-2.x/trunk/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/processor/DataBindingJavaInterfaceProcessor.java
    
tuscany/sca-java-2.x/trunk/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/processor/WrapperJavaInterfaceProcessor.java
    
tuscany/sca-java-2.x/trunk/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/JAXWSJavaInterfaceProcessor.java
    
tuscany/sca-java-2.x/trunk/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/impl/JavaInterfaceIntrospectorImpl.java
    
tuscany/sca-java-2.x/trunk/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/xml/JavaInterfaceProcessor.java

Modified: 
tuscany/sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/interfacedef/Interface.java
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/interfacedef/Interface.java?rev=1291191&r1=1291190&r2=1291191&view=diff
==============================================================================
--- 
tuscany/sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/interfacedef/Interface.java
 (original)
+++ 
tuscany/sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/interfacedef/Interface.java
 Mon Feb 20 10:57:50 2012
@@ -57,6 +57,15 @@ public interface Interface extends Clone
      * @return
      */
     boolean isRemotableSet();
+    
+    /**
+     * A flag that indicates if the remotable status has come
+     * from the <interface.? remotable=""/> attribute
+     * 
+     * @return
+     */
+    boolean isRemotableSetFromSCDL();
+    void setRemotableSetFromSCDL();
 
     /**
      * Returns the operations defined on this interface.

Modified: 
tuscany/sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/interfacedef/impl/InterfaceImpl.java
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/interfacedef/impl/InterfaceImpl.java?rev=1291191&r1=1291190&r2=1291191&view=diff
==============================================================================
--- 
tuscany/sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/interfacedef/impl/InterfaceImpl.java
 (original)
+++ 
tuscany/sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/interfacedef/impl/InterfaceImpl.java
 Mon Feb 20 10:57:50 2012
@@ -41,6 +41,7 @@ import org.apache.tuscany.sca.policy.Pol
 public class InterfaceImpl implements Interface {
 
     private Boolean remotable;
+    private boolean remotableSetFromSCDL = false;
     private boolean conversational;
     private OperationList operations = new OperationList();
     private boolean unresolved;
@@ -65,6 +66,16 @@ public class InterfaceImpl implements In
     public boolean isRemotableSet() {
         return remotable == null ? false : true;
     }
+    
+    @Override
+    public boolean isRemotableSetFromSCDL() {
+        return remotableSetFromSCDL;
+    }
+    
+    @Override
+    public void setRemotableSetFromSCDL() {
+        remotableSetFromSCDL = true;
+    }
 
     public List<Operation> getOperations() {
         return operations;

Modified: 
tuscany/sca-java-2.x/trunk/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/service/mocks/TestInterface.java
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/service/mocks/TestInterface.java?rev=1291191&r1=1291190&r2=1291191&view=diff
==============================================================================
--- 
tuscany/sca-java-2.x/trunk/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/service/mocks/TestInterface.java
 (original)
+++ 
tuscany/sca-java-2.x/trunk/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/service/mocks/TestInterface.java
 Mon Feb 20 10:57:50 2012
@@ -60,6 +60,17 @@ public class TestInterface implements Ja
     public boolean isRemotable() {
         return false;
     }
+    
+    @Override
+    public void setRemotableSetFromSCDL() {
+        // TODO Auto-generated method stub
+    }
+    
+    @Override
+    public boolean isRemotableSetFromSCDL() {
+        // TODO Auto-generated method stub
+        return false;
+    }
 
     public void resetDataBinding(String dataBinding) {
 

Modified: 
tuscany/sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ComponentBuilderImpl.java
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ComponentBuilderImpl.java?rev=1291191&r1=1291190&r2=1291191&view=diff
==============================================================================
--- 
tuscany/sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ComponentBuilderImpl.java
 (original)
+++ 
tuscany/sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ComponentBuilderImpl.java
 Mon Feb 20 10:57:50 2012
@@ -1509,6 +1509,15 @@ public class ComponentBuilderImpl {
         if (topInterfaceContract == null) {
             topContract.setInterfaceContract(bottomInterfaceContract);
         } else if (bottomInterfaceContract != null) {
+            // apply remotable override if it has been specified in the SCDL 
for the
+            // higher level contract
+            if (topInterfaceContract.getInterface().isRemotableSetFromSCDL() 
== true){
+                if (bottomInterfaceContract.getInterface().isRemotable() == 
false &&   
+                    topInterfaceContract.getInterface().isRemotable() == true){
+                    bottomInterfaceContract.getInterface().setRemotable(true);
+                }
+            }
+            
             // Check that the top and bottom interface contracts are compatible
             boolean isCompatible = true;
             String incompatibilityReason = "";
@@ -1569,6 +1578,14 @@ public class ComponentBuilderImpl {
         if (topInterfaceContract == null) {
             topContract.setInterfaceContract(bottomInterfaceContract);
         } else if (bottomInterfaceContract != null) {
+            // apply remotable override if it has been specified in the SCDL 
for the
+            // higher level contract
+            if (topInterfaceContract.getInterface().isRemotableSetFromSCDL() 
== true){
+                if (bottomInterfaceContract.getInterface().isRemotable() == 
false &&   
+                    topInterfaceContract.getInterface().isRemotable() == true){
+                    bottomInterfaceContract.getInterface().setRemotable(true);
+                }
+            }
             // Check that the top and bottom interface contracts are compatible
             boolean isCompatible = true;
             String incompatibilityReason = "";

Modified: 
tuscany/sca-java-2.x/trunk/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/processor/DataBindingJavaInterfaceProcessor.java
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/processor/DataBindingJavaInterfaceProcessor.java?rev=1291191&r1=1291190&r2=1291191&view=diff
==============================================================================
--- 
tuscany/sca-java-2.x/trunk/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/processor/DataBindingJavaInterfaceProcessor.java
 (original)
+++ 
tuscany/sca-java-2.x/trunk/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/processor/DataBindingJavaInterfaceProcessor.java
 Mon Feb 20 10:57:50 2012
@@ -47,9 +47,11 @@ public class DataBindingJavaInterfacePro
     }
 
     public void visitInterface(JavaInterface javaInterface) throws 
InvalidInterfaceException {
-        if (!javaInterface.isRemotable()) {
-            return;
-        }
+        // Set the data types regardless in case the
+        // user overrides the remotable status in the SCDL
+        //if (!javaInterface.isRemotable()) {
+        //    return;
+        //}
         List<Operation> operations = javaInterface.getOperations();
         processInterface(javaInterface, operations);
     }

Modified: 
tuscany/sca-java-2.x/trunk/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/processor/WrapperJavaInterfaceProcessor.java
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/processor/WrapperJavaInterfaceProcessor.java?rev=1291191&r1=1291190&r2=1291191&view=diff
==============================================================================
--- 
tuscany/sca-java-2.x/trunk/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/processor/WrapperJavaInterfaceProcessor.java
 (original)
+++ 
tuscany/sca-java-2.x/trunk/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/processor/WrapperJavaInterfaceProcessor.java
 Mon Feb 20 10:57:50 2012
@@ -52,9 +52,11 @@ public class WrapperJavaInterfaceProcess
     }
 
     public void visitInterface(JavaInterface javaInterface) throws 
InvalidInterfaceException {
-        if (!javaInterface.isRemotable()) {
-            return;
-        }
+        // create regardless in case the user overrides the remotable flag
+        // in the SCDL
+        //if (!javaInterface.isRemotable()) {
+        //    return;
+        //}
         for (Operation operation : javaInterface.getOperations()) {
             WrapperInfo inputWrapperInfo = operation.getInputWrapper();
             WrapperInfo outputWrapperInfo = operation.getOutputWrapper();

Modified: 
tuscany/sca-java-2.x/trunk/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/JAXWSJavaInterfaceProcessor.java
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/JAXWSJavaInterfaceProcessor.java?rev=1291191&r1=1291190&r2=1291191&view=diff
==============================================================================
--- 
tuscany/sca-java-2.x/trunk/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/JAXWSJavaInterfaceProcessor.java
 (original)
+++ 
tuscany/sca-java-2.x/trunk/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/JAXWSJavaInterfaceProcessor.java
 Mon Feb 20 10:57:50 2012
@@ -117,9 +117,11 @@ public class JAXWSJavaInterfaceProcessor
         contract = JAXWSUtils.configureJavaInterface(contract, clazz);
         String tns = contract.getQName().getNamespaceURI();      
         
-        if (!contract.isRemotable()) {
-            return;
-        }
+        // run this regardless in case the user overrides 
+        // the remotable flag in the SCDL
+        //if (!contract.isRemotable()) {
+        //    return;
+        //}
 
         // SOAP binding (doc/lit/wrapped|bare or rpc/lit)
         SOAPBinding soapBinding = clazz.getAnnotation(SOAPBinding.class);

Modified: 
tuscany/sca-java-2.x/trunk/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/impl/JavaInterfaceIntrospectorImpl.java
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/impl/JavaInterfaceIntrospectorImpl.java?rev=1291191&r1=1291190&r2=1291191&view=diff
==============================================================================
--- 
tuscany/sca-java-2.x/trunk/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/impl/JavaInterfaceIntrospectorImpl.java
 (original)
+++ 
tuscany/sca-java-2.x/trunk/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/impl/JavaInterfaceIntrospectorImpl.java
 Mon Feb 20 10:57:50 2012
@@ -111,7 +111,7 @@ public class JavaInterfaceIntrospectorIm
         }
 
         if (remotable) {
-            if (javaInterface.isRemotableSet() && javaInterface.isRemotable() 
== false) {
+            if (javaInterface.isRemotableSetFromSCDL() && 
javaInterface.isRemotable() == false) {
                 throw new InvalidAnnotationException("[JCA30005] @Remotable 
annotation present in a interface marked as not remotable in the SCDL", 
Remotable.class);
             }
         } else {

Modified: 
tuscany/sca-java-2.x/trunk/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/xml/JavaInterfaceProcessor.java
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/xml/JavaInterfaceProcessor.java?rev=1291191&r1=1291190&r2=1291191&view=diff
==============================================================================
--- 
tuscany/sca-java-2.x/trunk/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/xml/JavaInterfaceProcessor.java
 (original)
+++ 
tuscany/sca-java-2.x/trunk/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/xml/JavaInterfaceProcessor.java
 Mon Feb 20 10:57:50 2012
@@ -166,6 +166,7 @@ public class JavaInterfaceProcessor impl
         String remotable = reader.getAttributeValue(null, REMOTABLE);
         if (remotable != null) {
             
javaInterfaceContract.getInterface().setRemotable(Boolean.parseBoolean(remotable));
+            javaInterfaceContract.getInterface().setRemotableSetFromSCDL();
         }
         
         // Read intents and policy sets
@@ -190,7 +191,7 @@ public class JavaInterfaceProcessor impl
             writer.writeAttribute(INTERFACE, javaInterface.getName());
         }
         
-        if(javaInterface != null && javaInterface.isRemotableSet()) {
+        if(javaInterface != null && javaInterface.isRemotableSetFromSCDL()) {
             writer.writeAttribute(REMOTABLE, 
String.valueOf(javaInterface.isRemotable()));
         }
         

Added: 
tuscany/sca-java-2.x/trunk/testing/itest/interfaces/src/main/java/org/apache/tuscany/sca/itest/interfaces/Helloworld.java
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/testing/itest/interfaces/src/main/java/org/apache/tuscany/sca/itest/interfaces/Helloworld.java?rev=1291191&view=auto
==============================================================================
--- 
tuscany/sca-java-2.x/trunk/testing/itest/interfaces/src/main/java/org/apache/tuscany/sca/itest/interfaces/Helloworld.java
 (added)
+++ 
tuscany/sca-java-2.x/trunk/testing/itest/interfaces/src/main/java/org/apache/tuscany/sca/itest/interfaces/Helloworld.java
 Mon Feb 20 10:57:50 2012
@@ -0,0 +1,25 @@
+/*
+ * 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;
+
+public interface Helloworld {
+
+    String sayHello(String name);
+
+}

Added: 
tuscany/sca-java-2.x/trunk/testing/itest/interfaces/src/main/java/org/apache/tuscany/sca/itest/interfaces/HelloworldImpl.java
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/testing/itest/interfaces/src/main/java/org/apache/tuscany/sca/itest/interfaces/HelloworldImpl.java?rev=1291191&view=auto
==============================================================================
--- 
tuscany/sca-java-2.x/trunk/testing/itest/interfaces/src/main/java/org/apache/tuscany/sca/itest/interfaces/HelloworldImpl.java
 (added)
+++ 
tuscany/sca-java-2.x/trunk/testing/itest/interfaces/src/main/java/org/apache/tuscany/sca/itest/interfaces/HelloworldImpl.java
 Mon Feb 20 10:57:50 2012
@@ -0,0 +1,27 @@
+/*
+ * 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;
+
+public class HelloworldImpl implements Helloworld {
+
+    public String sayHello(String name) {
+        return "Hello " + name;
+    }
+
+}

Added: 
tuscany/sca-java-2.x/trunk/testing/itest/interfaces/src/main/resources/org/apache/tuscany/sca/itest/interfaces/remoteoverride/helloworld.composite
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/testing/itest/interfaces/src/main/resources/org/apache/tuscany/sca/itest/interfaces/remoteoverride/helloworld.composite?rev=1291191&view=auto
==============================================================================
--- 
tuscany/sca-java-2.x/trunk/testing/itest/interfaces/src/main/resources/org/apache/tuscany/sca/itest/interfaces/remoteoverride/helloworld.composite
 (added)
+++ 
tuscany/sca-java-2.x/trunk/testing/itest/interfaces/src/main/resources/org/apache/tuscany/sca/itest/interfaces/remoteoverride/helloworld.composite
 Mon Feb 20 10:57:50 2012
@@ -0,0 +1,33 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * 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.    
+-->
+<composite xmlns="http://docs.oasis-open.org/ns/opencsa/sca/200912";
+           xmlns:tuscany="http://tuscany.apache.org/xmlns/sca/1.1";
+           targetNamespace="http://sample";
+           name="helloworld-contribution">
+
+    <component name="HelloworldComponent">
+        <implementation.java 
class="org.apache.tuscany.sca.itest.interfaces.HelloworldImpl"/>
+        <service name="HelloworldImpl">
+           <interface.java 
interface="org.apache.tuscany.sca.itest.interfaces.Helloworld" 
remotable="true"/>
+           <binding.ws/>
+        </service>
+    </component>
+
+</composite>

Added: 
tuscany/sca-java-2.x/trunk/testing/itest/interfaces/src/test/java/org/apache/tuscany/sca/itest/interfaces/RemoteOverrideTestCase.java
URL: 
http://svn.apache.org/viewvc/tuscany/sca-java-2.x/trunk/testing/itest/interfaces/src/test/java/org/apache/tuscany/sca/itest/interfaces/RemoteOverrideTestCase.java?rev=1291191&view=auto
==============================================================================
--- 
tuscany/sca-java-2.x/trunk/testing/itest/interfaces/src/test/java/org/apache/tuscany/sca/itest/interfaces/RemoteOverrideTestCase.java
 (added)
+++ 
tuscany/sca-java-2.x/trunk/testing/itest/interfaces/src/test/java/org/apache/tuscany/sca/itest/interfaces/RemoteOverrideTestCase.java
 Mon Feb 20 10:57:50 2012
@@ -0,0 +1,76 @@
+/*
+ * 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.BufferedReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.net.MalformedURLException;
+import java.net.URL;
+
+import org.apache.tuscany.sca.Node;
+import org.apache.tuscany.sca.TuscanyRuntime;
+import org.junit.Assert;
+import org.junit.Test;
+import org.oasisopen.sca.NoSuchServiceException;
+
+public class RemoteOverrideTestCase {
+
+    @Test
+    public void testSayHello() throws NoSuchServiceException, IOException {
+
+        // Run the SCA composite in a Tuscany runtime
+        Node node = TuscanyRuntime.runComposite("helloworld.composite", 
"target/classes/org/apache/tuscany/sca/itest/interfaces/remoteoverride");
+        try {
+            
+            // Get the Helloworld service proxy
+            Helloworld helloworld = node.getService(Helloworld.class, 
"HelloworldComponent");
+            
+            // test that it works as expected
+            Assert.assertEquals("Hello Amelia", helloworld.sayHello("Amelia"));
+            
+            // test that has exposed an HTTP endpoint that works as expected
+            // to keep this test simple just do ?wsdl on the endpoint  
+            URL url = new 
URL("http://localhost:8085/HelloworldComponent/HelloworldImpl?wsdl";);
+            Assert.assertTrue(read(url.openStream()).contains("address 
location="));
+
+        } finally {
+            // Stop the Tuscany runtime Node
+            node.stop();        
+        }
+    }
+
+    private static String read(InputStream is) throws IOException {
+        BufferedReader reader = null;
+        try {
+            reader = new BufferedReader(new InputStreamReader(is));
+            StringBuffer sb = new StringBuffer();
+            String str;
+            while ((str = reader.readLine()) != null) {
+                sb.append(str);
+            }
+            return sb.toString();
+        } finally {
+            if (reader != null) {
+                reader.close();
+            }
+        }
+    }
+}


Reply via email to