summaryrefslogtreecommitdiffstats
path: root/sca-java-2.x/tags/2.0.1-RC1/modules/binding-local-runtime/src
diff options
context:
space:
mode:
Diffstat (limited to 'sca-java-2.x/tags/2.0.1-RC1/modules/binding-local-runtime/src')
-rw-r--r--sca-java-2.x/tags/2.0.1-RC1/modules/binding-local-runtime/src/main/java/org/apache/tuscany/sca/binding/local/LocalBinding.java33
-rw-r--r--sca-java-2.x/tags/2.0.1-RC1/modules/binding-local-runtime/src/main/java/org/apache/tuscany/sca/binding/local/LocalBindingInvoker.java102
-rw-r--r--sca-java-2.x/tags/2.0.1-RC1/modules/binding-local-runtime/src/main/java/org/apache/tuscany/sca/binding/local/LocalBindingProviderFactory.java51
-rw-r--r--sca-java-2.x/tags/2.0.1-RC1/modules/binding-local-runtime/src/main/java/org/apache/tuscany/sca/binding/local/LocalReferenceBindingProvider.java135
-rw-r--r--sca-java-2.x/tags/2.0.1-RC1/modules/binding-local-runtime/src/main/java/org/apache/tuscany/sca/binding/local/LocalServiceBindingProvider.java59
-rw-r--r--sca-java-2.x/tags/2.0.1-RC1/modules/binding-local-runtime/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor19
-rw-r--r--sca-java-2.x/tags/2.0.1-RC1/modules/binding-local-runtime/src/main/resources/META-INF/services/org.apache.tuscany.sca.provider.BindingProviderFactory19
-rw-r--r--sca-java-2.x/tags/2.0.1-RC1/modules/binding-local-runtime/src/test/java/org/apace/tuscany/sca/binding/local/LocalBindingTestCase.java102
-rw-r--r--sca-java-2.x/tags/2.0.1-RC1/modules/binding-local-runtime/src/test/java/org/apace/tuscany/sca/binding/local/ReadTestCase.java93
-rw-r--r--sca-java-2.x/tags/2.0.1-RC1/modules/binding-local-runtime/src/test/java/org/apace/tuscany/sca/binding/local/WriteTestCase.java88
-rw-r--r--sca-java-2.x/tags/2.0.1-RC1/modules/binding-local-runtime/src/test/resources/Calculator.composite60
-rw-r--r--sca-java-2.x/tags/2.0.1-RC1/modules/binding-local-runtime/src/test/resources/CalculatorServiceImpl.componentType34
12 files changed, 795 insertions, 0 deletions
diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/binding-local-runtime/src/main/java/org/apache/tuscany/sca/binding/local/LocalBinding.java b/sca-java-2.x/tags/2.0.1-RC1/modules/binding-local-runtime/src/main/java/org/apache/tuscany/sca/binding/local/LocalBinding.java
new file mode 100644
index 0000000000..c69d61ec53
--- /dev/null
+++ b/sca-java-2.x/tags/2.0.1-RC1/modules/binding-local-runtime/src/main/java/org/apache/tuscany/sca/binding/local/LocalBinding.java
@@ -0,0 +1,33 @@
+/*
+ * 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.binding.local;
+
+import javax.xml.namespace.QName;
+
+import org.apache.tuscany.sca.assembly.impl.BindingImpl;
+
+public class LocalBinding extends BindingImpl {
+
+ public static final QName TYPE = new QName(SCA11_TUSCANY_NS, "binding.local");
+
+ public LocalBinding() {
+ super(TYPE);
+ }
+}
diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/binding-local-runtime/src/main/java/org/apache/tuscany/sca/binding/local/LocalBindingInvoker.java b/sca-java-2.x/tags/2.0.1-RC1/modules/binding-local-runtime/src/main/java/org/apache/tuscany/sca/binding/local/LocalBindingInvoker.java
new file mode 100644
index 0000000000..c03abcb528
--- /dev/null
+++ b/sca-java-2.x/tags/2.0.1-RC1/modules/binding-local-runtime/src/main/java/org/apache/tuscany/sca/binding/local/LocalBindingInvoker.java
@@ -0,0 +1,102 @@
+/*
+ * 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.binding.local;
+
+import org.apache.tuscany.sca.databinding.Mediator;
+import org.apache.tuscany.sca.interfacedef.Operation;
+import org.apache.tuscany.sca.invocation.Interceptor;
+import org.apache.tuscany.sca.invocation.InvocationChain;
+import org.apache.tuscany.sca.invocation.Invoker;
+import org.apache.tuscany.sca.invocation.Message;
+import org.apache.tuscany.sca.invocation.Phase;
+import org.apache.tuscany.sca.runtime.RuntimeEndpoint;
+import org.apache.tuscany.sca.runtime.RuntimeEndpointReference;
+
+/**
+ * The Local binding invoker
+ */
+public class LocalBindingInvoker implements Interceptor {
+ private InvocationChain chain;
+ private Mediator mediator;
+ private Operation sourceOperation;
+ private Operation targetOperation;
+ private boolean passByValue;
+ private RuntimeEndpoint ep;
+
+ /**
+ * Construct a SCABindingInvoker that delegates to the service invocaiton chain
+ */
+ public LocalBindingInvoker(InvocationChain chain, Operation sourceOperation, Mediator mediator, boolean passByValue, RuntimeEndpointReference epr) {
+ super();
+ this.chain = chain;
+ this.mediator = mediator;
+ this.sourceOperation = sourceOperation;
+ this.targetOperation = chain.getTargetOperation();
+ this.passByValue = passByValue;
+ this.ep = (RuntimeEndpoint)epr.getTargetEndpoint();
+ }
+
+ /**
+ * @see org.apache.tuscany.sca.invocation.Interceptor#getNext()
+ */
+ public Invoker getNext() {
+ return chain.getHeadInvoker(Phase.SERVICE_POLICY);
+ }
+
+ /**
+ * @see org.apache.tuscany.sca.invocation.Interceptor#setNext(org.apache.tuscany.sca.invocation.Invoker)
+ */
+ public void setNext(Invoker next) {
+ // NOOP
+ }
+
+ /**
+ * @see org.apache.tuscany.sca.invocation.Invoker#invoke(org.apache.tuscany.sca.invocation.Message)
+ */
+ public Message invoke(Message msg) {
+
+ if (passByValue) {
+ msg.setBody(mediator.copyInput(msg.getBody(), sourceOperation, targetOperation));
+ }
+
+ ep.getInvocationChains();
+ if ( !ep.getCallbackEndpointReferences().isEmpty() ) {
+ RuntimeEndpointReference asyncEPR = (RuntimeEndpointReference) ep.getCallbackEndpointReferences().get(0);
+ // Place a link to the callback EPR into the message headers...
+ msg.getHeaders().put("ASYNC_CALLBACK", asyncEPR );
+ }
+
+ Message resultMsg = getNext().invoke(msg);
+
+ if (passByValue) {
+ // Note source and target operation swapped so result is in source class loader
+ if (resultMsg.isFault()) {
+ resultMsg.setFaultBody(mediator.copyFault(resultMsg.getBody(), sourceOperation, targetOperation));
+ } else {
+ if (sourceOperation.getOutputType() != null) {
+ resultMsg.setBody(mediator.copyOutput(resultMsg.getBody(), sourceOperation, targetOperation));
+ }
+ }
+ }
+
+ return resultMsg;
+ }
+
+}
diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/binding-local-runtime/src/main/java/org/apache/tuscany/sca/binding/local/LocalBindingProviderFactory.java b/sca-java-2.x/tags/2.0.1-RC1/modules/binding-local-runtime/src/main/java/org/apache/tuscany/sca/binding/local/LocalBindingProviderFactory.java
new file mode 100644
index 0000000000..f93a2dd11b
--- /dev/null
+++ b/sca-java-2.x/tags/2.0.1-RC1/modules/binding-local-runtime/src/main/java/org/apache/tuscany/sca/binding/local/LocalBindingProviderFactory.java
@@ -0,0 +1,51 @@
+/*
+ * 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.binding.local;
+
+import org.apache.tuscany.sca.core.ExtensionPointRegistry;
+import org.apache.tuscany.sca.provider.BindingProviderFactory;
+import org.apache.tuscany.sca.provider.ReferenceBindingProvider;
+import org.apache.tuscany.sca.provider.ServiceBindingProvider;
+import org.apache.tuscany.sca.runtime.RuntimeEndpoint;
+import org.apache.tuscany.sca.runtime.RuntimeEndpointReference;
+
+/**
+ * The factory for creating Local Binding providers
+ */
+public class LocalBindingProviderFactory implements BindingProviderFactory<LocalBinding> {
+
+ private ExtensionPointRegistry extensionPoints;
+
+ public LocalBindingProviderFactory(ExtensionPointRegistry extensionPoints) {
+ this.extensionPoints = extensionPoints;
+ }
+
+ public ReferenceBindingProvider createReferenceBindingProvider(RuntimeEndpointReference endpointReference) {
+ return new LocalReferenceBindingProvider(extensionPoints, endpointReference);
+ }
+
+ public ServiceBindingProvider createServiceBindingProvider(RuntimeEndpoint endpoint) {
+ return new LocalServiceBindingProvider(extensionPoints, endpoint);
+ }
+
+ public Class<LocalBinding> getModelType() {
+ return LocalBinding.class;
+ }
+}
diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/binding-local-runtime/src/main/java/org/apache/tuscany/sca/binding/local/LocalReferenceBindingProvider.java b/sca-java-2.x/tags/2.0.1-RC1/modules/binding-local-runtime/src/main/java/org/apache/tuscany/sca/binding/local/LocalReferenceBindingProvider.java
new file mode 100644
index 0000000000..0573a68f22
--- /dev/null
+++ b/sca-java-2.x/tags/2.0.1-RC1/modules/binding-local-runtime/src/main/java/org/apache/tuscany/sca/binding/local/LocalReferenceBindingProvider.java
@@ -0,0 +1,135 @@
+/*
+ * 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.binding.local;
+
+import org.apache.tuscany.sca.assembly.Endpoint;
+import org.apache.tuscany.sca.core.ExtensionPointRegistry;
+import org.apache.tuscany.sca.core.UtilityExtensionPoint;
+import org.apache.tuscany.sca.databinding.Mediator;
+import org.apache.tuscany.sca.interfacedef.Compatibility;
+import org.apache.tuscany.sca.interfacedef.InterfaceContract;
+import org.apache.tuscany.sca.interfacedef.InterfaceContractMapper;
+import org.apache.tuscany.sca.interfacedef.Operation;
+import org.apache.tuscany.sca.invocation.InvocationChain;
+import org.apache.tuscany.sca.invocation.Invoker;
+import org.apache.tuscany.sca.provider.EndpointReferenceProvider;
+import org.apache.tuscany.sca.runtime.RuntimeComponent;
+import org.apache.tuscany.sca.runtime.RuntimeComponentReference;
+import org.apache.tuscany.sca.runtime.RuntimeComponentService;
+import org.apache.tuscany.sca.runtime.RuntimeEndpoint;
+import org.apache.tuscany.sca.runtime.RuntimeEndpointReference;
+import org.oasisopen.sca.ServiceUnavailableException;
+
+/**
+ * The Local binding reference binding provider
+ */
+public class LocalReferenceBindingProvider implements EndpointReferenceProvider {
+
+ private RuntimeEndpointReference endpointReference;
+ private RuntimeComponent component;
+ private RuntimeComponentReference reference;
+ private LocalBinding binding;
+
+ private Mediator mediator;
+ private InterfaceContractMapper interfaceContractMapper;
+
+ public LocalReferenceBindingProvider(ExtensionPointRegistry extensionPoints, RuntimeEndpointReference endpointReference) {
+ this.endpointReference = endpointReference;
+ this.component = (RuntimeComponent)endpointReference.getComponent();
+ this.reference = (RuntimeComponentReference)endpointReference.getReference();
+ this.binding = (LocalBinding)endpointReference.getBinding();
+
+ UtilityExtensionPoint utilities = extensionPoints.getExtensionPoint(UtilityExtensionPoint.class);
+ this.mediator = utilities.getUtility(Mediator.class);
+ this.interfaceContractMapper = utilities.getUtility(InterfaceContractMapper.class);
+ }
+
+ public InterfaceContract getBindingInterfaceContract() {
+ // Check if there is a target
+ RuntimeEndpoint endpoint = (RuntimeEndpoint)endpointReference.getTargetEndpoint();
+ if (endpoint != null) {
+ return endpoint.getComponentTypeServiceInterfaceContract();
+ } else {
+ return endpointReference.getComponentTypeReferenceInterfaceContract();
+ }
+ }
+
+ public boolean supportsOneWayInvocation() {
+ return false;
+ }
+
+ private Invoker getInvoker(RuntimeEndpointReference epr, Operation operation) {
+ Endpoint target = epr.getTargetEndpoint();
+ if (target != null) {
+ RuntimeComponentService service = (RuntimeComponentService)target.getService();
+ if (service != null) { // not a callback wire
+ InvocationChain chain = ((RuntimeEndpoint)target).getInvocationChain(operation);
+
+ boolean passByValue = false;
+ Operation targetOp = chain.getTargetOperation();
+ if (!operation.getInterface().isRemotable()) {
+ if (interfaceContractMapper.isCompatibleByReference(operation, targetOp, Compatibility.SUBSET)) {
+ passByValue = false;
+ }
+ } else {
+ boolean allowsPBR = false;
+ if (allowsPBR && interfaceContractMapper.isCompatibleByReference(operation,
+ targetOp,
+ Compatibility.SUBSET)) {
+ passByValue = false;
+ } else if (interfaceContractMapper.isCompatibleByValue(operation, targetOp, Compatibility.SUBSET)) {
+ passByValue = true;
+ }
+ }
+ // it turns out that the chain source and target operations are the same, and are the operation
+ // from the target, not sure if thats by design or a bug. The SCA binding invoker needs to know
+ // the source and target class loaders so pass in the real source operation in the constructor
+ return chain == null ? null : new LocalBindingInvoker(chain, operation, mediator, passByValue, epr);
+ }
+ }
+ return null;
+ }
+
+ public Invoker createInvoker(Operation operation) {
+ Invoker invoker = getInvoker(endpointReference, operation);
+ if (invoker == null) {
+ throw new ServiceUnavailableException(
+ "Unable to create SCA binding invoker for local target " + component
+ .getName()
+ + " reference "
+ + reference.getName()
+ + " (bindingURI="
+ + binding.getURI()
+ + " operation="
+ + operation.getName()
+ + ")");
+ }
+ return invoker;
+ }
+
+ public void start() {
+ }
+
+ public void stop() {
+ }
+
+ public void configure() {
+ }
+}
diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/binding-local-runtime/src/main/java/org/apache/tuscany/sca/binding/local/LocalServiceBindingProvider.java b/sca-java-2.x/tags/2.0.1-RC1/modules/binding-local-runtime/src/main/java/org/apache/tuscany/sca/binding/local/LocalServiceBindingProvider.java
new file mode 100644
index 0000000000..5f8d9cd9fd
--- /dev/null
+++ b/sca-java-2.x/tags/2.0.1-RC1/modules/binding-local-runtime/src/main/java/org/apache/tuscany/sca/binding/local/LocalServiceBindingProvider.java
@@ -0,0 +1,59 @@
+/*
+ * 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.binding.local;
+
+import org.apache.tuscany.sca.core.ExtensionPointRegistry;
+import org.apache.tuscany.sca.interfacedef.InterfaceContract;
+import org.apache.tuscany.sca.provider.ServiceBindingProvider;
+import org.apache.tuscany.sca.runtime.RuntimeComponentService;
+import org.apache.tuscany.sca.runtime.RuntimeEndpoint;
+
+/**
+ * The Local binding service binding provider
+ */
+public class LocalServiceBindingProvider implements ServiceBindingProvider {
+ private RuntimeEndpoint endpoint;
+ private RuntimeComponentService service;
+
+ public LocalServiceBindingProvider(ExtensionPointRegistry extensionPoints, RuntimeEndpoint endpoint) {
+ this.endpoint = endpoint;
+ this.service = (RuntimeComponentService)endpoint.getService();
+
+ // if there is potentially a wire to this service that crosses the node boundary
+ // then we need to create a remote endpoint
+ if (service.getInterfaceContract().getInterface().isRemotable()) {
+ // TODO: should this throw some exception now for the local binding case?
+ }
+ }
+
+ public InterfaceContract getBindingInterfaceContract() {
+ return endpoint.getComponentTypeServiceInterfaceContract();
+ }
+
+ public boolean supportsOneWayInvocation() {
+ return false;
+ }
+
+ public void start() {
+ }
+
+ public void stop() {
+ }
+}
diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/binding-local-runtime/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor b/sca-java-2.x/tags/2.0.1-RC1/modules/binding-local-runtime/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor
new file mode 100644
index 0000000000..584842b354
--- /dev/null
+++ b/sca-java-2.x/tags/2.0.1-RC1/modules/binding-local-runtime/src/main/resources/META-INF/services/org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor
@@ -0,0 +1,19 @@
+# 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.
+
+# Implementation class for the artifact processor extension
+org.apache.tuscany.sca.assembly.xml.DefaultBeanModelProcessor;qname=http://tuscany.apache.org/xmlns/sca/1.1#binding.local,model=org.apache.tuscany.sca.binding.local.LocalBinding
diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/binding-local-runtime/src/main/resources/META-INF/services/org.apache.tuscany.sca.provider.BindingProviderFactory b/sca-java-2.x/tags/2.0.1-RC1/modules/binding-local-runtime/src/main/resources/META-INF/services/org.apache.tuscany.sca.provider.BindingProviderFactory
new file mode 100644
index 0000000000..ab36ae28b0
--- /dev/null
+++ b/sca-java-2.x/tags/2.0.1-RC1/modules/binding-local-runtime/src/main/resources/META-INF/services/org.apache.tuscany.sca.provider.BindingProviderFactory
@@ -0,0 +1,19 @@
+# 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.
+
+# Implementation class for the binding extension
+org.apache.tuscany.sca.binding.local.LocalBindingProviderFactory;model=org.apache.tuscany.sca.binding.local.LocalBinding
diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/binding-local-runtime/src/test/java/org/apace/tuscany/sca/binding/local/LocalBindingTestCase.java b/sca-java-2.x/tags/2.0.1-RC1/modules/binding-local-runtime/src/test/java/org/apace/tuscany/sca/binding/local/LocalBindingTestCase.java
new file mode 100644
index 0000000000..40cd96cb2e
--- /dev/null
+++ b/sca-java-2.x/tags/2.0.1-RC1/modules/binding-local-runtime/src/test/java/org/apace/tuscany/sca/binding/local/LocalBindingTestCase.java
@@ -0,0 +1,102 @@
+/*
+ * 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.apace.tuscany.sca.binding.local;
+
+import java.io.InputStream;
+
+import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.XMLStreamReader;
+
+import org.apache.tuscany.sca.assembly.Composite;
+import org.apache.tuscany.sca.assembly.SCABinding;
+import org.apache.tuscany.sca.assembly.SCABindingFactory;
+import org.apache.tuscany.sca.assembly.xml.CompositeModelResolver;
+import org.apache.tuscany.sca.contribution.processor.ExtensibleStAXArtifactProcessor;
+import org.apache.tuscany.sca.contribution.processor.ProcessorContext;
+import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor;
+import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessorExtensionPoint;
+import org.apache.tuscany.sca.core.DefaultExtensionPointRegistry;
+import org.apache.tuscany.sca.core.ExtensionPointRegistry;
+import org.apache.tuscany.sca.core.FactoryExtensionPoint;
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Test;
+
+/**
+ * SCABindingTestCase
+ *
+ * @version $Rev$ $Date$
+ */
+public class LocalBindingTestCase {
+
+ private XMLInputFactory inputFactory;
+ private StAXArtifactProcessor<Object> staxProcessor;
+ private CompositeModelResolver resolver;
+ private ExtensionPointRegistry extensionPoints;
+
+ @Before
+ public void init() throws Exception {
+ extensionPoints = new DefaultExtensionPointRegistry();
+ inputFactory = XMLInputFactory.newInstance();
+
+ StAXArtifactProcessorExtensionPoint staxProcessors =
+ extensionPoints.getExtensionPoint(StAXArtifactProcessorExtensionPoint.class);
+ staxProcessor = new ExtensibleStAXArtifactProcessor(staxProcessors, inputFactory, null);
+
+ resolver = new CompositeModelResolver(null, null);
+ }
+
+ @Test
+ public void testSCABindingFactory() {
+ SCABindingFactory factory =
+ extensionPoints.getExtensionPoint(FactoryExtensionPoint.class).getFactory(SCABindingFactory.class);
+
+ Assert.assertNotNull(factory.createSCABinding());
+ }
+
+ @Test
+ @Ignore
+ public void testBuildModel() {
+ try {
+ InputStream is = getClass().getResourceAsStream("/Calculator.composite");
+ XMLStreamReader reader = inputFactory.createXMLStreamReader(is);
+ ProcessorContext context = new ProcessorContext(extensionPoints);
+ Composite composite = (Composite)staxProcessor.read(reader, context);
+
+ is.close();
+ Assert.assertNotNull(composite);
+
+ resolver.addModel(composite, context);
+
+ staxProcessor.resolve(composite, resolver, new ProcessorContext());
+
+ SCABinding referenceSCABinding =
+ (SCABinding)composite.getComponents().get(0).getReferences().get(0).getBindings().get(0);
+ SCABinding serviceSCABinding =
+ (SCABinding)composite.getComponents().get(1).getServices().get(0).getBindings().get(0);
+
+ Assert.assertNotNull(referenceSCABinding);
+ Assert.assertNotNull(serviceSCABinding);
+ } catch (Exception ex) {
+ Assert.fail(ex.getMessage());
+ }
+
+ }
+}
diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/binding-local-runtime/src/test/java/org/apace/tuscany/sca/binding/local/ReadTestCase.java b/sca-java-2.x/tags/2.0.1-RC1/modules/binding-local-runtime/src/test/java/org/apace/tuscany/sca/binding/local/ReadTestCase.java
new file mode 100644
index 0000000000..9c48d72be2
--- /dev/null
+++ b/sca-java-2.x/tags/2.0.1-RC1/modules/binding-local-runtime/src/test/java/org/apace/tuscany/sca/binding/local/ReadTestCase.java
@@ -0,0 +1,93 @@
+/*
+ * 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.apace.tuscany.sca.binding.local;
+
+import static org.junit.Assert.assertNotNull;
+
+import java.io.InputStream;
+
+import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.XMLStreamReader;
+
+import org.apache.tuscany.sca.assembly.ComponentType;
+import org.apache.tuscany.sca.assembly.Composite;
+import org.apache.tuscany.sca.binding.local.LocalBinding;
+import org.apache.tuscany.sca.contribution.processor.ExtensibleStAXArtifactProcessor;
+import org.apache.tuscany.sca.contribution.processor.ProcessorContext;
+import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor;
+import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessorExtensionPoint;
+import org.apache.tuscany.sca.core.DefaultExtensionPointRegistry;
+import org.apache.tuscany.sca.core.ExtensionPointRegistry;
+import org.junit.Assert;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+/**
+ * Test reading WSDL interfaces.
+ *
+ * @version $Rev$ $Date$
+ */
+public class ReadTestCase {
+
+ private static XMLInputFactory inputFactory;
+ private static StAXArtifactProcessor<Object> staxProcessor;
+ private static ProcessorContext context;
+
+ @BeforeClass
+ public static void setUp() throws Exception {
+ ExtensionPointRegistry extensionPoints = new DefaultExtensionPointRegistry();
+ context = new ProcessorContext(extensionPoints);
+
+ inputFactory = XMLInputFactory.newInstance();
+ StAXArtifactProcessorExtensionPoint staxProcessors = extensionPoints.getExtensionPoint(StAXArtifactProcessorExtensionPoint.class);
+ staxProcessor = new ExtensibleStAXArtifactProcessor(staxProcessors, inputFactory, null);
+ }
+
+ @Test
+ public void testReadComponentType() throws Exception {
+ InputStream is = getClass().getResourceAsStream("/CalculatorServiceImpl.componentType");
+ XMLStreamReader reader = inputFactory.createXMLStreamReader(is);
+ ComponentType componentType = (ComponentType)staxProcessor.read(reader, context);
+ assertNotNull(componentType);
+
+ LocalBinding referenceSCABinding = (LocalBinding) componentType.getReferences().get(0).getBindings().get(0);
+ assertNotNull(referenceSCABinding);
+
+ LocalBinding serviceSCABinding = (LocalBinding) componentType.getServices().get(0).getBindings().get(0);
+ assertNotNull(serviceSCABinding);
+
+ //new PrintUtil(System.out).print(componentType);
+ }
+
+ @Test
+ public void testReadComposite() throws Exception {
+ InputStream is = getClass().getResourceAsStream("/Calculator.composite");
+ XMLStreamReader reader = inputFactory.createXMLStreamReader(is);
+ Composite composite = (Composite)staxProcessor.read(reader, context);
+ assertNotNull(composite);
+
+ LocalBinding referenceSCABinding = (LocalBinding) composite.getComponents().get(0).getReferences().get(0).getBindings().get(0);
+ LocalBinding serviceSCABinding = (LocalBinding) composite.getComponents().get(1).getServices().get(0).getBindings().get(0);
+
+ Assert.assertNotNull(referenceSCABinding);
+ Assert.assertNotNull(serviceSCABinding);
+ }
+
+}
diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/binding-local-runtime/src/test/java/org/apace/tuscany/sca/binding/local/WriteTestCase.java b/sca-java-2.x/tags/2.0.1-RC1/modules/binding-local-runtime/src/test/java/org/apace/tuscany/sca/binding/local/WriteTestCase.java
new file mode 100644
index 0000000000..dcf2827a1f
--- /dev/null
+++ b/sca-java-2.x/tags/2.0.1-RC1/modules/binding-local-runtime/src/test/java/org/apace/tuscany/sca/binding/local/WriteTestCase.java
@@ -0,0 +1,88 @@
+/*
+ * 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.apace.tuscany.sca.binding.local;
+
+import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
+
+import java.io.ByteArrayOutputStream;
+import java.io.InputStream;
+
+import javax.xml.stream.XMLInputFactory;
+import javax.xml.stream.XMLOutputFactory;
+
+import org.apache.tuscany.sca.assembly.ComponentType;
+import org.apache.tuscany.sca.assembly.Composite;
+import org.apache.tuscany.sca.contribution.processor.ExtensibleStAXArtifactProcessor;
+import org.apache.tuscany.sca.contribution.processor.ProcessorContext;
+import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessor;
+import org.apache.tuscany.sca.contribution.processor.StAXArtifactProcessorExtensionPoint;
+import org.apache.tuscany.sca.core.DefaultExtensionPointRegistry;
+import org.junit.BeforeClass;
+import org.junit.Ignore;
+import org.junit.Test;
+
+/**
+ * Test reading/write WSDL interfaces.
+ *
+ * @version $Rev$ $Date$
+ */
+public class WriteTestCase {
+
+ private static StAXArtifactProcessor<Object> staxProcessor;
+ private static XMLInputFactory inputFactory;
+ private static XMLOutputFactory outputFactory;
+ private static ProcessorContext context;
+
+ @BeforeClass
+ public static void setUp() throws Exception {
+ DefaultExtensionPointRegistry extensionPoints = new DefaultExtensionPointRegistry();
+ context = new ProcessorContext(extensionPoints);
+ StAXArtifactProcessorExtensionPoint staxProcessors = extensionPoints.getExtensionPoint(StAXArtifactProcessorExtensionPoint.class);
+ inputFactory = XMLInputFactory.newInstance();
+ outputFactory = XMLOutputFactory.newInstance();
+ staxProcessor = new ExtensibleStAXArtifactProcessor(staxProcessors, inputFactory, outputFactory);
+ }
+
+ @Test
+ @Ignore // broken in 2.0 bring up
+ public void testReadWriteComponentType() throws Exception {
+ InputStream is = getClass().getResourceAsStream("/CalculatorServiceImpl.componentType");
+ ComponentType componentType = (ComponentType)staxProcessor.read(inputFactory.createXMLStreamReader(is), context);
+ assertNotNull(componentType);
+ ByteArrayOutputStream bos = new ByteArrayOutputStream();
+ staxProcessor.write(componentType, outputFactory.createXMLStreamWriter(bos), context);
+ assertEquals("<?xml version='1.0' encoding='UTF-8'?><componentType xmlns=\"http://docs.oasis-open.org/ns/opencsa/sca/200912\" ><service name=\"CalculatorService\"><binding.sca /><interface.java interface=\"calculator.CalculatorService\" /></service><reference name=\"addService\"><binding.sca /><interface.java interface=\"calculator.AddService\" /></reference></componentType>",
+ bos.toString());
+ }
+
+ @Test
+ @Ignore // broken in 2.0 bring up
+ public void testReadWriteComposite() throws Exception {
+ InputStream is = getClass().getResourceAsStream("/Calculator.composite");
+ Composite composite = (Composite)staxProcessor.read(inputFactory.createXMLStreamReader(is), context);
+ assertNotNull(composite);
+ ByteArrayOutputStream bos = new ByteArrayOutputStream();
+ staxProcessor.write(composite, outputFactory.createXMLStreamWriter(bos), context);
+ assertEquals("<?xml version='1.0' encoding='UTF-8'?><composite xmlns=\"http://docs.oasis-open.org/ns/opencsa/sca/200912\" targetNamespace=\"http://calc\" name=\"Calculator\"><service name=\"CalculatorService\" promote=\"CalculatorServiceComponent\"><binding.sca /><interface.java interface=\"calculator.CalculatorService\" /></service><component name=\"CalculatorServiceComponent\"><implementation.java class=\"calculator.CalculatorServiceImpl\" /><reference name=\"addService\" target=\"AddServiceComponent\"><binding.sca /></reference><reference name=\"subtractService\" target=\"SubtractServiceComponent\" /><reference name=\"multiplyService\" target=\"MultiplyServiceComponent\" /><reference name=\"divideService\" target=\"DivideServiceComponent\" /></component><component name=\"AddServiceComponent\"><implementation.java class=\"calculator.AddServiceImpl\" /><service name=\"AddService\"><binding.sca /><interface.java interface=\"calculator.AddService\" /></service></component><component name=\"SubtractServiceComponent\"><implementation.java class=\"calculator.SubtractServiceImpl\" /></component><component name=\"MultiplyServiceComponent\"><implementation.java class=\"calculator.MultiplyServiceImpl\" /></component><component name=\"DivideServiceComponent\"><implementation.java class=\"calculator.DivideServiceImpl\" /></component></composite>",
+ bos.toString());
+ }
+
+}
diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/binding-local-runtime/src/test/resources/Calculator.composite b/sca-java-2.x/tags/2.0.1-RC1/modules/binding-local-runtime/src/test/resources/Calculator.composite
new file mode 100644
index 0000000000..f0f5373399
--- /dev/null
+++ b/sca-java-2.x/tags/2.0.1-RC1/modules/binding-local-runtime/src/test/resources/Calculator.composite
@@ -0,0 +1,60 @@
+<?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"
+ xmlns:calc="http://calc"
+ targetNamespace="http://calc"
+ name="Calculator">
+ <service name="CalculatorService" promote="CalculatorServiceComponent">
+ <interface.java interface="calculator.CalculatorService"/>
+ <tuscany:binding.local/>
+ </service>
+
+ <component name="CalculatorServiceComponent">
+ <implementation.java class="calculator.CalculatorServiceImpl"/>
+ <reference name="addService" target="AddServiceComponent">
+ <tuscany:binding.local/>
+ </reference>
+ <reference name="subtractService" target="SubtractServiceComponent"/>
+ <reference name="multiplyService" target="MultiplyServiceComponent"/>
+ <reference name="divideService" target="DivideServiceComponent"/>
+ </component>
+
+ <component name="AddServiceComponent">
+ <implementation.java class="calculator.AddServiceImpl"/>
+ <service name="AddService">
+ <interface.java interface="calculator.AddService"/>
+ <tuscany:binding.local/>
+ </service>
+ </component>
+
+ <component name="SubtractServiceComponent">
+ <implementation.java class="calculator.SubtractServiceImpl"/>
+ </component>
+
+ <component name="MultiplyServiceComponent">
+ <implementation.java class="calculator.MultiplyServiceImpl"/>
+ </component>
+
+ <component name="DivideServiceComponent">
+ <implementation.java class="calculator.DivideServiceImpl"/>
+ </component>
+
+</composite>
diff --git a/sca-java-2.x/tags/2.0.1-RC1/modules/binding-local-runtime/src/test/resources/CalculatorServiceImpl.componentType b/sca-java-2.x/tags/2.0.1-RC1/modules/binding-local-runtime/src/test/resources/CalculatorServiceImpl.componentType
new file mode 100644
index 0000000000..eab538e254
--- /dev/null
+++ b/sca-java-2.x/tags/2.0.1-RC1/modules/binding-local-runtime/src/test/resources/CalculatorServiceImpl.componentType
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="ASCII"?>
+<!--
+ * 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.
+-->
+<componentType xmlns="http://docs.oasis-open.org/ns/opencsa/sca/200912"
+ xmlns:tuscany="http://tuscany.apache.org/xmlns/sca/1.1" >
+
+ <service name="CalculatorService">
+ <interface.java interface="calculator.CalculatorService" />
+ <tuscany:binding.local/>
+ </service>
+
+ <reference name="addService">
+ <interface.java interface="calculator.AddService" />
+ <tuscany:binding.local/>
+ </reference>
+
+</componentType>
+ \ No newline at end of file