Building Apache CXF Fediz
=========================

Initial Setup
-------------

1) Install J2SE 8 SDK, which can be downloaded from 
   http://www.oracle.com/technetwork/java/javase/downloads/index.html

2) Make sure that your JAVA_HOME environment variable is set to the newly installed 
   JDK location, and that your PATH includes %JAVA_HOME%\bin (Windows) or 
   $JAVA_HOME$/bin (*nix).

3) Install Maven 3.0.x or newer, which can be downloaded from 
   http://maven.apache.org/download.html. Make sure that your PATH includes 
   the MVN_HOME/bin directory. 


Building
--------

1) Change to the top level directory of Apache CXF Fediz source distribution.
2) Run
	$> mvn clean install
   This will compile Apache CXF Fediz and run all of the tests in the Apache CXF Fediz source
   distribution. Alternatively, you can run
         $> mvn -Pfastinstall.
   This will compile Apache CXF Fediz without running the tests and takes less
   time to build.
   Depending on the load of remote Maven repositories, you may have 
   to run "mvn" multiple times until the required dependencies are 
   all located in your local Maven repository. It usually takes some time for 
   Maven to download required dependencies in the first build.


Source Directory structure
--------------------------

 + plugins               contains the sources of the Federation plugin
      + core             the core module contains the majority of functionality which is Servlet container agnostic
      + tomcat           the Tomcat module is the bridge of the core to the
                         Tomcat 8/9 specific security engine (container managed)
      + jetty9           the Jetty 9 module is the bridge of the core to the
                           Jetty 9 specific security engine (container managed)
      + cxf              the CXF module is the bridge of the core to the
                           CXF specific security engine (application managed)
      + spring           the Spring module is the brige of the core to the
                           Spring Security 4 specific security engine (application managed)
      + spring3          the Spring3 module is the bridge of the core to the
                           Spring Security 3 specific security engine (application managed)
      + websphere        the IBM Websphere module is the bridge of the core to the
                           IBM Websphere specific security engine (container managed)

 + services              contains the sources of the Identity Provider
      + sts              the STS module contains the configured CXF STS which supports the Federation use cases
      + idp              the IDP module is the bridge of the STS to a WS-Trust/SOAP unaware browser

 + examples
      + simpleWebapp          this example shows how to protect a simple web application using
                                the Fediz plugin which is configured on the container level
      + springPreAuthWebapp   this example shows how to protect a simple web application using
                                the Fediz plugin which is configured at the container level
                                and creates the spring security context to use spring security features
                                for authorization like annotations, spring security configuration, etc.
      + springWebapp          this example shows how to protect a simple web application using
                                the Fediz plugin which is configured within the application in
                                the Spring Security 3 configuration
      + spring2Webapp         this example shows how to protect a simple web application using
                                the Fediz plugin which is configured within the application in
                                the Spring Security 2 configuration
      + wsclientWebapp        this example shows how a protected web application calls a web service protected by the STS
           + webapp           contains the web application
           + webservice       contains the web services implementation

