summaryrefslogtreecommitdiffstats
path: root/branches/sca-android/samples/callback-ws-client
diff options
context:
space:
mode:
Diffstat (limited to 'branches/sca-android/samples/callback-ws-client')
-rw-r--r--branches/sca-android/samples/callback-ws-client/README311
-rw-r--r--branches/sca-android/samples/callback-ws-client/build.xml73
-rw-r--r--branches/sca-android/samples/callback-ws-client/callback-ws-client.pngbin0 -> 8812 bytes
-rw-r--r--branches/sca-android/samples/callback-ws-client/callback-ws-client.svg204
-rw-r--r--branches/sca-android/samples/callback-ws-client/pom.xml86
-rw-r--r--branches/sca-android/samples/callback-ws-client/src/main/java/myapp/MyClient.java29
-rw-r--r--branches/sca-android/samples/callback-ws-client/src/main/java/myapp/MyClientImpl.java64
-rw-r--r--branches/sca-android/samples/callback-ws-client/src/main/java/myserver/MyService.java34
-rw-r--r--branches/sca-android/samples/callback-ws-client/src/main/java/myserver/MyServiceCallback.java30
-rw-r--r--branches/sca-android/samples/callback-ws-client/src/main/resources/META-INF/sca-contribution.xml22
-rw-r--r--branches/sca-android/samples/callback-ws-client/src/main/resources/myapp.composite36
-rw-r--r--branches/sca-android/samples/callback-ws-client/src/test/java/myapp/CallbackClientTestCase.java53
12 files changed, 942 insertions, 0 deletions
diff --git a/branches/sca-android/samples/callback-ws-client/README b/branches/sca-android/samples/callback-ws-client/README
new file mode 100644
index 0000000000..66121362c9
--- /dev/null
+++ b/branches/sca-android/samples/callback-ws-client/README
@@ -0,0 +1,311 @@
+Callback Web Services Client Sample
+===================================
+This sample demonstrates an SCA client that sends service requests to a
+remote server and receives asynchronous callbacks from the server, using
+Web service bindings for the service and the callback.
+
+The README in the samples directory (the directory above this) provides
+general instructions about building and running samples. Take a look
+there first.
+
+If you just want to run it to see what happens, you need to start the
+server first, so open a command prompt and navigate to the
+callback-ws-service sample directory and do:
+
+ant run
+
+OR if you don't have ant, on Windows do:
+
+java -cp ..\..\lib\tuscany-sca-manifest.jar;target\sample-callback-ws-service.jar myserver.CallbackServer
+
+and on *nix do:
+
+java -cp ../../lib/tuscany-sca-manifest.jar:target/sample-callback-ws-service.jar myserver.CallbackServer
+
+Once the server is running open a command prompt, navigate to this sample
+directory and do:
+
+ant run
+
+OR if you don't have ant, on Windows do:
+
+java -cp ..\..\lib\tuscany-sca-manifest.jar;target\sample-callback-ws-client.jar myapp.MyClientImpl
+
+and on *nix do:
+
+java -cp ../../lib/tuscany-sca-manifest.jar:target/sample-callback-ws-client.jar myapp.MyClientImpl
+
+
+Sample Overview
+---------------
+The sample has a single component that has a reference with a service
+interface and a callback interface, with Web service bindings for both
+these interfaces. The service interface binding URI identifies the
+service exposed by the callback-ws-service sample.
+
+callback-ws-client/
+ src/
+ main/
+ java/
+ myapp/
+ MyClient.java - interface description for
+ MyClientComponent
+ MyClientImpl.java - component implementation
+ myserver/
+ MyService.java - interface description for
+ MyServiceComponent
+ MyServiceCallback.java - interface description for callback
+ resources/
+ myapp.composite - the SCA assembly for this sample
+ test/
+ java/
+ myapp/
+ CallbackClientTestCase.java - JUnit test case
+ callback-ws-client.png - a pictorial representation of the
+ sample .composite file
+ build.xml - the Ant build file
+ pom.xml - the Maven build file
+
+Building And Running The Sample Using Ant
+-----------------------------------------
+With the binary distribution the sample can be built and run using Ant.
+Before you do this, run the callback-ws-service sample to start up the
+service that the client will talk to. Take a look at the README in
+that sample and you will see you need the following commands:
+
+cd callback-ws-service
+ant run
+
+You can then compile and run this sample using the following commands:
+
+cd callback-ws-client
+ant compile
+ant run
+
+You should see the following output from the run target.
+
+run:
+ [java] 15-Jan-2008 10:21:38 org.apache.tuscany.sca.node.impl.SCADomainProxy
+Impl init
+ [java] INFO: Domain will be started stand-alone as domain URL is not provid
+ed
+ [java] 15-Jan-2008 10:21:39 org.apache.tuscany.sca.domain.impl.SCADomainImp
+l registerNode
+ [java] INFO: Registered node: http://L3AW203:1336 at endpoint http://L3AW20
+3:1336
+ [java] 15-Jan-2008 10:21:39 org.apache.tuscany.sca.node.impl.SCADomainProxy
+Impl createRuntime
+ [java] INFO: Domain management configured from file:/C:/simon/tuscany/relea
+se/sca-r1.1-rc2/tuscany-sca-1.1-incubating-SNAPSHOT/lib/tuscany-sca-all-1.1-incu
+bating-SNAPSHOT.jar
+ [java] Warning: Running an XSLT 1.0 stylesheet with an XSLT 2.0 processor
+ [java] Warning: Running an XSLT 1.0 stylesheet with an XSLT 2.0 processor
+ [java] Warning: Running an XSLT 1.0 stylesheet with an XSLT 2.0 processor
+ [java] Warning: Running an XSLT 1.0 stylesheet with an XSLT 2.0 processor
+ [java] Warning: Running an XSLT 1.0 stylesheet with an XSLT 2.0 processor
+ [java] 15-Jan-2008 10:21:48 org.apache.tuscany.sca.http.jetty.JettyServer a
+ddServletMapping
+ [java] INFO: Added Servlet mapping: http://L3AW203:1336/SCADomainEventServi
+ceProxyComponent
+ [java] 15-Jan-2008 10:21:48 org.apache.tuscany.sca.http.jetty.JettyServer a
+ddServletMapping
+ [java] INFO: Added Servlet mapping: http://L3AW203:1336/SCADomainAPIService
+ProxyComponent
+ [java] 15-Jan-2008 10:21:48 org.apache.tuscany.sca.http.jetty.JettyServer a
+ddServletMapping
+ [java] INFO: Added Servlet mapping: http://L3AW203:1336/SCANodeManagerCompo
+nent/SCANodeManagerService
+ [java] 15-Jan-2008 10:21:48 org.apache.tuscany.sca.http.jetty.JettyServer a
+ddServletMapping
+ [java] INFO: Added Servlet mapping: http://L3AW203:1336/SCANodeManagerCompo
+nent/ComponentManagerService/*
+ [java] 15-Jan-2008 10:21:48 org.apache.tuscany.sca.http.jetty.JettyServer a
+ddServletMapping
+ [java] INFO: Added Servlet mapping: http://L3AW203:1336/SCANodeManagerCompo
+nent/ComponentManagerService
+ [java] 15-Jan-2008 10:21:48 org.apache.tuscany.sca.http.jetty.JettyServer a
+ddServletMapping
+ [java] INFO: Added Servlet mapping: http://L3AW203:1336/SCADomain/scaDomain
+.js
+ [java] 15-Jan-2008 10:21:48 org.apache.tuscany.sca.node.impl.SCANodeImpl ac
+tivateComposite
+ [java] INFO: Building composite: {http://myapp}myapp
+ [java] Warning: Running an XSLT 1.0 stylesheet with an XSLT 2.0 processor
+ [java] Warning: Running an XSLT 1.0 stylesheet with an XSLT 2.0 processor
+ [java] 15-Jan-2008 10:21:48 org.apache.tuscany.sca.node.impl.SCANodeImpl st
+artComposite
+ [java] INFO: Starting composite: {http://myapp}myapp
+ [java] 15-Jan-2008 10:21:48 org.apache.tuscany.sca.http.jetty.JettyServer a
+ddServletMapping
+ [java] INFO: Added Servlet mapping: http://L3AW203:1336/MyClientComponent/m
+yService
+ [java] aClientMethod on thread Thread[main,5,main]
+ [java] aClientMethod return from someMethod on thread Thread[main,5,main]
+ [java] receiveResult on thread Thread[pool-1-thread-2,5,main]
+ [java] Result: -> someMethod -> receiveResult
+ [java] Closing the domain
+ [java] 15-Jan-2008 10:21:54 org.apache.tuscany.sca.node.impl.SCANodeImpl st
+opComposite
+ [java] INFO: Stopping composite: {http://myapp}myapp
+
+Building And Running The Sample Using Maven
+-------------------------------------------
+With either the binary or source distributions the sample can be built and
+run using Maven as follows. When using Maven you don't need to run the
+callback-ws-service sample first as Maven does this for you. With Maven,
+both client and server code run in the same JVM, which rather defeats the
+purpose of this sample (to show a standalone SCA client), but it's good
+enough for a unit test.
+
+cd callback-ws-client
+mvn
+
+You should see the following output from the test phase.
+
+-------------------------------------------------------
+ T E S T S
+-------------------------------------------------------
+Running myapp.CallbackClientTestCase
+15-Jan-2008 10:17:46 org.apache.tuscany.sca.node.impl.SCADomainProxyImpl init
+INFO: Domain will be started stand-alone as domain URL is not provided
+15-Jan-2008 10:17:46 org.apache.tuscany.sca.domain.impl.SCADomainImpl registerNo
+de
+INFO: Registered node: http://L3AW203:1322 at endpoint http://L3AW203:1322
+15-Jan-2008 10:17:46 org.apache.tuscany.sca.node.impl.SCADomainProxyImpl createR
+untime
+INFO: Domain management configured from file:/C:/Documents%20and%20Settings/slaw
+s/.m2/repository/org/apache/tuscany/sca/tuscany-node-impl/1.1-incubating-SNAPSHO
+T/tuscany-node-impl-1.1-incubating-SNAPSHOT.jar
+15-Jan-2008 10:17:52 org.apache.catalina.core.StandardEngine start
+INFO: Starting Servlet Engine: Apache Tomcat/6.0.10
+15-Jan-2008 10:17:53 org.apache.catalina.startup.ContextConfig defaultWebConfig
+INFO: No default web.xml
+15-Jan-2008 10:17:53 org.apache.catalina.startup.DigesterFactory register
+WARNING: Could not get url for /javax/servlet/jsp/resources/jsp_2_0.xsd
+15-Jan-2008 10:17:53 org.apache.catalina.startup.DigesterFactory register
+WARNING: Could not get url for /javax/servlet/jsp/resources/web-jsptaglibrary_1_
+1.dtd
+15-Jan-2008 10:17:53 org.apache.catalina.startup.DigesterFactory register
+WARNING: Could not get url for /javax/servlet/jsp/resources/web-jsptaglibrary_1_
+2.dtd
+15-Jan-2008 10:17:53 org.apache.catalina.startup.DigesterFactory register
+WARNING: Could not get url for /javax/servlet/jsp/resources/web-jsptaglibrary_2_
+0.xsd
+15-Jan-2008 10:17:53 org.apache.catalina.startup.DigesterFactory register
+WARNING: Could not get url for /javax/servlet/resources/j2ee_web_services_1_1.xs
+d
+15-Jan-2008 10:17:53 org.apache.coyote.http11.Http11Protocol init
+INFO: Initializing Coyote HTTP/1.1 on http-1322
+15-Jan-2008 10:17:53 org.apache.coyote.http11.Http11Protocol start
+INFO: Starting Coyote HTTP/1.1 on http-1322
+15-Jan-2008 10:17:53 org.apache.tuscany.sca.http.tomcat.TomcatServer addServletM
+apping
+INFO: Added Servlet mapping: http://L3AW203:1322/SCADomainEventServiceProxyCompo
+nent
+15-Jan-2008 10:17:53 org.apache.tuscany.sca.http.tomcat.TomcatServer addServletM
+apping
+INFO: Added Servlet mapping: http://L3AW203:1322/SCADomainAPIServiceProxyCompone
+nt
+15-Jan-2008 10:17:53 org.apache.tuscany.sca.http.tomcat.TomcatServer addServletM
+apping
+INFO: Added Servlet mapping: http://L3AW203:1322/SCANodeManagerComponent/SCANode
+ManagerService
+15-Jan-2008 10:17:53 org.apache.tuscany.sca.http.tomcat.TomcatServer addServletM
+apping
+INFO: Added Servlet mapping: http://L3AW203:1322/SCANodeManagerComponent/Compone
+ntManagerService/*
+15-Jan-2008 10:17:53 org.apache.tuscany.sca.http.tomcat.TomcatServer addServletM
+apping
+INFO: Added Servlet mapping: http://L3AW203:1322/SCANodeManagerComponent/Compone
+ntManagerService
+15-Jan-2008 10:17:53 org.apache.tuscany.sca.http.tomcat.TomcatServer addServletM
+apping
+INFO: Added Servlet mapping: http://L3AW203:1322/SCADomain/scaDomain.js
+15-Jan-2008 10:17:53 org.apache.tuscany.sca.node.impl.SCANodeImpl activateCompos
+ite
+INFO: Building composite: {http://callbackws}callbackws
+15-Jan-2008 10:17:54 org.apache.tuscany.sca.node.impl.SCANodeImpl startComposite
+
+INFO: Starting composite: {http://callbackws}callbackws
+15-Jan-2008 10:17:54 org.apache.catalina.core.StandardEngine start
+INFO: Starting Servlet Engine: Apache Tomcat/6.0.10
+15-Jan-2008 10:17:54 org.apache.catalina.startup.ContextConfig defaultWebConfig
+INFO: No default web.xml
+15-Jan-2008 10:17:54 org.apache.coyote.http11.Http11Protocol init
+INFO: Initializing Coyote HTTP/1.1 on http-8086
+15-Jan-2008 10:17:54 org.apache.coyote.http11.Http11Protocol start
+INFO: Starting Coyote HTTP/1.1 on http-8086
+15-Jan-2008 10:17:54 org.apache.tuscany.sca.http.tomcat.TomcatServer addServletM
+apping
+INFO: Added Servlet mapping: http://L3AW203:8086/MyServiceComponent
+15-Jan-2008 10:17:54 org.apache.tuscany.sca.node.impl.SCADomainProxyImpl init
+INFO: Domain will be started stand-alone as domain URL is not provided
+15-Jan-2008 10:17:54 org.apache.tuscany.sca.domain.impl.SCADomainImpl registerNo
+de
+INFO: Registered node: http://L3AW203:1323 at endpoint http://L3AW203:1323
+15-Jan-2008 10:17:54 org.apache.tuscany.sca.node.impl.SCADomainProxyImpl createR
+untime
+INFO: Domain management configured from file:/C:/Documents%20and%20Settings/slaw
+s/.m2/repository/org/apache/tuscany/sca/tuscany-node-impl/1.1-incubating-SNAPSHO
+T/tuscany-node-impl-1.1-incubating-SNAPSHOT.jar
+15-Jan-2008 10:17:56 org.apache.catalina.core.StandardEngine start
+INFO: Starting Servlet Engine: Apache Tomcat/6.0.10
+15-Jan-2008 10:17:56 org.apache.catalina.startup.ContextConfig defaultWebConfig
+INFO: No default web.xml
+15-Jan-2008 10:17:56 org.apache.coyote.http11.Http11Protocol init
+INFO: Initializing Coyote HTTP/1.1 on http-1323
+15-Jan-2008 10:17:56 org.apache.coyote.http11.Http11Protocol start
+INFO: Starting Coyote HTTP/1.1 on http-1323
+15-Jan-2008 10:17:56 org.apache.tuscany.sca.http.tomcat.TomcatServer addServletM
+apping
+INFO: Added Servlet mapping: http://L3AW203:1323/SCADomainEventServiceProxyCompo
+nent
+15-Jan-2008 10:17:56 org.apache.tuscany.sca.http.tomcat.TomcatServer addServletM
+apping
+INFO: Added Servlet mapping: http://L3AW203:1323/SCADomainAPIServiceProxyCompone
+nt
+15-Jan-2008 10:17:56 org.apache.tuscany.sca.http.tomcat.TomcatServer addServletM
+apping
+INFO: Added Servlet mapping: http://L3AW203:1323/SCANodeManagerComponent/SCANode
+ManagerService
+15-Jan-2008 10:17:56 org.apache.tuscany.sca.http.tomcat.TomcatServer addServletM
+apping
+INFO: Added Servlet mapping: http://L3AW203:1323/SCANodeManagerComponent/Compone
+ntManagerService/*
+15-Jan-2008 10:17:56 org.apache.tuscany.sca.http.tomcat.TomcatServer addServletM
+apping
+INFO: Added Servlet mapping: http://L3AW203:1323/SCANodeManagerComponent/Compone
+ntManagerService
+15-Jan-2008 10:17:56 org.apache.tuscany.sca.http.tomcat.TomcatServer addServletM
+apping
+INFO: Added Servlet mapping: http://L3AW203:1323/SCADomain/scaDomain.js
+15-Jan-2008 10:17:56 org.apache.tuscany.sca.node.impl.SCANodeImpl activateCompos
+ite
+INFO: Building composite: {http://myapp}myapp
+15-Jan-2008 10:17:57 org.apache.tuscany.sca.node.impl.SCANodeImpl startComposite
+
+INFO: Starting composite: {http://myapp}myapp
+15-Jan-2008 10:17:57 org.apache.tuscany.sca.http.tomcat.TomcatServer addServletM
+apping
+INFO: Added Servlet mapping: http://L3AW203:1323/MyClientComponent/myService
+aClientMethod on thread Thread[main,5,main]
+aClientMethod return from someMethod on thread Thread[main,5,main]
+setMyServiceCallback on thread Thread[pool-1-thread-1,5,main]
+someMethod on thread Thread[pool-1-thread-1,5,main]
+Sleeping ...
+receiveResult on thread Thread[pool-2-thread-1,5,main]
+Result: -> someMethod -> receiveResult
+Closing the domain
+15-Jan-2008 10:18:02 org.apache.tuscany.sca.node.impl.SCANodeImpl stopComposite
+INFO: Stopping composite: {http://myapp}myapp
+15-Jan-2008 10:18:03 org.apache.coyote.http11.Http11Protocol destroy
+INFO: Stopping Coyote HTTP/1.1 on http-1323
+15-Jan-2008 10:18:03 org.apache.tuscany.sca.node.impl.SCANodeImpl stopComposite
+INFO: Stopping composite: {http://callbackws}callbackws
+15-Jan-2008 10:18:03 org.apache.coyote.http11.Http11Protocol destroy
+INFO: Stopping Coyote HTTP/1.1 on http-8086
+15-Jan-2008 10:18:03 org.apache.coyote.http11.Http11Protocol destroy
+INFO: Stopping Coyote HTTP/1.1 on http-1322
+Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 17.343 sec
+
+This shows that the Junit test cases have run successfully.
diff --git a/branches/sca-android/samples/callback-ws-client/build.xml b/branches/sca-android/samples/callback-ws-client/build.xml
new file mode 100644
index 0000000000..8698c6018d
--- /dev/null
+++ b/branches/sca-android/samples/callback-ws-client/build.xml
@@ -0,0 +1,73 @@
+<!--
+ * 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.
+-->
+<project name="callback-ws-client" default="compile">
+ <property name="test.class" value="myapp.MyClientImpl" />
+ <property name="test.jar" value="sample-callback-ws-client.jar" />
+ <property name="manifest.jar" value="../../lib/tuscany-sca-manifest.jar" />
+
+ <target name="init">
+ <mkdir dir="target/classes"/>
+ </target>
+
+ <target name="compile" depends="init">
+ <javac srcdir="src/main/java"
+ destdir="target/classes"
+ debug="on"
+ source="1.5"
+ target="1.5">
+ <classpath>
+ <pathelement location="${manifest.jar}"/>
+ </classpath>
+ </javac>
+ <copy todir="target/classes">
+ <fileset dir="src/main/resources"/>
+ </copy>
+ <jar destfile="target/${test.jar}" basedir="target/classes">
+ <manifest>
+ <attribute name="Main-Class" value="${test.class}" />
+ </manifest>
+ </jar>
+ </target>
+
+ <target name="run-classes">
+ <java classname="${test.class}"
+ fork="true">
+ <classpath>
+ <pathelement path="target/classes"/>
+ <pathelement location="${manifest.jar}"/>
+ </classpath>
+ </java>
+ </target>
+
+ <target name="run">
+ <java classname="${test.class}"
+ fork="true">
+ <classpath>
+ <pathelement path="target/${test.jar}"/>
+ <pathelement location="${manifest.jar}"/>
+ </classpath>
+ </java>
+ </target>
+
+ <target name="clean">
+ <delete quiet="true" includeemptydirs="true">
+ <fileset dir="target"/>
+ </delete>
+ </target>
+</project>
diff --git a/branches/sca-android/samples/callback-ws-client/callback-ws-client.png b/branches/sca-android/samples/callback-ws-client/callback-ws-client.png
new file mode 100644
index 0000000000..802ef604a7
--- /dev/null
+++ b/branches/sca-android/samples/callback-ws-client/callback-ws-client.png
Binary files differ
diff --git a/branches/sca-android/samples/callback-ws-client/callback-ws-client.svg b/branches/sca-android/samples/callback-ws-client/callback-ws-client.svg
new file mode 100644
index 0000000000..f49aeadbbf
--- /dev/null
+++ b/branches/sca-android/samples/callback-ws-client/callback-ws-client.svg
@@ -0,0 +1,204 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!--
+ * 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.
+-->
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://web.resource.org/cc/"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="1052.3622"
+ height="744.09448"
+ id="svg2"
+ sodipodi:version="0.32"
+ inkscape:version="0.45.1"
+ sodipodi:docbase="C:\simon\tuscany\java-panic\sca\samples\callback-ws-client"
+ sodipodi:docname="callback-ws-client.svg"
+ version="1.0"
+ inkscape:export-filename="C:\simon\tuscany\java-panic\sca\samples\callback-ws-client\callback-ws-client.png"
+ inkscape:export-xdpi="52.84"
+ inkscape:export-ydpi="52.84"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape">
+ <defs
+ id="defs4">
+ <marker
+ inkscape:stockid="Arrow1Lstart"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="Arrow1Lstart"
+ style="overflow:visible">
+ <path
+ id="path3156"
+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none"
+ transform="scale(0.8) translate(12.5,0)" />
+ </marker>
+ <marker
+ inkscape:stockid="Arrow1Lend"
+ orient="auto"
+ refY="0.0"
+ refX="0.0"
+ id="Arrow1Lend"
+ style="overflow:visible;">
+ <path
+ id="path3159"
+ d="M 0.0,0.0 L 5.0,-5.0 L -12.5,0.0 L 5.0,5.0 L 0.0,0.0 z "
+ style="fill-rule:evenodd;stroke:#000000;stroke-width:1.0pt;marker-start:none;"
+ transform="scale(0.8) rotate(180) translate(12.5,0)" />
+ </marker>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="10000"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1.4"
+ inkscape:cx="541.4664"
+ inkscape:cy="414.63224"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ inkscape:window-width="1054"
+ inkscape:window-height="721"
+ inkscape:window-x="20"
+ inkscape:window-y="108" />
+ <metadata
+ id="metadata7">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <g
+ id="g2997"
+ transform="matrix(0.991389,0,0,1,2.215655,0)">
+ <rect
+ rx="13.79423"
+ ry="12.692303"
+ y="192.00233"
+ x="258.3114"
+ height="299.99988"
+ width="446.72086"
+ id="rect2067"
+ style="opacity:1;fill:#90baf4;fill-opacity:1;stroke:#060000;stroke-width:2.00866628;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1" />
+ <flowRoot
+ id="flowRoot2954"
+ xml:space="preserve"><flowRegion
+ id="flowRegion2956"><rect
+ y="212.66591"
+ x="281.42856"
+ height="61.42857"
+ width="170"
+ id="rect2958" /></flowRegion><flowPara
+ id="flowPara2960">myapp</flowPara></flowRoot> </g>
+ <rect
+ style="fill:#317fed;fill-opacity:1;stroke:#060000;stroke-width:2.1793592;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1"
+ id="rect2988"
+ width="115.48311"
+ height="102.11218"
+ x="432.14886"
+ y="307.25729"
+ rx="6.9853158"
+ ry="8.4710283" />
+ <flowRoot
+ xml:space="preserve"
+ id="flowRoot2966"
+ transform="translate(176.75411,112.37196)"><flowRegion
+ id="flowRegion2968"><rect
+ id="rect2970"
+ width="170"
+ height="61.42857"
+ x="281.42856"
+ y="212.66591" /></flowRegion><flowPara
+ id="flowPara1883">MyClient</flowPara><flowPara
+ id="flowPara1885">Component</flowPara></flowRoot> <path
+ style="fill:#5b9d05;fill-opacity:1;fill-rule:evenodd;stroke:black;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 414.90867,339.0146 L 448.24371,339.0146 L 454.30462,352.14658 L 447.23356,364.26842 L 414.90867,364.26842 L 422.48482,352.14658 L 414.90867,339.0146 z "
+ id="path3017" />
+ <path
+ style="fill:#ae62bf;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:2.66918468px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 522.56713,320.15377 L 601.02826,320.15377 L 615.2939,359.90348 L 598.65065,396.59555 L 522.56713,396.59555 L 540.39923,359.90348 L 522.56713,320.15377 z "
+ id="path3019" />
+ <flowRoot
+ xml:space="preserve"
+ id="flowRoot1889"
+ transform="translate(428.94909,104.83236)"
+ style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Bitstream Vera Sans"><flowRegion
+ id="flowRegion1891"><rect
+ id="rect1893"
+ width="170"
+ height="61.42857"
+ x="281.42856"
+ y="212.66591"
+ style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Bitstream Vera Sans" /></flowRegion><flowPara
+ id="flowPara1897">http://localhost:8086/MyServiceComponent</flowPara><flowPara
+ id="flowPara1899" /></flowRoot> <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.1331737px;stroke-linecap:butt;stroke-linejoin:miter;marker-end:url(#Arrow1Lend);stroke-opacity:1"
+ d="M 615.78087,359.02789 C 771.36198,358.44679 771.36198,358.44679 771.36198,358.44679"
+ id="path1901" />
+ <path
+ style="fill:#5b9d05;fill-opacity:1;fill-rule:evenodd;stroke:#000000;stroke-width:1.25983226px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 590.28235,358.74035 L 548.70563,358.74035 L 541.14624,375.4515 L 549.96553,390.87719 L 590.28235,390.87719 L 580.83309,375.4515 L 590.28235,358.74035 z "
+ id="path3361" />
+ <flowRoot
+ xml:space="preserve"
+ id="flowRoot3363"
+ transform="translate(259.75287,116.56324)"
+ style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Bitstream Vera Sans"><flowRegion
+ id="flowRegion3365"><rect
+ id="rect3367"
+ width="170"
+ height="61.42857"
+ x="281.42856"
+ y="212.66591"
+ style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Bitstream Vera Sans" /></flowRegion><flowPara
+ id="flowPara3371">myservice</flowPara></flowRoot> <flowRoot
+ xml:space="preserve"
+ id="flowRoot3375"
+ transform="translate(261.18143,157.27752)"
+ style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Bitstream Vera Sans"><flowRegion
+ id="flowRegion3377"><rect
+ id="rect3379"
+ width="170"
+ height="61.42857"
+ x="281.42856"
+ y="212.66591"
+ style="font-size:10px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;font-family:Bitstream Vera Sans" /></flowRegion><flowPara
+ id="flowPara3383">callback</flowPara></flowRoot> <path
+ style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:1.2524904;stroke-linecap:butt;stroke-linejoin:miter;marker-end:none;stroke-opacity:1;marker-start:url(#Arrow1Lstart);stroke-miterlimit:4;stroke-dasharray:7.51494241,1.2524904;stroke-dashoffset:0"
+ d="M 580.12625,376.03803 C 772.7309,375.46458 772.7309,375.46458 772.7309,375.46458"
+ id="path3387" />
+ </g>
+</svg>
diff --git a/branches/sca-android/samples/callback-ws-client/pom.xml b/branches/sca-android/samples/callback-ws-client/pom.xml
new file mode 100644
index 0000000000..c45691febb
--- /dev/null
+++ b/branches/sca-android/samples/callback-ws-client/pom.xml
@@ -0,0 +1,86 @@
+<?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.
+-->
+<project>
+ <modelVersion>4.0.0</modelVersion>
+ <parent>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-sca</artifactId>
+ <version>1.4-SNAPSHOT</version>
+ <relativePath>../../pom.xml</relativePath>
+ </parent>
+ <artifactId>sample-callback-ws-client</artifactId>
+ <name>Apache Tuscany SCA Callback Web Service Remote Client Sample</name>
+
+ <repositories>
+ <repository>
+ <id>apache.incubator</id>
+ <url>http://people.apache.org/repo/m2-incubating-repository</url>
+ </repository>
+ </repositories>
+
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-node-impl</artifactId>
+ <version>1.4-SNAPSHOT</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-implementation-java-runtime</artifactId>
+ <version>1.4-SNAPSHOT</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-binding-ws-axis2</artifactId>
+ <version>1.4-SNAPSHOT</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>tuscany-host-tomcat</artifactId>
+ <version>1.4-SNAPSHOT</version>
+ <scope>runtime</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>4.2</version>
+ <scope>test</scope>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.tuscany.sca</groupId>
+ <artifactId>sample-callback-ws-service</artifactId>
+ <version>1.4-SNAPSHOT</version>
+ <scope>test</scope>
+ </dependency>
+
+ </dependencies>
+
+ <build>
+ <finalName>${artifactId}</finalName>
+ </build>
+
+</project>
diff --git a/branches/sca-android/samples/callback-ws-client/src/main/java/myapp/MyClient.java b/branches/sca-android/samples/callback-ws-client/src/main/java/myapp/MyClient.java
new file mode 100644
index 0000000000..e515b55788
--- /dev/null
+++ b/branches/sca-android/samples/callback-ws-client/src/main/java/myapp/MyClient.java
@@ -0,0 +1,29 @@
+/*
+ * 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 myapp;
+
+import org.osoa.sca.annotations.OneWay;
+
+/**
+ * The client interface
+ */
+public interface MyClient {
+
+ void aClientMethod();
+}
diff --git a/branches/sca-android/samples/callback-ws-client/src/main/java/myapp/MyClientImpl.java b/branches/sca-android/samples/callback-ws-client/src/main/java/myapp/MyClientImpl.java
new file mode 100644
index 0000000000..ece769236c
--- /dev/null
+++ b/branches/sca-android/samples/callback-ws-client/src/main/java/myapp/MyClientImpl.java
@@ -0,0 +1,64 @@
+/*
+ * 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 myapp;
+
+import myserver.MyService;
+import myserver.MyServiceCallback;
+
+import org.apache.tuscany.sca.node.SCAClient;
+import org.apache.tuscany.sca.node.SCANode;
+import org.apache.tuscany.sca.node.SCANodeFactory;
+import org.osoa.sca.annotations.Reference;
+import org.osoa.sca.annotations.Scope;
+import org.osoa.sca.annotations.Service;
+
+/**
+ * Remote Web service client with callback interface
+ */
+@Service(MyClient.class)
+@Scope("COMPOSITE")
+public class MyClientImpl implements MyClient, MyServiceCallback {
+ @Reference
+ protected MyService myService;
+
+ public void aClientMethod() {
+ System.out.println("aClientMethod on thread " + Thread.currentThread());
+ myService.someMethod(" -> someMethod "); // calls the server
+ System.out.println("aClientMethod return from someMethod on thread " + Thread.currentThread());
+ }
+
+ public void receiveResult(String result) {
+ System.out.println("receiveResult on thread " + Thread.currentThread());
+ System.out.println("Result: " + result); // callback from the server
+ }
+
+ public static void main(String[] args) throws Exception {
+ SCANode node = SCANodeFactory.newInstance().createSCANodeFromClassLoader("myapp.composite", MyClientImpl.class.getClassLoader());
+ node.start();
+ run(node);
+ System.out.println("Closing the domain");
+ node.stop();
+ }
+
+ public static void run(SCANode node) throws InterruptedException {
+ MyClient myClient = ((SCAClient)node).getService(MyClient.class, "MyClientComponent");
+ myClient.aClientMethod();
+ Thread.sleep(5000); // don't exit before callback arrives
+ }
+}
diff --git a/branches/sca-android/samples/callback-ws-client/src/main/java/myserver/MyService.java b/branches/sca-android/samples/callback-ws-client/src/main/java/myserver/MyService.java
new file mode 100644
index 0000000000..1850eae1bc
--- /dev/null
+++ b/branches/sca-android/samples/callback-ws-client/src/main/java/myserver/MyService.java
@@ -0,0 +1,34 @@
+/*
+ * 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 myserver;
+
+import org.osoa.sca.annotations.Callback;
+import org.osoa.sca.annotations.OneWay;
+import org.osoa.sca.annotations.Remotable;
+
+/**
+ * The remote service that will be invoked by the client
+ */
+@Remotable
+@Callback(MyServiceCallback.class)
+public interface MyService {
+
+ @OneWay
+ void someMethod(String arg);
+}
diff --git a/branches/sca-android/samples/callback-ws-client/src/main/java/myserver/MyServiceCallback.java b/branches/sca-android/samples/callback-ws-client/src/main/java/myserver/MyServiceCallback.java
new file mode 100644
index 0000000000..bf5f87a4f9
--- /dev/null
+++ b/branches/sca-android/samples/callback-ws-client/src/main/java/myserver/MyServiceCallback.java
@@ -0,0 +1,30 @@
+/*
+ * 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 myserver;
+
+import org.osoa.sca.annotations.Remotable;
+
+/**
+ * The callback interface for {@link MyService}.
+ */
+@Remotable
+public interface MyServiceCallback {
+
+ void receiveResult(String result);
+}
diff --git a/branches/sca-android/samples/callback-ws-client/src/main/resources/META-INF/sca-contribution.xml b/branches/sca-android/samples/callback-ws-client/src/main/resources/META-INF/sca-contribution.xml
new file mode 100644
index 0000000000..314747d548
--- /dev/null
+++ b/branches/sca-android/samples/callback-ws-client/src/main/resources/META-INF/sca-contribution.xml
@@ -0,0 +1,22 @@
+<?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.
+-->
+<contribution xmlns="http://www.osoa.org/xmlns/sca/1.0" xmlns:app="http://myapp">
+ <deployable composite="app:myapp" />
+</contribution>
diff --git a/branches/sca-android/samples/callback-ws-client/src/main/resources/myapp.composite b/branches/sca-android/samples/callback-ws-client/src/main/resources/myapp.composite
new file mode 100644
index 0000000000..5b776d6df8
--- /dev/null
+++ b/branches/sca-android/samples/callback-ws-client/src/main/resources/myapp.composite
@@ -0,0 +1,36 @@
+<?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://www.osoa.org/xmlns/sca/1.0"
+ targetNamespace="http://myapp"
+ name="myapp">
+
+ <component name="MyClientComponent">
+ <implementation.java class="myapp.MyClientImpl" />
+ <reference name="myService">
+ <interface.java interface="myserver.MyService"
+ callbackInterface="myserver.MyServiceCallback" />
+ <binding.ws uri="http://localhost:8086/MyServiceComponent" />
+ <callback>
+ <binding.ws uri="http://localhost:8087/MyServiceComponentCB"/>
+ </callback>
+ </reference>
+ </component>
+
+</composite>
diff --git a/branches/sca-android/samples/callback-ws-client/src/test/java/myapp/CallbackClientTestCase.java b/branches/sca-android/samples/callback-ws-client/src/test/java/myapp/CallbackClientTestCase.java
new file mode 100644
index 0000000000..fb2f6952c4
--- /dev/null
+++ b/branches/sca-android/samples/callback-ws-client/src/test/java/myapp/CallbackClientTestCase.java
@@ -0,0 +1,53 @@
+/*
+ * 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 myapp;
+
+import org.apache.tuscany.sca.node.SCANode;
+import org.apache.tuscany.sca.node.SCANodeFactory;
+import org.junit.After;
+import org.junit.Before;
+import org.junit.Test;
+
+/**
+ * Tests that the callback server is available
+ */
+public class CallbackClientTestCase {
+
+ private SCANode node;
+
+ @Before
+ public void startServer() throws Exception {
+ try {
+ node = SCANodeFactory.newInstance().createSCANodeFromClassLoader(null, getClass().getClassLoader());
+ node.start();
+ } catch (Exception ex) {
+ System.out.println(ex.toString());
+ }
+ }
+
+ @Test
+ public void testClient() throws Exception {
+ MyClientImpl.run(node);
+ }
+
+ @After
+ public void stopServer() throws Exception {
+ node.stop();
+ }
+}