Hello World Secure Web Service References Sample
================================================
This sample demonstrates an SCA reference 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 you need to run the server first 
so open a command prompt, navigate to the helloworld-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-helloworld-ws-service-secure.jar helloworld.HelloWorldServer

and on *nix do

java -cp ../../lib/tuscany-sca-manifest.jar:target/sample-helloworld-ws-service-secure.jar helloworld.HelloWorldServer


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-helloworld-ws-reference-secure.jar helloworld.HelloWorldClient

and on *nix do

java -cp ../../lib/tuscany-sca-manifest.jar:target/sample-helloworld-ws-reference-secure.jar helloworld.HelloWorldClient


Sample Overview
---------------
The sample provides a single component that is wired to a reference with a 
web service binding. The binding refers to WSDL that identifies the service
exposed by the helloworld-ws-service-secure sample. This sample invokes a
secure web-serivce and hence specifies a policy intent named 'authentication' 
which is fulfilled by a suitable policyset that is defined for the SCA Domain.  
Over the helloworld-ws-reference sample, this sample demonstrate generally 
the use of policy intents and policy sets in Tuscany taking the specific instance 
of a security policy.

Note :
------
The policies mentioned and supported are instances of Tuscany specified policies and 
not instnaces of WS-Policy.

helloworld-ws-reference-secure/
  src/
    main/
      java/
        helloworld/
          HelloWorldService.java          - interface description for 
                                            HelloWorldServiceComponent
          HelloWorldServiceComponent.java - component implementation
          HelloWorldClient.java           - starts the SCA Runtime and 
                                            deploys the helloworldwsclient
                                            .composite. It then calls the 
                                            HelloWorldServiceComponent
          ClientPWCBHandler.java		  - Callback handler class to provide client password.  The 
          									handle(Callback[] callbacks) method of this class is where
          									code for accessing user registries and retrieving passwords 
          									for given user identifiers can be encapsulated.  For example
          									here is where one could access LDAP registries to obtain or
          									compare user identities and passwords.
         
      resources/
        wsdl
          helloworld.wsdl                 - the service description that the 
                                            SCA reference uses to bind to 
        helloworldwsclient.composite      - the SCA assembly for this sample
        logging.properties                - log4j configuration file
        definitions.xml					  - the SCA Definitions file that contains intents and policysets 
        									defined for the SCA Domain
    test/
      java/
        helloworld/
          HelloWorldClientTestCase.java   - JUnit test case
          HelloWorldServerTest.java       - starts the Web service
  helloworld-ws-reference-secure.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 start up the service that the reference will talk to. To do this
run up the helloworld-ws-service-secure test. Take a look at the README in that sample
and you will see you need the following commands

cd helloworld-ws-service-secure
ant run

Once done you can now compile and run this sample using the following commands;

cd helloworld-ws-reference-secure
ant compile
ant run

You should see the following output from the run target.

run:
     [java] log4j:WARN No appenders could be found for logger (org.apache.axiom.
om.util.StAXUtils).
     [java] log4j:WARN Please initialize the log4j system properly.
     [java] Injected helloWorldService
     [java] Called getGreetings
     [java] *** Calling Client UserId/Password Handler ....
     [java] Hello World

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-service-secure sample first as Maven does this for you. 

cd helloworld-ws-reference-secure
mvn

You should see the following output from the test phase.

-------------------------------------------------------
 T E S T S
-------------------------------------------------------
Running helloworld.HelloWorldClientTestCase
log4j:WARN No appenders could be found for logger (org.apache.axiom.om.util.StAX
Utils).
log4j:WARN Please initialize the log4j system properly.
log4j:WARN No appenders could be found for logger (org.apache.axiom.om.util.StAX
Utils).
log4j:WARN Please initialize the log4j system properly.
10-May-2007 13:40:34 org.apache.catalina.core.StandardEngine start
INFO: Starting Servlet Engine: Apache Tomcat/6.0.10
10-May-2007 13:40:35 org.apache.catalina.startup.ContextConfig defaultWebConfig
INFO: No default web.xml
10-May-2007 13:40:35 org.apache.catalina.startup.DigesterFactory register
WARNING: Could not get url for /javax/servlet/resources/j2ee_1_4.xsd
10-May-2007 13:40:35 org.apache.catalina.startup.DigesterFactory register
WARNING: Could not get url for /javax/servlet/resources/xml.xsd
10-May-2007 13:40:35 org.apache.catalina.startup.DigesterFactory register
WARNING: Could not get url for /javax/servlet/jsp/resources/jsp_2_0.xsd
10-May-2007 13:40:35 org.apache.catalina.startup.DigesterFactory register
WARNING: Could not get url for /javax/servlet/jsp/resources/web-jsptaglibrary_2_
0.xsd
10-May-2007 13:40:35 org.apache.catalina.startup.DigesterFactory register
WARNING: Could not get url for /javax/servlet/resources/web-app_2_4.xsd
10-May-2007 13:40:35 org.apache.catalina.startup.DigesterFactory register
WARNING: Could not get url for /javax/servlet/resources/j2ee_web_services_1_1.xs
d
10-May-2007 13:40:35 org.apache.catalina.startup.DigesterFactory register
WARNING: Could not get url for /javax/servlet/resources/j2ee_web_services_client
_1_1.xsd
10-May-2007 13:40:35 org.apache.coyote.http11.Http11Protocol init
INFO: Initializing Coyote HTTP/1.1 on http-8085
10-May-2007 13:40:35 org.apache.coyote.http11.Http11Protocol start
INFO: Starting Coyote HTTP/1.1 on http-8085
Injected helloWorldService
Called getGreetings
*** Calling Client UserId/Password Handler ....
*** Calling Server User/Passwd Handler....
10-May-2007 13:40:36 org.apache.coyote.http11.Http11Protocol destroy
INFO: Stopping Coyote HTTP/1.1 on http-8085
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 6.349 sec

Results :


This shows that the Junit test cases have run successfully. Also note that the client side and server side
callback handlers for authentication have been called.
