Add a test that shows how to dynamically update the target url of the refernce ws binding

git-svn-id: https://svn.apache.org/repos/asf/tuscany/sca-java-2.x/trunk@1368515 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/testing/itest/dynamic/src/test/java/sample/HelloworldReferenceUpdatingImpl.java b/testing/itest/dynamic/src/test/java/sample/HelloworldReferenceUpdatingImpl.java
new file mode 100644
index 0000000..534bec8
--- /dev/null
+++ b/testing/itest/dynamic/src/test/java/sample/HelloworldReferenceUpdatingImpl.java
@@ -0,0 +1,44 @@
+/*

+ * 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 sample;

+

+import org.apache.tuscany.sca.runtime.TuscanyComponentContext;

+import org.apache.tuscany.sca.runtime.TuscanyServiceReference;

+import org.oasisopen.sca.annotation.Context;

+import org.oasisopen.sca.annotation.Reference;

+

+

+public class HelloworldReferenceUpdatingImpl implements Helloworld {

+

+    @Reference

+    Helloworld ref;

+    

+    @Context

+    public TuscanyComponentContext tuscanyComponentContext;

+    

+    public String sayHello(String name) {

+        

+        TuscanyServiceReference<Helloworld> tsr = tuscanyComponentContext.getServiceReference(Helloworld.class, "ref");

+        tsr.setBindingURI("http://localhost:8080/testComponent/Helloworld");

+        

+        return "HelloworldReferenceImpl " + ref.sayHello(name);

+    }

+    

+

+}

diff --git a/testing/itest/dynamic/src/test/java/test/ReferenceUpdateTestCase.java b/testing/itest/dynamic/src/test/java/test/ReferenceUpdateTestCase.java
new file mode 100644
index 0000000..cd2fd7f
--- /dev/null
+++ b/testing/itest/dynamic/src/test/java/test/ReferenceUpdateTestCase.java
@@ -0,0 +1,134 @@
+/*

+ * 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 test;

+

+import javax.xml.namespace.QName;

+

+import junit.framework.Assert;

+import junit.framework.TestCase;

+

+import org.apache.tuscany.sca.Node;

+import org.apache.tuscany.sca.TuscanyRuntime;

+import org.apache.tuscany.sca.assembly.AssemblyFactory;

+import org.apache.tuscany.sca.assembly.Component;

+import org.apache.tuscany.sca.assembly.ComponentReference;

+import org.apache.tuscany.sca.assembly.Composite;

+import org.apache.tuscany.sca.binding.ws.WebServiceBinding;

+import org.apache.tuscany.sca.binding.ws.WebServiceBindingFactory;

+import org.apache.tuscany.sca.contribution.Contribution;

+import org.apache.tuscany.sca.contribution.ContributionFactory;

+import org.apache.tuscany.sca.contribution.resolver.ExtensibleModelResolver;

+import org.apache.tuscany.sca.contribution.resolver.ModelResolver;

+import org.apache.tuscany.sca.contribution.resolver.ModelResolverExtensionPoint;

+import org.apache.tuscany.sca.core.ExtensionPointRegistry;

+import org.apache.tuscany.sca.core.FactoryExtensionPoint;

+import org.apache.tuscany.sca.implementation.java.JavaImplementation;

+import org.apache.tuscany.sca.implementation.java.JavaImplementationFactory;

+import org.junit.Test;

+

+import sample.Helloworld;

+import sample.HelloworldReferenceUpdatingImpl;

+

+/**

+ * This shows dynamically altering a ws reference target uri during a component invocation.

+ * Same as the WSReferenceTestCase but uses a different component impl class and sets an 

+ * incorrect target uri on the reference initially which is then updated during the invocation

+ */

+public class ReferenceUpdateTestCase extends TestCase {

+

+    private TuscanyRuntime tuscanyRuntime;

+    private ExtensionPointRegistry extensionPoints;

+    private FactoryExtensionPoint modelFactories;

+    private Node node;

+    private WSServiceTestCase wsService;

+

+    @Override

+    protected void setUp() throws Exception {

+        tuscanyRuntime = TuscanyRuntime.newInstance();

+        extensionPoints = tuscanyRuntime.getExtensionPointRegistry();

+        modelFactories = extensionPoints.getExtensionPoint(FactoryExtensionPoint.class);

+        node = tuscanyRuntime.createNode();

+        

+        // start the WSServicetestCase service

+        wsService = new WSServiceTestCase();

+        wsService.setUp();

+        wsService.testInvoke();

+    }

+

+    @Test

+    public void testInvoke() throws Exception {

+

+        // Create a contribution

+        ContributionFactory contributionFactory = modelFactories.getFactory(ContributionFactory.class);

+        Contribution contribution = contributionFactory.createContribution();

+        contribution.setURI("testContribution");

+        ModelResolverExtensionPoint modelResolvers = extensionPoints.getExtensionPoint(ModelResolverExtensionPoint.class);

+        ModelResolver modelResolver = new ExtensibleModelResolver(contribution, modelResolvers, modelFactories);

+        contribution.setModelResolver(modelResolver);

+        contribution.setClassLoader(HelloworldReferenceUpdatingImpl.class.getClassLoader());

+

+        // Create a composite

+        AssemblyFactory assemblyFactory = modelFactories.getFactory(AssemblyFactory.class);

+        Composite composite = assemblyFactory.createComposite();

+        composite.setURI("testComposite");

+        composite.setName(new QName("testComposite"));

+

+        // create a component

+        Component component = assemblyFactory.createComponent();

+        component.setName("testComponent");        

+        

+        // create an implementation and set it on the component

+        JavaImplementationFactory javaImplementationFactory = modelFactories.getFactory(JavaImplementationFactory.class);

+        JavaImplementation javaImplementation = javaImplementationFactory.createJavaImplementation(HelloworldReferenceUpdatingImpl.class);

+        javaImplementation.setJavaClass(HelloworldReferenceUpdatingImpl.class);

+        component.setImplementation(javaImplementation);

+

+        // create a WS reference

+        ComponentReference cr = assemblyFactory.createComponentReference();

+        cr.setName("ref");

+        WebServiceBindingFactory webServiceBindingFactory = modelFactories.getFactory(WebServiceBindingFactory.class);

+        WebServiceBinding wsBinding = webServiceBindingFactory.createWebServiceBinding();

+        wsBinding.setURI("http://localhost:8080/some/incorrect/url/that/test/will/fix");

+        cr.getBindings().add(wsBinding);

+

+        // Add the WS service to the component

+        component.getReferences().add(cr);

+

+        // add the component to the composite

+        composite.getComponents().add(component);

+

+        // add the composite to the contribution

+        contribution.addComposite(composite);

+

+        // Now install the contribution and start the composite

+        node.installContribution(contribution, null);

+        node.startComposite(contribution.getURI(), composite.getURI());

+

+        // test that the service has started and can be invoked

+        Helloworld service = node.getService(Helloworld.class, "testComponent/Helloworld");

+        Assert.assertEquals("HelloworldReferenceImpl Hello Ariana", service.sayHello("Ariana"));

+    }

+

+    @Override

+    protected void tearDown() throws Exception {

+        node.stop();

+        tuscanyRuntime.stop();

+        wsService.tearDown();

+    }

+}