Hello World Web Service Service Sample
======================================
This sample demonstrates an SCA service that uses a web service binding. 

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 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-helloworld-ws-service.jar helloworld.HelloWorldServer

and on *nix do

java -cp ../../lib/tuscany-sca-manifest.jar:target/sample-helloworld-ws-service.jar helloworld.HelloWorldServer

Now the server is started you can use the helloworld-ws-reference sample to 
exercise it. 

Sample Overview
---------------
The sample provides a single component that is wired to a service with a 
web service binding.

helloworld-ws-service/
  src/
    main/
      java/
        helloworld/
          HelloWorldService.java          - interface description for 
                                            HelloWorldServiceComponent
          HelloWorldImpl.java             - component implementation
          HelloWorldServer.java           - starts the SCA Runtime and 
                                            deploys the helloworldws
                                            .composite and then waits for the
                                            service to be called via web services
      resources/
        wsdl/
          helloworld.wsdl                 - the service description that describes
                                            the exposed service
        helloworldws.composite            - the SCA assembly for this sample
    test/
      java/
        helloworld/
          HelloWorldServerTestCase.java   - JUnit test case 
  helloworld-ws-service.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 using the 
following commands

cd helloworld-ws-service
ant compile
ant run

You should see the following output from the run target.

run:
     [java] 14-Jan-2008 14:18:47 org.apache.tuscany.sca.http.jetty.JettyServer a
ddServletMapping
     [java] INFO: Added Servlet mapping: http://L3AW203:8085/HelloWorldService
     [java] HelloWorld server started (press enter to shutdown)
     
As this point the SCA service is exposed as a web service by a web server 
started automatically by the SCA runtime. To stop the server just press 
enter.

To exercise the service run up the helloworld-ws-reference sample. Take a look at 
the README in that sample and you will see you need the following commands

cd helloworld-ws-reference
ant run

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 helloworld-
ws-reference sample as Maven includes a simple ping test to make sure that the
service is available

cd helloworld-ws-service
mvn

You should see the following output from the test phase.

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running helloworld.HelloWorldServerTestCase
14-Jan-2008 14:19:57 org.apache.catalina.core.StandardEngine start
INFO: Starting Servlet Engine: Apache Tomcat/6.0.10
14-Jan-2008 14:19:57 org.apache.catalina.startup.ContextConfig defaultWebConfig
INFO: No default web.xml
14-Jan-2008 14:19:57 org.apache.catalina.startup.DigesterFactory register
WARNING: Could not get url for /javax/servlet/jsp/resources/jsp_2_0.xsd
14-Jan-2008 14:19:57 org.apache.catalina.startup.DigesterFactory register
WARNING: Could not get url for /javax/servlet/jsp/resources/web-jsptaglibrary_1_
1.dtd
14-Jan-2008 14:19:57 org.apache.catalina.startup.DigesterFactory register
WARNING: Could not get url for /javax/servlet/jsp/resources/web-jsptaglibrary_1_
2.dtd
14-Jan-2008 14:19:57 org.apache.catalina.startup.DigesterFactory register
WARNING: Could not get url for /javax/servlet/jsp/resources/web-jsptaglibrary_2_
0.xsd
14-Jan-2008 14:19:57 org.apache.catalina.startup.DigesterFactory register
WARNING: Could not get url for /javax/servlet/resources/j2ee_web_services_1_1.xs
d
14-Jan-2008 14:19:57 org.apache.coyote.http11.Http11Protocol init
INFO: Initializing Coyote HTTP/1.1 on http-8085
14-Jan-2008 14:19:57 org.apache.coyote.http11.Http11Protocol start
INFO: Starting Coyote HTTP/1.1 on http-8085
14-Jan-2008 14:19:57 org.apache.tuscany.sca.http.tomcat.TomcatServer addServletM
apping
INFO: Added Servlet mapping: http://L3AW203:8085/HelloWorldService
14-Jan-2008 14:19:57 org.apache.coyote.http11.Http11Protocol destroy
INFO: Stopping Coyote HTTP/1.1 on http-8085
14-Jan-2008 14:19:58 org.apache.catalina.core.StandardEngine start
INFO: Starting Servlet Engine: Apache Tomcat/6.0.10
14-Jan-2008 14:19:58 org.apache.catalina.startup.ContextConfig defaultWebConfig
INFO: No default web.xml
14-Jan-2008 14:19:58 org.apache.coyote.http11.Http11Protocol init
INFO: Initializing Coyote HTTP/1.1 on http-8085
14-Jan-2008 14:19:58 org.apache.coyote.http11.Http11Protocol start
INFO: Starting Coyote HTTP/1.1 on http-8085
14-Jan-2008 14:19:58 org.apache.tuscany.sca.http.tomcat.TomcatServer addServletM
apping
INFO: Added Servlet mapping: http://L3AW203:8085/HelloWorldService
14-Jan-2008 14:19:59 org.apache.coyote.http11.Http11Protocol destroy
INFO: Stopping Coyote HTTP/1.1 on http-8085
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 6.75 sec

This shows that the Junit test cases have run successfully. 
