summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/interfacedef/Interface.java9
-rw-r--r--sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/interfacedef/impl/InterfaceImpl.java11
-rw-r--r--sca-java-2.x/trunk/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/service/mocks/TestInterface.java11
-rw-r--r--sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ComponentBuilderImpl.java17
-rw-r--r--sca-java-2.x/trunk/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/processor/DataBindingJavaInterfaceProcessor.java8
-rw-r--r--sca-java-2.x/trunk/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/processor/WrapperJavaInterfaceProcessor.java8
-rw-r--r--sca-java-2.x/trunk/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/JAXWSJavaInterfaceProcessor.java8
-rw-r--r--sca-java-2.x/trunk/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/impl/JavaInterfaceIntrospectorImpl.java2
-rw-r--r--sca-java-2.x/trunk/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/xml/JavaInterfaceProcessor.java3
-rw-r--r--sca-java-2.x/trunk/testing/itest/interfaces/src/main/java/org/apache/tuscany/sca/itest/interfaces/Helloworld.java25
-rw-r--r--sca-java-2.x/trunk/testing/itest/interfaces/src/main/java/org/apache/tuscany/sca/itest/interfaces/HelloworldImpl.java27
-rw-r--r--sca-java-2.x/trunk/testing/itest/interfaces/src/main/resources/org/apache/tuscany/sca/itest/interfaces/remoteoverride/helloworld.composite33
-rw-r--r--sca-java-2.x/trunk/testing/itest/interfaces/src/test/java/org/apache/tuscany/sca/itest/interfaces/RemoteOverrideTestCase.java76
13 files changed, 227 insertions, 11 deletions
diff --git a/sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/interfacedef/Interface.java b/sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/interfacedef/Interface.java
index e3103b768a..5e81453f63 100644
--- a/sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/interfacedef/Interface.java
+++ b/sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/interfacedef/Interface.java
@@ -57,6 +57,15 @@ public interface Interface extends Cloneable, PolicySubject {
* @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.
diff --git a/sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/interfacedef/impl/InterfaceImpl.java b/sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/interfacedef/impl/InterfaceImpl.java
index ec7c784547..01ad56117c 100644
--- a/sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/interfacedef/impl/InterfaceImpl.java
+++ b/sca-java-2.x/trunk/modules/assembly/src/main/java/org/apache/tuscany/sca/interfacedef/impl/InterfaceImpl.java
@@ -41,6 +41,7 @@ import org.apache.tuscany.sca.policy.PolicySet;
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 Interface {
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;
diff --git a/sca-java-2.x/trunk/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/service/mocks/TestInterface.java b/sca-java-2.x/trunk/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/service/mocks/TestInterface.java
index 0668761e48..ffee452643 100644
--- a/sca-java-2.x/trunk/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/service/mocks/TestInterface.java
+++ b/sca-java-2.x/trunk/modules/binding-corba-runtime/src/test/java/org/apache/tuscany/sca/binding/corba/testing/service/mocks/TestInterface.java
@@ -60,6 +60,17 @@ public class TestInterface implements JavaInterface {
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) {
diff --git a/sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ComponentBuilderImpl.java b/sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ComponentBuilderImpl.java
index 23bd33e806..d67cb65bb0 100644
--- a/sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ComponentBuilderImpl.java
+++ b/sca-java-2.x/trunk/modules/builder/src/main/java/org/apache/tuscany/sca/builder/impl/ComponentBuilderImpl.java
@@ -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 = "";
diff --git a/sca-java-2.x/trunk/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/processor/DataBindingJavaInterfaceProcessor.java b/sca-java-2.x/trunk/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/processor/DataBindingJavaInterfaceProcessor.java
index e904e36901..7c10ae45e9 100644
--- a/sca-java-2.x/trunk/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/processor/DataBindingJavaInterfaceProcessor.java
+++ b/sca-java-2.x/trunk/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/processor/DataBindingJavaInterfaceProcessor.java
@@ -47,9 +47,11 @@ public class DataBindingJavaInterfaceProcessor implements JavaInterfaceVisitor {
}
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);
}
diff --git a/sca-java-2.x/trunk/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/processor/WrapperJavaInterfaceProcessor.java b/sca-java-2.x/trunk/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/processor/WrapperJavaInterfaceProcessor.java
index 7bae80d2c4..e81b3a9080 100644
--- a/sca-java-2.x/trunk/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/processor/WrapperJavaInterfaceProcessor.java
+++ b/sca-java-2.x/trunk/modules/core-databinding/src/main/java/org/apache/tuscany/sca/core/databinding/processor/WrapperJavaInterfaceProcessor.java
@@ -52,9 +52,11 @@ public class WrapperJavaInterfaceProcessor implements JavaInterfaceVisitor {
}
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();
diff --git a/sca-java-2.x/trunk/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/JAXWSJavaInterfaceProcessor.java b/sca-java-2.x/trunk/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/JAXWSJavaInterfaceProcessor.java
index 15cac415ac..3fc646cdfa 100644
--- a/sca-java-2.x/trunk/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/JAXWSJavaInterfaceProcessor.java
+++ b/sca-java-2.x/trunk/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/JAXWSJavaInterfaceProcessor.java
@@ -117,9 +117,11 @@ public class JAXWSJavaInterfaceProcessor implements JavaInterfaceVisitor {
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);
diff --git a/sca-java-2.x/trunk/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/impl/JavaInterfaceIntrospectorImpl.java b/sca-java-2.x/trunk/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/impl/JavaInterfaceIntrospectorImpl.java
index 6611c6af79..304d39a51d 100644
--- a/sca-java-2.x/trunk/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/impl/JavaInterfaceIntrospectorImpl.java
+++ b/sca-java-2.x/trunk/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/impl/JavaInterfaceIntrospectorImpl.java
@@ -111,7 +111,7 @@ public class JavaInterfaceIntrospectorImpl {
}
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 {
diff --git a/sca-java-2.x/trunk/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/xml/JavaInterfaceProcessor.java b/sca-java-2.x/trunk/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/xml/JavaInterfaceProcessor.java
index 87628d9901..b321b0d5de 100644
--- a/sca-java-2.x/trunk/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/xml/JavaInterfaceProcessor.java
+++ b/sca-java-2.x/trunk/modules/interface-java/src/main/java/org/apache/tuscany/sca/interfacedef/java/xml/JavaInterfaceProcessor.java
@@ -166,6 +166,7 @@ public class JavaInterfaceProcessor implements StAXArtifactProcessor<JavaInterfa
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 implements StAXArtifactProcessor<JavaInterfa
writer.writeAttribute(INTERFACE, javaInterface.getName());
}
- if(javaInterface != null && javaInterface.isRemotableSet()) {
+ if(javaInterface != null && javaInterface.isRemotableSetFromSCDL()) {
writer.writeAttribute(REMOTABLE, String.valueOf(javaInterface.isRemotable()));
}
diff --git a/sca-java-2.x/trunk/testing/itest/interfaces/src/main/java/org/apache/tuscany/sca/itest/interfaces/Helloworld.java b/sca-java-2.x/trunk/testing/itest/interfaces/src/main/java/org/apache/tuscany/sca/itest/interfaces/Helloworld.java
new file mode 100644
index 0000000000..1129b16310
--- /dev/null
+++ b/sca-java-2.x/trunk/testing/itest/interfaces/src/main/java/org/apache/tuscany/sca/itest/interfaces/Helloworld.java
@@ -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);
+
+}
diff --git a/sca-java-2.x/trunk/testing/itest/interfaces/src/main/java/org/apache/tuscany/sca/itest/interfaces/HelloworldImpl.java b/sca-java-2.x/trunk/testing/itest/interfaces/src/main/java/org/apache/tuscany/sca/itest/interfaces/HelloworldImpl.java
new file mode 100644
index 0000000000..c21a305e40
--- /dev/null
+++ b/sca-java-2.x/trunk/testing/itest/interfaces/src/main/java/org/apache/tuscany/sca/itest/interfaces/HelloworldImpl.java
@@ -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;
+ }
+
+}
diff --git a/sca-java-2.x/trunk/testing/itest/interfaces/src/main/resources/org/apache/tuscany/sca/itest/interfaces/remoteoverride/helloworld.composite b/sca-java-2.x/trunk/testing/itest/interfaces/src/main/resources/org/apache/tuscany/sca/itest/interfaces/remoteoverride/helloworld.composite
new file mode 100644
index 0000000000..cbeee0abd4
--- /dev/null
+++ b/sca-java-2.x/trunk/testing/itest/interfaces/src/main/resources/org/apache/tuscany/sca/itest/interfaces/remoteoverride/helloworld.composite
@@ -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>
diff --git a/sca-java-2.x/trunk/testing/itest/interfaces/src/test/java/org/apache/tuscany/sca/itest/interfaces/RemoteOverrideTestCase.java b/sca-java-2.x/trunk/testing/itest/interfaces/src/test/java/org/apache/tuscany/sca/itest/interfaces/RemoteOverrideTestCase.java
new file mode 100644
index 0000000000..ffadeb6dfb
--- /dev/null
+++ b/sca-java-2.x/trunk/testing/itest/interfaces/src/test/java/org/apache/tuscany/sca/itest/interfaces/RemoteOverrideTestCase.java
@@ -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();
+ }
+ }
+ }
+}