<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:georss="http://www.georss.org/georss" xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#" xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>Peter Arockiaraj</title>
	<atom:link href="http://peterarockiaraj.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://peterarockiaraj.wordpress.com</link>
	<description>Can you hear me now?...Good!</description>
	<lastBuildDate>Tue, 19 Apr 2011 06:44:10 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.com/</generator>
<cloud domain='peterarockiaraj.wordpress.com' port='80' path='/?rsscloud=notify' registerProcedure='' protocol='http-post' />
<image>
		<url>http://0.gravatar.com/blavatar/c8b70de499312eaad6f92897af52d2a4?s=96&#038;d=http%3A%2F%2Fs2.wp.com%2Fi%2Fbuttonw-com.png</url>
		<title>Peter Arockiaraj</title>
		<link>http://peterarockiaraj.wordpress.com</link>
	</image>
	<atom:link rel="search" type="application/opensearchdescription+xml" href="http://peterarockiaraj.wordpress.com/osd.xml" title="Peter Arockiaraj" />
	<atom:link rel='hub' href='http://peterarockiaraj.wordpress.com/?pushpress=hub'/>
		<item>
		<title>Integrating JSF, Spring Security and LDAP</title>
		<link>http://peterarockiaraj.wordpress.com/2010/01/15/integrating-jsf-spring-security-and-ldap-3/</link>
		<comments>http://peterarockiaraj.wordpress.com/2010/01/15/integrating-jsf-spring-security-and-ldap-3/#comments</comments>
		<pubDate>Fri, 15 Jan 2010 10:12:29 +0000</pubDate>
		<dc:creator>Peter Arockiaraj</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://peterarockiaraj.wordpress.com/2010/01/15/integrating-jsf-spring-security-and-ldap-3/</guid>
		<description><![CDATA[Integrating JSF, Spring Security and LDAP Introduction In this article we are going to develop sample web application by using JSF, Spring Security with LDAP Connection. This article provides steps (step by step) to create &#38; deploy web application. Please go through below to find sample web application. Software Requirements EClipse (Java IDE)- Optional Maven [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=peterarockiaraj.wordpress.com&amp;blog=9287010&amp;post=93&amp;subd=peterarockiaraj&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<h1>Integrating JSF, Spring Security and LDAP</h1>
<h2>Introduction</h2>
<p>In this article we are going to develop sample web application by using JSF, Spring Security with LDAP Connection. This article provides steps (step by step) to create &amp; deploy web application. Please go through below to find sample web application.</p>
<h2>Software Requirements</h2>
<ol>
<li>EClipse (Java IDE)- Optional</li>
<li>Maven</li>
<li>Tomcat Latest Web server</li>
<li>Ant</li>
<li>JDK 1.6</li>
</ol>
<h2>The Code</h2>
<p>In this example, we are going to create sample login page. For Authentication and for authorization we will be using spring security and LDAP.</p>
<h3>Step 1: Copy following pom.xml in project root folder.</h3>
<p>&lt;project xmlns=<em>&#8220;http://maven.apache.org/POM/4.0.0&#8243;</em> xmlns:xsi=<em>&#8220;http://www.w3.org/2001/XMLSchema-instance&#8221;</em></p>
<p>xsi:schemaLocation=<em>&#8220;http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd&#8221;</em>&gt;</p>
<p>&lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;</p>
<p>&lt;groupId&gt;com.sample&lt;/groupId&gt;</p>
<p>&lt;artifactId&gt;Greenwich&lt;/artifactId&gt;</p>
<p>&lt;packaging&gt;war&lt;/packaging&gt;</p>
<p>&lt;version&gt;1.0&lt;/version&gt;</p>
<p>&lt;name&gt;JSF Web Application<span style="text-decoration:underline;">Maven</span> <span style="text-decoration:underline;">Webapp</span>&lt;/name&gt;</p>
<p>&lt;url&gt;http://maven.apache.org&lt;/url&gt;</p>
<p>&lt;repositories&gt;</p>
<p>&lt;repository&gt;</p>
<p>&lt;id&gt;jboss-repository&lt;/id&gt;</p>
<p>&lt;name&gt;jboss-repository&lt;/name&gt;</p>
<p>&lt;url&gt;http://repository.jboss.com/maven2/&lt;/url&gt;</p>
<p>&lt;layout&gt;default&lt;/layout&gt;</p>
<p>&lt;/repository&gt;</p>
<p>&lt;repository&gt;</p>
<p>&lt;id&gt;java-repository&lt;/id&gt;</p>
<p>&lt;name&gt;java-repository&lt;/name&gt;</p>
<p>&lt;url&gt;http://download.java.net/maven/2&lt;/url&gt;</p>
<p>&lt;layout&gt;default&lt;/layout&gt;</p>
<p>&lt;/repository&gt;</p>
<p>&lt;repository&gt;</p>
<p>&lt;id&gt;ibiblio-repository&lt;/id&gt;</p>
<p>&lt;name&gt;ibiblio-repository&lt;/name&gt;</p>
<p>&lt;url&gt;http://mirrors.ibiblio.org/pub/mirrors/maven2/&lt;/url&gt;</p>
<p>&lt;layout&gt;default&lt;/layout&gt;</p>
<p>&lt;/repository&gt;</p>
<p>&lt;repository&gt;</p>
<p>&lt;id&gt;repo1.maven.org&lt;/id&gt;</p>
<p>&lt;name&gt;Maven Repository&lt;/name&gt;</p>
<p>&lt;url&gt;http://repo1.maven.org/maven2&lt;/url&gt;</p>
<p>&lt;/repository&gt;</p>
<p>&lt;/repositories&gt;</p>
<p>&lt;dependencies&gt;</p>
<p>&lt;dependency&gt;</p>
<p>&lt;groupId&gt;junit&lt;/groupId&gt;</p>
<p>&lt;artifactId&gt;junit&lt;/artifactId&gt;</p>
<p>&lt;version&gt;3.8.1&lt;/version&gt;</p>
<p>&lt;scope&gt;test&lt;/scope&gt;</p>
<p>&lt;/dependency&gt;</p>
<p>&lt;dependency&gt;</p>
<p>&lt;groupId&gt;org.springframework&lt;/groupId&gt;</p>
<p>&lt;artifactId&gt;spring&lt;/artifactId&gt;</p>
<p>&lt;version&gt;2.5.4&lt;/version&gt;</p>
<p>&lt;/dependency&gt;</p>
<p>&lt;dependency&gt;</p>
<p>&lt;groupId&gt;javax.servlet&lt;/groupId&gt;</p>
<p>&lt;artifactId&gt;servlet-api&lt;/artifactId&gt;</p>
<p>&lt;version&gt;2.5&lt;/version&gt;</p>
<p>&lt;/dependency&gt;</p>
<p>&lt;dependency&gt;</p>
<p>&lt;groupId&gt;org.springframework&lt;/groupId&gt;</p>
<p>&lt;artifactId&gt;spring-webmvc&lt;/artifactId&gt;</p>
<p>&lt;version&gt;2.5.4&lt;/version&gt;</p>
<p>&lt;/dependency&gt;</p>
<p>&lt;dependency&gt;</p>
<p>&lt;groupId&gt;org.springframework&lt;/groupId&gt;</p>
<p>&lt;artifactId&gt;spring-test&lt;/artifactId&gt;</p>
<p>&lt;version&gt;2.5.6&lt;/version&gt;</p>
<p>&lt;/dependency&gt;</p>
<p>&lt;dependency&gt;</p>
<p>&lt;groupId&gt;javax.servlet&lt;/groupId&gt;</p>
<p>&lt;artifactId&gt;jstl&lt;/artifactId&gt;</p>
<p>&lt;version&gt;1.1.2&lt;/version&gt;</p>
<p>&lt;/dependency&gt;</p>
<p>&lt;dependency&gt;</p>
<p>&lt;groupId&gt;taglibs&lt;/groupId&gt;</p>
<p>&lt;artifactId&gt;standard&lt;/artifactId&gt;</p>
<p>&lt;version&gt;1.1.2&lt;/version&gt;</p>
<p>&lt;/dependency&gt;</p>
<p>&lt;dependency&gt;</p>
<p>&lt;groupId&gt;commons-dbcp&lt;/groupId&gt;</p>
<p>&lt;artifactId&gt;commons-dbcp&lt;/artifactId&gt;</p>
<p>&lt;version&gt;1.2&lt;/version&gt;</p>
<p>&lt;/dependency&gt;</p>
<p>&lt;dependency&gt;</p>
<p>&lt;groupId&gt;commons-collections&lt;/groupId&gt;</p>
<p>&lt;artifactId&gt;commons-collections&lt;/artifactId&gt;</p>
<p>&lt;version&gt;3.2&lt;/version&gt;</p>
<p>&lt;/dependency&gt;</p>
<p>&lt;dependency&gt;</p>
<p>&lt;groupId&gt;commons-pool&lt;/groupId&gt;</p>
<p>&lt;artifactId&gt;commons-pool&lt;/artifactId&gt;</p>
<p>&lt;version&gt;1.2&lt;/version&gt;</p>
<p>&lt;/dependency&gt;</p>
<p>&lt;dependency&gt;</p>
<p>&lt;groupId&gt;hibernate&lt;/groupId&gt;</p>
<p>&lt;artifactId&gt;hibernate3&lt;/artifactId&gt;</p>
<p>&lt;version&gt;3.2.3.GA&lt;/version&gt;</p>
<p>&lt;/dependency&gt;</p>
<p>&lt;dependency&gt;</p>
<p>&lt;groupId&gt;asm&lt;/groupId&gt;</p>
<p>&lt;artifactId&gt;asm-attrs&lt;/artifactId&gt;</p>
<p>&lt;version&gt;1.5.3&lt;/version&gt;</p>
<p>&lt;/dependency&gt;</p>
<p>&lt;dependency&gt;</p>
<p>&lt;groupId&gt;antlr&lt;/groupId&gt;</p>
<p>&lt;artifactId&gt;antlr&lt;/artifactId&gt;</p>
<p>&lt;version&gt;2.7.6&lt;/version&gt;</p>
<p>&lt;/dependency&gt;</p>
<p>&lt;dependency&gt;</p>
<p>&lt;groupId&gt;cglib&lt;/groupId&gt;</p>
<p>&lt;artifactId&gt;cglib&lt;/artifactId&gt;</p>
<p>&lt;version&gt;2.1_3&lt;/version&gt;</p>
<p>&lt;/dependency&gt;</p>
<p>&lt;dependency&gt;</p>
<p>&lt;groupId&gt;asm&lt;/groupId&gt;</p>
<p>&lt;artifactId&gt;asm&lt;/artifactId&gt;</p>
<p>&lt;version&gt;1.5.3&lt;/version&gt;</p>
<p>&lt;/dependency&gt;</p>
<p>&lt;dependency&gt;</p>
<p>&lt;groupId&gt;org.hibernate&lt;/groupId&gt;</p>
<p>&lt;artifactId&gt;hibernate-annotations&lt;/artifactId&gt;</p>
<p>&lt;version&gt;3.4.0.GA&lt;/version&gt;</p>
<p>&lt;/dependency&gt;</p>
<p>&lt;dependency&gt;</p>
<p>&lt;groupId&gt;javax.persistence&lt;/groupId&gt;</p>
<p>&lt;artifactId&gt;persistence-api&lt;/artifactId&gt;</p>
<p>&lt;version&gt;1.0&lt;/version&gt;</p>
<p>&lt;/dependency&gt;</p>
<p>&lt;dependency&gt;</p>
<p>&lt;groupId&gt;com.oracle&lt;/groupId&gt;</p>
<p>&lt;artifactId&gt;ojdbc14&lt;/artifactId&gt;</p>
<p>&lt;version&gt;10.2.0.2.0&lt;/version&gt;</p>
<p>&lt;/dependency&gt;</p>
<p>&lt;dependency&gt;</p>
<p>&lt;groupId&gt;commons-validator&lt;/groupId&gt;</p>
<p>&lt;artifactId&gt;commons-validator&lt;/artifactId&gt;</p>
<p>&lt;version&gt;1.3.1&lt;/version&gt;</p>
<p>&lt;/dependency&gt;</p>
<p>&lt;dependency&gt;</p>
<p>&lt;groupId&gt;org.springmodules&lt;/groupId&gt;</p>
<p>&lt;artifactId&gt;spring-modules-validation&lt;/artifactId&gt;</p>
<p>&lt;version&gt;0.8&lt;/version&gt;</p>
<p>&lt;/dependency&gt;</p>
<p>&lt;dependency&gt;</p>
<p>&lt;groupId&gt;org.springframework&lt;/groupId&gt;</p>
<p>&lt;artifactId&gt;spring-aop&lt;/artifactId&gt;</p>
<p>&lt;version&gt;2.5&lt;/version&gt;</p>
<p>&lt;/dependency&gt;</p>
<p>&lt;dependency&gt;</p>
<p>&lt;groupId&gt;org.directwebremoting&lt;/groupId&gt;</p>
<p>&lt;artifactId&gt;dwr&lt;/artifactId&gt;</p>
<p>&lt;version&gt;2.0.rc1&lt;/version&gt;</p>
<p>&lt;/dependency&gt;</p>
<p>&lt;dependency&gt;</p>
<p>&lt;groupId&gt;org.slf4j&lt;/groupId&gt;</p>
<p>&lt;artifactId&gt;slf4j-log4j12&lt;/artifactId&gt;</p>
<p>&lt;version&gt;1.5.6&lt;/version&gt;</p>
<p>&lt;/dependency&gt;</p>
<p>&lt;dependency&gt;</p>
<p>&lt;groupId&gt;org.slf4j&lt;/groupId&gt;</p>
<p>&lt;artifactId&gt;slf4j-api&lt;/artifactId&gt;</p>
<p>&lt;version&gt;1.5.6&lt;/version&gt;</p>
<p>&lt;/dependency&gt;</p>
<p>&lt;dependency&gt;</p>
<p>&lt;groupId&gt;log4j&lt;/groupId&gt;</p>
<p>&lt;artifactId&gt;log4j&lt;/artifactId&gt;</p>
<p>&lt;version&gt;1.2.14&lt;/version&gt;</p>
<p>&lt;/dependency&gt;</p>
<p>&lt;dependency&gt;</p>
<p>&lt;groupId&gt;javassist&lt;/groupId&gt;</p>
<p>&lt;artifactId&gt;javassist&lt;/artifactId&gt;</p>
<p>&lt;version&gt;3.4.GA&lt;/version&gt;</p>
<p>&lt;/dependency&gt;</p>
<p>&lt;dependency&gt;</p>
<p>&lt;groupId&gt;org.directwebremoting&lt;/groupId&gt;</p>
<p>&lt;artifactId&gt;dwr&lt;/artifactId&gt;</p>
<p>&lt;version&gt;2.0.2&lt;/version&gt;</p>
<p>&lt;/dependency&gt;</p>
<p>&lt;dependency&gt;</p>
<p>&lt;groupId&gt;org.springframework&lt;/groupId&gt;</p>
<p>&lt;artifactId&gt;spring-webflow&lt;/artifactId&gt;</p>
<p>&lt;version&gt;1.0.6&lt;/version&gt;</p>
<p>&lt;/dependency&gt;</p>
<p>&lt;dependency&gt;</p>
<p>&lt;groupId&gt;org.springframework.security&lt;/groupId&gt;</p>
<p>&lt;artifactId&gt;spring-security-core&lt;/artifactId&gt;</p>
<p>&lt;version&gt;2.0.4&lt;/version&gt;</p>
<p>&lt;/dependency&gt;</p>
<p>&lt;dependency&gt;</p>
<p>&lt;groupId&gt;<span style="text-decoration:underline;">myfaces</span>&lt;/groupId&gt;</p>
<p>&lt;artifactId&gt;<span style="text-decoration:underline;">myfaces</span>-all&lt;/artifactId&gt;</p>
<p>&lt;version&gt;1.1.1&lt;/version&gt;</p>
<p>&lt;exclusions&gt;</p>
<p>&lt;exclusion&gt;</p>
<p>&lt;artifactId&gt;<span style="text-decoration:underline;">xml</span>-<span style="text-decoration:underline;">apis</span>&lt;/artifactId&gt;</p>
<p>&lt;groupId&gt;<span style="text-decoration:underline;">xml</span>-<span style="text-decoration:underline;">apis</span>&lt;/groupId&gt;</p>
<p>&lt;/exclusion&gt;</p>
<p>&lt;/exclusions&gt;</p>
<p>&lt;/dependency&gt;</p>
<p>&lt;dependency&gt;</p>
<p>&lt;groupId&gt;org.apache.myfaces.tomahawk&lt;/groupId&gt;</p>
<p>&lt;artifactId&gt;tomahawk&lt;/artifactId&gt;</p>
<p>&lt;version&gt;1.1.9&lt;/version&gt;</p>
<p>&lt;/dependency&gt;</p>
<p>&lt;dependency&gt;</p>
<p>&lt;groupId&gt;javax.el&lt;/groupId&gt;</p>
<p>&lt;artifactId&gt;el-<span style="text-decoration:underline;">api</span>&lt;/artifactId&gt;</p>
<p>&lt;version&gt;1.0&lt;/version&gt;</p>
<p>&lt;scope&gt;provided&lt;/scope&gt;</p>
<p>&lt;/dependency&gt;</p>
<p>&lt;dependency&gt;</p>
<p>&lt;groupId&gt;com.sun.el&lt;/groupId&gt;</p>
<p>&lt;artifactId&gt;el-<span style="text-decoration:underline;">ri</span>&lt;/artifactId&gt;</p>
<p>&lt;version&gt;1.0&lt;/version&gt;</p>
<p>&lt;/dependency&gt;</p>
<p>&lt;dependency&gt;</p>
<p>&lt;groupId&gt;org.springframework.ldap&lt;/groupId&gt;</p>
<p>&lt;artifactId&gt;spring-<span style="text-decoration:underline;">ldap</span>&lt;/artifactId&gt;</p>
<p>&lt;version&gt;1.2.1&lt;/version&gt;</p>
<p>&lt;/dependency&gt;</p>
<p>&lt;dependency&gt;</p>
<p>&lt;groupId&gt;org.ajax4jsf&lt;/groupId&gt;</p>
<p>&lt;artifactId&gt;ajax4jsf&lt;/artifactId&gt;</p>
<p>&lt;version&gt;1.0.5&lt;/version&gt;</p>
<p>&lt;/dependency&gt;</p>
<p>&lt;dependency&gt;</p>
<p>&lt;groupId&gt;<span style="text-decoration:underline;">opensymphony</span>&lt;/groupId&gt;</p>
<p>&lt;artifactId&gt;<span style="text-decoration:underline;">oscache</span>&lt;/artifactId&gt;</p>
<p>&lt;version&gt;2.4&lt;/version&gt;</p>
<p>&lt;/dependency&gt;</p>
<p>&lt;/dependencies&gt;</p>
<p>&lt;build&gt;</p>
<p>&lt;finalName&gt;<span style="text-decoration:underline;">greenwich</span>&lt;/finalName&gt;</p>
<p>&lt;plugins&gt;</p>
<p>&lt;plugin&gt;</p>
<p>&lt;artifactId&gt;<span style="text-decoration:underline;">maven</span>-compiler-<span style="text-decoration:underline;">plugin</span>&lt;/artifactId&gt;</p>
<p>&lt;version&gt;2.0.2&lt;/version&gt;</p>
<p>&lt;configuration&gt;</p>
<p>&lt;source&gt;1.6&lt;/source&gt;</p>
<p>&lt;target&gt;1.6&lt;/target&gt;</p>
<p>&lt;/configuration&gt;</p>
<p>&lt;/plugin&gt;</p>
<p>&lt;plugin&gt;</p>
<p>&lt;artifactId&gt;<span style="text-decoration:underline;">maven</span>-eclipse-<span style="text-decoration:underline;">plugin</span>&lt;/artifactId&gt;</p>
<p>&lt;version&gt;2.5.1&lt;/version&gt;</p>
<p>&lt;configuration&gt;</p>
<p>&lt;additionalProjectnatures&gt;</p>
<p>&lt;projectnature&gt;org.springframework.ide.eclipse.core.springnature&lt;/projectnature&gt;</p>
<p>&lt;/additionalProjectnatures&gt;</p>
<p>&lt;additionalBuildcommands&gt;</p>
<p>&lt;buildcommand&gt;org.springframework.ide.eclipse.core.springbuilder&lt;/buildcommand&gt;</p>
<p>&lt;/additionalBuildcommands&gt;</p>
<p>&lt;downloadSources&gt;false&lt;/downloadSources&gt;</p>
<p>&lt;downloadJavadocs&gt;false&lt;/downloadJavadocs&gt;</p>
<p>&lt;wtpversion&gt;1.5&lt;/wtpversion&gt;</p>
<p>&lt;/configuration&gt;</p>
<p>&lt;/plugin&gt;</p>
<p>&lt;plugin&gt;</p>
<p>&lt;artifactId&gt;<span style="text-decoration:underline;">maven</span>-idea-<span style="text-decoration:underline;">plugin</span>&lt;/artifactId&gt;</p>
<p>&lt;version&gt;2.1&lt;/version&gt;</p>
<p>&lt;configuration&gt;</p>
<p>&lt;downloadSources&gt;false&lt;/downloadSources&gt;</p>
<p>&lt;downloadJavadocs&gt;false&lt;/downloadJavadocs&gt;</p>
<p>&lt;dependenciesAsLibraries&gt;true&lt;/dependenciesAsLibraries&gt;</p>
<p>&lt;useFullNames&gt;false&lt;/useFullNames&gt;</p>
<p>&lt;/configuration&gt;</p>
<p>&lt;/plugin&gt;</p>
<p>&lt;plugin&gt;</p>
<p>&lt;groupId&gt;org.codehaus.mojo&lt;/groupId&gt;</p>
<p>&lt;artifactId&gt;hibernate3-<span style="text-decoration:underline;">maven</span>-<span style="text-decoration:underline;">plugin</span>&lt;/artifactId&gt;</p>
<p>&lt;version&gt;2.1&lt;/version&gt;</p>
<p>&lt;configuration&gt;</p>
<p>&lt;components&gt;</p>
<p>&lt;component&gt;</p>
<p>&lt;name&gt;hbm2ddl&lt;/name&gt;</p>
<p>&lt;implementation&gt;<span style="text-decoration:underline;">annotationconfiguration</span>&lt;/implementation&gt;</p>
<p>&lt;!&#8211; Use &#8216;<span style="text-decoration:underline;">jpaconfiguration</span>&#8216; if you&#8217;re using JPA. &#8211;&gt;</p>
<p>&lt;!&#8211;&lt;implementation&gt;<span style="text-decoration:underline;">jpaconfiguration</span>&lt;/implementation&gt;&#8211;&gt;</p>
<p>&lt;/component&gt;</p>
<p>&lt;/components&gt;</p>
<p>&lt;componentProperties&gt;</p>
<p>&lt;drop&gt;true&lt;/drop&gt;</p>
<p>&lt;jdk5&gt;true&lt;/jdk5&gt;</p>
<p>&lt;propertyfile&gt;target/classes/jdbc.properties&lt;/propertyfile&gt;</p>
<p>&lt;skip&gt;${maven.test.skip}&lt;/skip&gt;</p>
<p>&lt;/componentProperties&gt;</p>
<p>&lt;/configuration&gt;</p>
<p>&lt;executions&gt;</p>
<p>&lt;execution&gt;</p>
<p>&lt;phase&gt;process-test-resources&lt;/phase&gt;</p>
<p>&lt;goals&gt;</p>
<p>&lt;goal&gt;hbm2ddl&lt;/goal&gt;</p>
<p>&lt;/goals&gt;</p>
<p>&lt;/execution&gt;</p>
<p>&lt;/executions&gt;</p>
<p>&lt;dependencies&gt;</p>
<p>&lt;dependency&gt;</p>
<p>&lt;groupId&gt;${jdbc.groupId}&lt;/groupId&gt;</p>
<p>&lt;artifactId&gt;${jdbc.artifactId}&lt;/artifactId&gt;</p>
<p>&lt;version&gt;${jdbc.version}&lt;/version&gt;</p>
<p>&lt;/dependency&gt;</p>
<p>&lt;/dependencies&gt;</p>
<p>&lt;/plugin&gt;</p>
<p>&lt;plugin&gt;</p>
<p>&lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;</p>
<p>&lt;artifactId&gt;<span style="text-decoration:underline;">maven</span>-compiler-<span style="text-decoration:underline;">plugin</span>&lt;/artifactId&gt;</p>
<p>&lt;configuration&gt;</p>
<p>&lt;source&gt;1.6&lt;/source&gt;</p>
<p>&lt;target&gt;1.6&lt;/target&gt;</p>
<p>&lt;/configuration&gt;</p>
<p>&lt;/plugin&gt;</p>
<p>&lt;plugin&gt;</p>
<p>&lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;</p>
<p>&lt;artifactId&gt;<span style="text-decoration:underline;">maven</span>-war-<span style="text-decoration:underline;">plugin</span>&lt;/artifactId&gt;</p>
<p>&lt;version&gt;2.1-alpha-1&lt;/version&gt;</p>
<p>&lt;configuration&gt;</p>
<p>&lt;warSourceExcludes&gt;WEB-INF/<span style="text-decoration:underline;">lib</span>/el-<span style="text-decoration:underline;">api</span>-1.0.jar&lt;/warSourceExcludes&gt;</p>
<p>&lt;/configuration&gt;</p>
<p>&lt;/plugin&gt;</p>
<p>&lt;plugin&gt;</p>
<p>&lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt;</p>
<p>&lt;artifactId&gt;<span style="text-decoration:underline;">maven</span>-<span style="text-decoration:underline;">surefire</span>-<span style="text-decoration:underline;">plugin</span>&lt;/artifactId&gt;</p>
<p>&lt;configuration&gt;</p>
<p>&lt;!&#8211;</p>
<p>&lt;includes&gt; &lt;include&gt; **/WelcomePageControllerTest.java &lt;/include&gt;</p>
<p>&lt;/includes&gt;</p>
<p>&#8211;&gt;</p>
<p>&lt;/configuration&gt;</p>
<p>&lt;/plugin&gt;</p>
<p>&lt;/plugins&gt;</p>
<p>&lt;/build&gt;</p>
<p>&lt;/project&gt;</p>
<h3>Step 2: Run following command in project root folder. (To run the following command set apache-maven\bin directory in system path. I hope you guys might know it how to set.)</h3>
<p>mvn eclipse:eclipse</p>
<h3>Step 3:  Create following LoginBacking.java for Login and Logout. Create this file under src folder of root directory.</h3>
<p>Package Name: com.sample.bpbgp.security</p>
<p>Class Name: LoginBacking</p>
<p>package com.sample.bpbgp.security;</p>
<p>import javax.faces.application.FacesMessage;</p>
<p>import javax.faces.context.ExternalContext;</p>
<p>import javax.faces.context.FacesContext;</p>
<p>import javax.servlet.http.HttpServletResponse;</p>
<p>import javax.servlet.http.HttpSession;</p>
<p>import org.springframework.security.ui.AbstractProcessingFilter;</p>
<p>public class LoginBacking {</p>
<p>// properties</p>
<p>private String userId;</p>
<p>private String password;</p>
<p>/**</p>
<p>* default empty constructor</p>
<p>*/</p>
<p>public LoginBacking() {</p>
<p>Exception ex = (Exception) FacesContext</p>
<p>.getCurrentInstance()</p>
<p>.getExternalContext()</p>
<p>.getSessionMap()</p>
<p>.get(</p>
<p>AbstractProcessingFilter.SPRING_SECURITY_LAST_EXCEPTION_KEY);</p>
<p>if (ex != null)</p>
<p>FacesContext.getCurrentInstance().addMessage(</p>
<p>null,</p>
<p>new FacesMessage(FacesMessage.SEVERITY_ERROR, ex</p>
<p>.getMessage(), ex.getMessage()));</p>
<p>}</p>
<p>public void login() throws java.io.IOException {</p>
<p>FacesContext.getCurrentInstance().getExternalContext().redirect(</p>
<p>&#8220;/bpbgp/j_spring_security_check?j_username=&#8221; + userId</p>
<p>+ &#8220;&amp;j_password=&#8221; + password);</p>
<p>}</p>
<p>public void logout() throws java.io.IOException {</p>
<p>// FacesContext.getCurrentInstance().getExternalContext().redirect(</p>
<p>// &#8220;/bpbgp/j_spring_security_logout&#8221;);</p>
<p>ExternalContext ectx = FacesContext.getCurrentInstance()</p>
<p>.getExternalContext();</p>
<p>HttpServletResponse response = (HttpServletResponse) ectx.getResponse();</p>
<p>HttpSession session = (HttpSession) ectx.getSession(false);</p>
<p>session.invalidate();</p>
<p>FacesContext.getCurrentInstance().getExternalContext().redirect(</p>
<p>&#8220;/bpbgp/login.jsf&#8221;);</p>
<p>}</p>
<p>public String loginagain() {</p>
<p>return &#8220;success&#8221;;</p>
<p>}</p>
<p>public String getPassword() {</p>
<p>return password;</p>
<p>}</p>
<p>public void setPassword(String password) {</p>
<p>this.password = password;</p>
<p>}</p>
<p>public String getUserId() {</p>
<p>return userId;</p>
<p>}</p>
<p>public void setUserId(String userId) {</p>
<p>this.userId = userId;</p>
<p>}</p>
<p>}</p>
<h3>Step 4:  Create following BPBGPSessionListener.java to monitor sessions. Create this file under src folder of root directory.</h3>
<p>Package Name: com.sample.bpbgp.security</p>
<p>Class Name: BPBGPSessionListener</p>
<p>package com.sample.bpbgp.security;</p>
<p>import java.util.Date;</p>
<p>import javax.servlet.http.HttpSession;</p>
<p>import javax.servlet.http.HttpSessionEvent;</p>
<p>import javax.servlet.http.HttpSessionListener;</p>
<p>public class BPBGPSessionListener implements HttpSessionListener {</p>
<p>public BPBGPSessionListener() {</p>
<p>}</p>
<p>public void sessionCreated(HttpSessionEvent event) {</p>
<p>System.out.println(&#8220;Current Session created : &#8220;</p>
<p>+ event.getSession().getId() + &#8221; at &#8221; + new Date());</p>
<p>}</p>
<p>public void sessionDestroyed(HttpSessionEvent event) {</p>
<p>HttpSession session = event.getSession();</p>
<p>System.out.println(&#8220;Current Session destroyed :&#8221; + session.getId()</p>
<p>+ &#8221; Logging out user&#8221;);</p>
<p>}</p>
<p>}</p>
<h3>Step 5:  Create following SessionTimeoutFilter.java. If session timeout happens then this class will redirect to login page. Create this file under src folder of root directory.</h3>
<p>Package Name: com.sample.bpbgp.security</p>
<p>Class Name: SessionTimeoutFilter</p>
<p>package com.sample.bpbgp.security;</p>
<p>import java.io.IOException;</p>
<p>import javax.servlet.Filter;</p>
<p>import javax.servlet.FilterChain;</p>
<p>import javax.servlet.FilterConfig;</p>
<p>import javax.servlet.ServletException;</p>
<p>import javax.servlet.ServletRequest;</p>
<p>import javax.servlet.ServletResponse;</p>
<p>import javax.servlet.http.HttpServletRequest;</p>
<p>import javax.servlet.http.HttpServletResponse;</p>
<p>import org.apache.commons.lang.StringUtils;</p>
<p>public class SessionTimeoutFilter implements Filter {</p>
<p>private String timeoutPage = &#8220;login.jsf&#8221;;</p>
<p>public void init(FilterConfig filterConfig) throws ServletException {</p>
<p>}</p>
<p>public void doFilter(ServletRequest request, ServletResponse response,</p>
<p>FilterChain filterChain) throws IOException, ServletException {</p>
<p>if ((request instanceof HttpServletRequest)</p>
<p>&amp;&amp; (response instanceof HttpServletResponse)) {</p>
<p>HttpServletRequest httpServletRequest = (HttpServletRequest) request;</p>
<p>HttpServletResponse httpServletResponse = (HttpServletResponse) response;</p>
<p>if (isSessionControlRequiredForThisResource(httpServletRequest)) {</p>
<p>if (isSessionInvalid(httpServletRequest)) {</p>
<p>String timeoutUrl = httpServletRequest.getContextPath()</p>
<p>+ &#8220;/&#8221; + getTimeoutPage();</p>
<p>System.out</p>
<p>.println(&#8220;Session is invalid, redirecting to timeout page::&#8221;</p>
<p>+ timeoutUrl);</p>
<p>httpServletResponse.sendRedirect(timeoutUrl);</p>
<p>return;</p>
<p>}</p>
<p>}</p>
<p>}</p>
<p>filterChain.doFilter(request, response);</p>
<p>}</p>
<p>private boolean isSessionControlRequiredForThisResource(</p>
<p>HttpServletRequest httpServletRequest) {</p>
<p>String requestPath = httpServletRequest.getRequestURI();</p>
<p>boolean controlRequired = !StringUtils.contains(requestPath,</p>
<p>getTimeoutPage());</p>
<p>return controlRequired;</p>
<p>}</p>
<p>private boolean isSessionInvalid(HttpServletRequest httpServletRequest) {</p>
<p>boolean sessionInValid = (httpServletRequest.getRequestedSessionId() != null)</p>
<p>&amp;&amp; !httpServletRequest.isRequestedSessionIdValid();</p>
<p>return sessionInValid;</p>
<p>}</p>
<p>public void destroy() {</p>
<p>}</p>
<p>public String getTimeoutPage() {</p>
<p>return timeoutPage;</p>
<p>}</p>
<p>public void setTimeoutPage(String timeoutPage) {</p>
<p>this.timeoutPage = timeoutPage;</p>
<p>}</p>
<p>}</p>
<h3>Step 6:  Create following SGDefaultLdapAuthoritiesPopulator.java. This class we used to retrieve roles for the particular user. This is not required if user groups and roles are maintained in correct format. Instance of this class you can use DefaultLdapAuthoritiesPopulator. We have role value in users attribute, that’s why I have created this class. You may not need to customize this DefaultLdapAuthoritiesPopulator class for your project. Create this file under src folder of root directory.</h3>
<p>Package Name: com.sample.bpbgp.security</p>
<p>Class Name: SGDefaultLdapAuthoritiesPopulator</p>
<p><strong>package</strong> com.sample.bpbgp.security;</p>
<p><strong>import</strong> java.util.HashSet;</p>
<p><strong>import</strong> java.util.Iterator;</p>
<p><strong>import</strong> java.util.Set;</p>
<p><strong>import</strong> org.springframework.ldap.core.ContextSource;</p>
<p><strong>import</strong> org.springframework.ldap.core.DirContextOperations;</p>
<p><strong>import</strong> org.springframework.security.GrantedAuthorityImpl;</p>
<p><strong>import</strong> org.springframework.security.ldap.populator.DefaultLdapAuthoritiesPopulator;</p>
<p><strong>public</strong> <strong>class</strong> SGDefaultLdapAuthoritiesPopulator <strong>extends</strong></p>
<p>DefaultLdapAuthoritiesPopulator {</p>
<p><strong>private</strong> String rolePrefix = &#8220;ROLE_&#8221;;</p>
<p><strong>public</strong> SGDefaultLdapAuthoritiesPopulator(ContextSource contextSource,</p>
<p>String groupSearchBase) {</p>
<p><strong>super</strong>(contextSource, groupSearchBase);</p>
<p>// <strong>TODO</strong> Auto-generated constructor stub</p>
<p>}</p>
<p>@Override</p>
<p><strong>protected</strong> <span style="text-decoration:underline;">Set</span> getAdditionalRoles(DirContextOperations user, String username) {</p>
<p><span style="text-decoration:underline;">Set</span> authorities = <strong>new</strong> <span style="text-decoration:underline;">HashSet</span>();</p>
<p><span style="text-decoration:underline;">Set</span> roleName = user.getAttributeSortedStringSet(&#8220;pdsRole&#8221;);</p>
<p><span style="text-decoration:underline;">Iterator</span> it = roleName.iterator();</p>
<p><strong>while</strong> (it.hasNext()) {</p>
<p>String role = (String) it.next();</p>
<p>role = role.toUpperCase();</p>
<p><span style="text-decoration:underline;">authorities.add(</span><strong><span style="text-decoration:underline;">new</span></strong><span style="text-decoration:underline;"> GrantedAuthorityImpl(</span><span style="text-decoration:underline;">rolePrefix</span><span style="text-decoration:underline;"> + role))</span>;</p>
<p>}</p>
<p><strong>return</strong> authorities;</p>
<p>}</p>
<p>}</p>
<h3>Step 7:  Now Create login.jsp . Create this file under src\main\webapp folder from root directory.</h3>
<h3>File Name: login.jsp</h3>
<p>&lt;%@ taglib uri=<em>&#8220;http://java.sun.com/jsf/html&#8221;</em> prefix=<em>&#8220;h&#8221;</em>%&gt;</p>
<p>&lt;%@ taglib uri=<em>&#8220;http://java.sun.com/jsf/core&#8221;</em> prefix=<em>&#8220;f&#8221;</em>%&gt;</p>
<p>&lt;%@ taglib uri=<em>&#8220;http://myfaces.apache.org/tomahawk&#8221;</em> prefix=<em>&#8220;t&#8221;</em>%&gt;</p>
<p>&lt;html&gt;</p>
<p>&lt;head&gt;</p>
<p>&lt;title&gt;System Login&lt;/title&gt;</p>
<p>&lt;LINK href=<em>&#8220;css/style1.css&#8221;</em> rel=<em>&#8220;stylesheet&#8221;</em> type=<em>&#8220;text/css&#8221;</em>&gt;</p>
<p>&lt;/head&gt;</p>
<p>&lt;body&gt;</p>
<p>&lt;f:view&gt;</p>
<p>&lt;h:form&gt;</p>
<p>&lt;center&gt;&lt;h:outputLabel</p>
<p>value=<em>&#8220;Welcome to University of Greenwich&#8221;</em> styleClass=<em>&#8220;loginhead&#8221;</em> /&gt;&lt;/center&gt;</p>
<p>&lt;br&gt;</p>
<p>&lt;table class=<em>&#8220;login&#8221;</em> align=<em>&#8220;center&#8221;</em>&gt;</p>
<p>&lt;tr&gt;</p>
<p>&lt;td align=<em>&#8220;center&#8221;</em>&gt;&lt;h:panelGrid columns=<em>&#8220;1&#8243;</em></p>
<p>styleClass=<em>&#8220;panelGridClass&#8221;</em>&gt;</p>
<p>&lt;p&gt;&lt;t:messages showDetail=<em>&#8220;true&#8221;</em> showSummary=<em>&#8220;false&#8221;</em>/&gt;&lt;/p&gt;</p>
<p>&lt;h:outputLabel value=<em>&#8220;User Name&#8221;</em> for=<em>&#8220;j_username&#8221;</em></p>
<p>styleClass=<em>&#8220;login&#8221;</em> /&gt;</p>
<p>&lt;t:inputText id=<em>&#8220;j_username&#8221;</em> forceId=<em>&#8220;true&#8221;</em></p>
<p>value=&#8221;#{loginBacking.userId}&#8221; size=<em>&#8220;40&#8243;</em> maxlength=<em>&#8220;80&#8243;</em></p>
<p>required=<em>&#8220;true&#8221;</em>&gt;&lt;/t:inputText&gt;</p>
<p>&lt;h:outputLabel value=<em>&#8220;Password&#8221;</em> for=<em>&#8220;j_password&#8221;</em> styleClass=<em>&#8220;login&#8221;</em> /&gt;</p>
<p>&lt;t:inputSecret id=<em>&#8220;j_password&#8221;</em> forceId=<em>&#8220;true&#8221;</em></p>
<p>value=&#8221;#{loginBacking.password}&#8221; size=<em>&#8220;40&#8243;</em> maxlength=<em>&#8220;80&#8243;</em></p>
<p>redisplay=<em>&#8220;true&#8221;</em> required=<em>&#8220;true&#8221;</em>&gt;&lt;/t:inputSecret&gt;</p>
<p>&lt;/h:panelGrid&gt;&lt;/td&gt;</p>
<p>&lt;/tr&gt;</p>
<p>&lt;tr&gt;</p>
<p>&lt;td align=<em>&#8220;center&#8221;</em>&gt;&lt;h:commandButton</p>
<p>action=&#8221;#{loginBacking.login}&#8221; value=<em>&#8220;Login&#8221;</em> /&gt;&lt;/td&gt;</p>
<p>&lt;/tr&gt;</p>
<p>&lt;/table&gt;</p>
<p>&lt;/h:form&gt;</p>
<p>&lt;/f:view&gt;</p>
<p>&lt;/body&gt;</p>
<p>&lt;/html&gt;</p>
<h3>Step 8:  Now Create accessDenied.jsp. Create this file under src\main\webapp folder from root directory.</h3>
<h3>File Name: accessDenied.jsp</h3>
<p>&lt;%@ taglib uri=<em>&#8220;http://java.sun.com/jsf/html&#8221;</em> prefix=<em>&#8220;h&#8221;</em>%&gt;</p>
<p>&lt;%@ taglib uri=<em>&#8220;http://java.sun.com/jsf/core&#8221;</em> prefix=<em>&#8220;f&#8221;</em>%&gt;</p>
<p>&lt;html&gt;</p>
<p>&lt;head&gt;</p>
<p>&lt;title&gt;Access Denied&lt;/title&gt;</p>
<p>&lt;/head&gt;</p>
<p>&lt;body&gt;</p>
<p>&lt;f:view&gt;</p>
<p>&lt;h:form id=<em>&#8220;form&#8221;</em>&gt;</p>
<p>&lt;h:panelGrid id=<em>&#8220;grid&#8221;</em> columns=<em>&#8220;1&#8243;</em>&gt;</p>
<p>&lt;h:outputText id=<em>&#8220;output1&#8243;</em></p>
<p>value=<em>&#8220;Sorry, You don&#8217;t have the permissions.&#8221;</em> /&gt;</p>
<p>&lt;/h:panelGrid&gt;</p>
<p>&lt;h:commandButton action=&#8221;#{loginBacking.logout}&#8221; value=<em>&#8220;Logout&#8221;</em> /&gt;</p>
<p>&lt;/h:form&gt;</p>
<p>&lt;/f:view&gt;</p>
<p>&lt;/body&gt;</p>
<p>&lt;/html&gt;</p>
<h3>Step 9:  Now Create logoutSuccess.jsp. Create this file under src\main\webapp folder from root directory.</h3>
<h3>File Name: logoutSuccess.jsp</h3>
<p>&lt;%@ taglib uri=<em>&#8220;http://java.sun.com/jsf/html&#8221;</em> prefix=<em>&#8220;h&#8221;</em> %&gt;</p>
<p>&lt;%@ taglib uri=<em>&#8220;http://java.sun.com/jsf/core&#8221;</em> prefix=<em>&#8220;f&#8221;</em>%&gt;</p>
<p>&lt;html&gt;</p>
<p>&lt;head&gt;</p>
<p>&lt;title&gt;Logged out&lt;/title&gt;</p>
<p>&lt;/head&gt;</p>
<p>&lt;body&gt;</p>
<p>&lt;f:view&gt;</p>
<p>&lt;h:form id=<em>&#8220;form&#8221;</em>&gt;</p>
<p>&lt;h:panelGrid id=<em>&#8220;grid&#8221;</em> columns=<em>&#8220;1&#8243;</em>&gt;</p>
<p>&lt;h:outputText id=<em>&#8220;output1&#8243;</em> value=<em>&#8220;You have successfully logged out.&#8221;</em>/&gt;</p>
<p>&lt;/h:panelGrid&gt;</p>
<p>&lt;/h:form&gt;</p>
<p>&lt;/f:view&gt;</p>
<p>&lt;/body&gt;</p>
<p>&lt;/html&gt;</p>
<h3>Step 10:  Now Create sessionExpired.jsp. Create this file under src\main\webapp folder from root directory.</h3>
<h3>File Name: sessionExpired.jsp</h3>
<p>&lt;%@page contentType=<em>&#8220;text/html&#8221;</em> pageEncoding=<em>&#8220;UTF-8&#8243;</em>%&gt;</p>
<p>&lt;!DOCTYPE HTML PUBLIC &#8220;-//W3C//DTD HTML 4.01 Transitional//EN&#8221;</p>
<p>&#8220;http://www.w3.org/TR/html4/loose.dtd&#8221;&gt;</p>
<p>&lt;%@ taglib uri=<em>&#8220;http://java.sun.com/jstl/core&#8221;</em> prefix=<em>&#8220;c&#8221;</em>%&gt;</p>
<p>&lt;%</p>
<p>System.out.println(&#8220;Session Expired Redirecting to Login.jsf&#8221;);</p>
<p>%&gt;</p>
<p>&lt;c:redirect url=<em>&#8220;/login.jsf&#8221;</em> /&gt;</p>
<h3>Step 11:  Now Create hello.jsp. Create this file under src\main\webapp\pages folder from root directory.</h3>
<h3>File Name: hello.jsp</h3>
<p>&lt;%@ taglib uri=<em>&#8220;http://java.sun.com/jsf/html&#8221;</em> prefix=<em>&#8220;h&#8221;</em>%&gt;</p>
<p>&lt;%@ taglib uri=<em>&#8220;http://java.sun.com/jsf/core&#8221;</em> prefix=<em>&#8220;f&#8221;</em>%&gt;</p>
<p>&lt;html&gt;</p>
<p>&lt;head&gt;&lt;title&gt;Hello World&lt;/title&gt;</p>
<p>&lt;/head&gt;</p>
<p>&lt;body&gt;</p>
<p>&lt;f:view&gt;</p>
<p>&lt;h:form id=<em>&#8220;form&#8221;</em>&gt;</p>
<p>&lt;h:panelGrid id=<em>&#8220;grid&#8221;</em> columns=<em>&#8220;1&#8243;</em>&gt;</p>
<p>&lt;h:outputText value=&#8221;<em>HELLO </em>#{sessionScope.SPRING_SECURITY_LAST_USERNAME}&#8221; /&gt;</p>
<p>&lt;h:outputText value=<em>&#8220;HELLO Welcome To Sample Application&#8221;</em>/&gt;</p>
<p>&lt;/h:panelGrid&gt;</p>
<p>&lt;/h:form&gt;</p>
<p>&lt;/f:view&gt;</p>
<p>&lt;/body&gt;</p>
<p>&lt;/html&gt;</p>
<h3>Step 12:  Now we have to create config file for JSF(faces-config.xml). Create this file under src\main\webapp\WEB-INF folder from root directory.</h3>
<h3>File Name: faces-config.xml</h3>
<p>&lt;?xml version=<em>&#8220;1.0&#8243;</em> encoding=<em>&#8220;UTF-8&#8243;</em>?&gt;</p>
<p>&lt;!DOCTYPE faces-config PUBLIC</p>
<p>&#8220;-//Sun Microsystems, Inc.//DTD JavaServer Faces Config 1.1//EN&#8221;</p>
<p>&#8220;http://java.sun.com/dtd/web-facesconfig_1_1.dtd&#8221;&gt;</p>
<p>&lt;faces-config&gt;</p>
<p>&lt;application&gt;</p>
<p>&lt;message-bundle&gt;ValidationResources&lt;/message-bundle&gt;</p>
<p>&lt;variable-resolver&gt;</p>
<p>org.springframework.web.jsf.DelegatingVariableResolver</p>
<p>&lt;/variable-resolver&gt;</p>
<p>&lt;locale-config&gt;</p>
<p>&lt;default-locale&gt;en_US&lt;/default-locale&gt;</p>
<p>&lt;supported-locale&gt;fr&lt;/supported-locale&gt;</p>
<p>&lt;/locale-config&gt;</p>
<p>&lt;/application&gt;</p>
<p>&lt;managed-bean&gt;</p>
<p>&lt;managed-bean-name&gt;loginBacking&lt;/managed-bean-name&gt;</p>
<p>&lt;managed-bean-class&gt;com.sample.bpbgp.security.LoginBacking&lt;/managed-bean-class&gt;</p>
<p>&lt;managed-bean-scope&gt;request&lt;/managed-bean-scope&gt;</p>
<p>&lt;/managed-bean&gt;</p>
<p>&lt;navigation-rule&gt;</p>
<p>&lt;from-view-id&gt;/login.jsp&lt;/from-view-id&gt;</p>
<p>&lt;navigation-case&gt;</p>
<p>&lt;from-outcome&gt;login&lt;/from-outcome&gt;</p>
<p>&lt;to-view-id&gt;/j_spring_security_check.jsp&lt;/to-view-id&gt;</p>
<p>&lt;/navigation-case&gt;</p>
<p>&lt;/navigation-rule&gt;</p>
<p>&lt;navigation-rule&gt;</p>
<p>&lt;from-view-id&gt;/accessDenied.jsp&lt;/from-view-id&gt;</p>
<p>&lt;navigation-case&gt;</p>
<p>&lt;from-outcome&gt;logout&lt;/from-outcome&gt;</p>
<p>&lt;to-view-id&gt;/j_spring_security_logout&lt;/to-view-id&gt;</p>
<p>&lt;/navigation-case&gt;</p>
<p>&lt;/navigation-rule&gt;</p>
<p>&lt;navigation-rule&gt;</p>
<p>&lt;from-view-id&gt;*&lt;/from-view-id&gt;</p>
<p>&lt;navigation-case&gt;</p>
<p>&lt;from-outcome&gt;logout&lt;/from-outcome&gt;</p>
<p>&lt;to-view-id&gt;/j_spring_security_logout&lt;/to-view-id&gt;</p>
<p>&lt;/navigation-case&gt;</p>
<p>&lt;/navigation-rule&gt;</p>
<p>&lt;navigation-rule&gt;</p>
<p>&lt;from-view-id&gt;*&lt;/from-view-id&gt;</p>
<p>&lt;navigation-case&gt;</p>
<p>&lt;from-outcome&gt;accessDenied&lt;/from-outcome&gt;</p>
<p>&lt;to-view-id&gt;/accessDenied.jsp&lt;/to-view-id&gt;</p>
<p>&lt;/navigation-case&gt;</p>
<p>&lt;/navigation-rule&gt;</p>
<p>&lt;/faces-config&gt;</p>
<h3>Step 13:  Now we have to create config file for Spring(webContext.xml). Create this file under src\main\webapp\WEB-INF folder from root directory.</h3>
<h3>File Name: webContext.xml</h3>
<p>&lt;?xml version=<em>&#8220;1.0&#8243;</em> encoding=<em>&#8220;UTF-8&#8243;</em>?&gt;</p>
<p>&lt;beans xmlns=<em>&#8220;http://www.springframework.org/schema/beans&#8221;</em></p>
<p>xmlns:xsi=<em>&#8220;http://www.w3.org/2001/XMLSchema-instance&#8221;</em> xmlns:aop=<em>&#8220;http://www.springframework.org/schema/aop&#8221;</em></p>
<p>xmlns:jee=<em>&#8220;http://www.springframework.org/schema/jee&#8221;</em> xmlns:lang=<em>&#8220;http://www.springframework.org/schema/lang&#8221;</em></p>
<p>xmlns:tx=<em>&#8220;http://www.springframework.org/schema/tx&#8221;</em> xmlns:util=<em>&#8220;http://www.springframework.org/schema/util&#8221;</em></p>
<p>xmlns:security=<em>&#8220;http://www.springframework.org/schema/security&#8221;</em></p>
<p>xsi:schemaLocation=<em>&#8220;http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd</em></p>
<p><em> http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.1.xsd</em></p>
<p><em> http://www.springframework.org/schema/jee http://www.springframework.org/schema/jee/spring-jee-2.0.xsd</em></p>
<p><em> http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-2.0.xsd</em></p>
<p><em> http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spring-tx-2.1.xsd</em></p>
<p><em> http://www.springframework.org/schema/util http://www.springframework.org/schema/util/spring-util-2.0.xsd</em></p>
<p><em> http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-2.0.1.xsd&#8221;</em>&gt;</p>
<p>&lt;!&#8211; LDAP Security Start&#8211;&gt;</p>
<p>&lt;bean id=<em>&#8220;filterChainProxy&#8221;</em> class=<em>&#8220;org.springframework.security.util.FilterChainProxy&#8221;</em>&gt;</p>
<p>&lt;security:filter-chain-map path-type=<em>&#8220;ant&#8221;</em>&gt;</p>
<p>&lt;security:filter-chain pattern=<em>&#8220;/**&#8221;</em></p>
<p>filters=<em>&#8220;</em></p>
<p><em> httpSessionContextIntegrationFilterWithASCTrue,</em></p>
<p><em> authenticationProcessingFilter,</em></p>
<p><em> exceptionTranslationFilter,</em></p>
<p><em> anonymousProcessingFilter,</em></p>
<p><em> filterSecurityInterceptor&#8221;</em> /&gt;</p>
<p>&lt;/security:filter-chain-map&gt;</p>
<p>&lt;/bean&gt;</p>
<p>&lt;bean id=<em>&#8220;httpSessionContextIntegrationFilterWithASCTrue&#8221;</em></p>
<p>class=<em>&#8220;org.springframework.security.context.HttpSessionContextIntegrationFilter&#8221;</em>&gt;</p>
<p>&lt;property name=<em>&#8220;allowSessionCreation&#8221;</em> value=<em>&#8220;true&#8221;</em> /&gt;</p>
<p>&lt;/bean&gt;</p>
<p>&lt;bean id=<em>&#8220;authenticationProcessingFilter&#8221;</em></p>
<p>class=<em>&#8220;org.springframework.security.ui.webapp.AuthenticationProcessingFilter&#8221;</em>&gt;</p>
<p>&lt;property name=<em>&#8220;authenticationManager&#8221;</em> ref=<em>&#8220;authenticationManager&#8221;</em> /&gt;</p>
<p>&lt;property name=<em>&#8220;authenticationFailureUrl&#8221;</em> value=<em>&#8220;/accessDenied.jsf&#8221;</em> /&gt;</p>
<p>&lt;property name=<em>&#8220;defaultTargetUrl&#8221;</em> value=<em>&#8220;/pages/hello.jsf&#8221;</em> /&gt;</p>
<p>&lt;property name=<em>&#8220;filterProcessesUrl&#8221;</em> value=<em>&#8220;/j_spring_security_check&#8221;</em> /&gt;</p>
<p>&lt;/bean&gt;</p>
<p>&lt;bean id=<em>&#8216;authenticationManager&#8217;</em> class=<em>&#8216;org.springframework.security.providers.ProviderManager&#8217;</em>&gt;</p>
<p>&lt;property name=<em>&#8216;providers&#8217;</em>&gt;</p>
<p>&lt;list&gt;</p>
<p>&lt;ref bean=<em>&#8216;ldapAuthProvider&#8217;</em> /&gt;</p>
<p>&lt;/list&gt;</p>
<p>&lt;/property&gt;</p>
<p>&lt;/bean&gt;</p>
<p>&lt;bean id=<em>&#8220;exceptionTranslationFilter&#8221;</em></p>
<p>class=<em>&#8220;org.springframework.security.ui.ExceptionTranslationFilter&#8221;</em>&gt;</p>
<p>&lt;property name=<em>&#8220;authenticationEntryPoint&#8221;</em>&gt;</p>
<p>&lt;ref bean=<em>&#8220;formLoginAuthenticationEntryPoint&#8221;</em> /&gt;</p>
<p>&lt;/property&gt;</p>
<p>&lt;property name=<em>&#8220;accessDeniedHandler&#8221;</em>&gt;</p>
<p>&lt;bean class=<em>&#8220;org.springframework.security.ui.AccessDeniedHandlerImpl&#8221;</em>&gt;</p>
<p>&lt;property name=<em>&#8220;errorPage&#8221;</em> value=<em>&#8220;/accessDenied.jsf&#8221;</em> /&gt;</p>
<p>&lt;/bean&gt;</p>
<p>&lt;/property&gt;</p>
<p>&lt;/bean&gt;</p>
<p>&lt;bean id=<em>&#8220;formLoginAuthenticationEntryPoint&#8221;</em></p>
<p>class=<em>&#8220;org.springframework.security.ui.webapp.AuthenticationProcessingFilterEntryPoint&#8221;</em>&gt;</p>
<p>&lt;property name=<em>&#8220;loginFormUrl&#8221;</em>&gt;</p>
<p>&lt;value&gt;/login.jsp&lt;/value&gt;</p>
<p>&lt;/property&gt;</p>
<p>&lt;property name=<em>&#8220;forceHttps&#8221;</em>&gt;</p>
<p>&lt;value&gt;false&lt;/value&gt;</p>
<p>&lt;/property&gt;</p>
<p>&lt;/bean&gt;</p>
<p>&lt;bean id=<em>&#8220;filterSecurityInterceptor&#8221;</em></p>
<p>class=<em>&#8220;org.springframework.security.intercept.web.FilterSecurityInterceptor&#8221;</em>&gt;</p>
<p>&lt;property name=<em>&#8220;authenticationManager&#8221;</em> ref=<em>&#8220;authenticationManager&#8221;</em> /&gt;</p>
<p>&lt;property name=<em>&#8220;accessDecisionManager&#8221;</em> ref=<em>&#8220;accessDecisionManager&#8221;</em> /&gt;</p>
<p>&lt;property name=<em>&#8220;objectDefinitionSource&#8221;</em>&gt;</p>
<p>&lt;security:filter-invocation-definition-source&gt;</p>
<p>&lt;security:intercept-url pattern=<em>&#8220;/pages/**&#8221;</em></p>
<p>access=<em>&#8220;ROLE_ADMIN&#8221;</em> /&gt;</p>
<p>&lt;security:intercept-url pattern=<em>&#8220;/facality/**&#8221;</em></p>
<p>access=<em>&#8220;ROLE_FACULTY&#8221;</em> /&gt;</p>
<p>&lt;security:intercept-url pattern=<em>&#8220;/**&#8221;</em></p>
<p>access=<em>&#8220;IS_AUTHENTICATED_ANONYMOUSLY&#8221;</em> /&gt;</p>
<p>&lt;/security:filter-invocation-definition-source&gt;</p>
<p>&lt;/property&gt;</p>
<p>&lt;/bean&gt;</p>
<p>&lt;bean id=<em>&#8220;accessDecisionManager&#8221;</em> class=<em>&#8220;org.springframework.security.vote.AffirmativeBased&#8221;</em>&gt;</p>
<p>&lt;property name=<em>&#8220;decisionVoters&#8221;</em>&gt;</p>
<p>&lt;list&gt;</p>
<p>&lt;bean class=<em>&#8220;org.springframework.security.vote.RoleVoter&#8221;</em> /&gt;</p>
<p>&lt;bean class=<em>&#8220;org.springframework.security.vote.AuthenticatedVoter&#8221;</em> /&gt;</p>
<p>&lt;/list&gt;</p>
<p>&lt;/property&gt;</p>
<p>&lt;/bean&gt;</p>
<p>&lt;bean id=<em>&#8220;anonymousProcessingFilter&#8221;</em></p>
<p>class=<em>&#8220;org.springframework.security.providers.anonymous.AnonymousProcessingFilter&#8221;</em>&gt;</p>
<p>&lt;property name=<em>&#8220;key&#8221;</em> value=<em>&#8220;anonymousUser&#8221;</em> /&gt;</p>
<p>&lt;property name=<em>&#8220;userAttribute&#8221;</em> value=<em>&#8220;ANONYMOUSUSER,PRIV_ANONYMOUS&#8221;</em> /&gt;</p>
<p>&lt;/bean&gt;</p>
<p>&lt;bean id=<em>&#8220;contextSource&#8221;</em></p>
<p>class=<em>&#8220;org.springframework.security.ldap.DefaultSpringSecurityContextSource&#8221;</em>&gt;</p>
<p>&lt;constructor-arg value=<em>&#8220;ldap://metal.sct.co.in:389&#8243;</em> /&gt;</p>
<p>&lt;property name=<em>&#8220;userDn&#8221;</em> value=<em>&#8220;cn=Directory Manager&#8221;</em> /&gt;</p>
<p>&lt;property name=<em>&#8220;password&#8221;</em> value=<em>&#8220;pipeline&#8221;</em> /&gt;</p>
<p>&lt;/bean&gt;</p>
<p>&lt;bean id=<em>&#8220;ldapAuthProvider&#8221;</em> class=<em>&#8220;org.springframework.security.providers.ldap.LdapAuthenticationProvider&#8221;</em>&gt;</p>
<p>&lt;constructor-arg ref=<em>&#8220;authenticator&#8221;</em> /&gt;</p>
<p>&lt;constructor-arg ref=<em>&#8220;populator&#8221;</em> /&gt;</p>
<p>&lt;security:custom-authentication-provider /&gt;</p>
<p>&lt;/bean&gt;</p>
<p>&lt;bean id=<em>&#8220;authenticator&#8221;</em></p>
<p>class=<em>&#8220;org.springframework.security.providers.ldap.authenticator.BindAuthenticator&#8221;</em>&gt;</p>
<p>&lt;constructor-arg ref=<em>&#8220;contextSource&#8221;</em> /&gt;</p>
<p>&lt;property name=<em>&#8220;userSearch&#8221;</em>&gt;</p>
<p>&lt;bean id=<em>&#8220;userSearch&#8221;</em></p>
<p>class=<em>&#8220;org.springframework.security.ldap.search.FilterBasedLdapUserSearch&#8221;</em>&gt;</p>
<p>&lt;constructor-arg index=<em>&#8220;0&#8243;</em> value=<em>&#8220;ou=People,o=sct.co.in,o=cp&#8221;</em> /&gt;</p>
<p>&lt;constructor-arg index=<em>&#8220;1&#8243;</em> value=<em>&#8220;(uid={0})&#8221;</em> /&gt;</p>
<p>&lt;constructor-arg index=<em>&#8220;2&#8243;</em> ref=<em>&#8220;contextSource&#8221;</em> /&gt;</p>
<p>&lt;property name=<em>&#8220;searchSubtree&#8221;</em> value=<em>&#8220;true&#8221;</em> /&gt;</p>
<p>&lt;/bean&gt;</p>
<p>&lt;/property&gt;</p>
<p>&lt;!&#8211; If you they want <span style="text-decoration:underline;">userid</span> as login then <span style="text-decoration:underline;">uncomment</span> this &#8211;&gt;</p>
<p>&lt;!&#8211;</p>
<p>&lt;property&gt; &lt;list&gt;</p>
<p>&lt;value&gt;<span style="text-decoration:underline;">uid</span>={0},<span style="text-decoration:underline;">ou</span>=People,o=sct.co.in,o=<span style="text-decoration:underline;">cp</span>&lt;/value&gt; &lt;/list&gt; &lt;/property&gt;</p>
<p>&#8211;&gt;</p>
<p>&lt;/bean&gt;</p>
<p>&lt;bean id=<em>&#8220;populator&#8221;</em></p>
<p>class=<em>&#8220;com.sample.bpbgp.security.SGDefaultLdapAuthoritiesPopulator&#8221;</em>&gt;</p>
<p>&lt;constructor-arg ref=<em>&#8220;contextSource&#8221;</em> /&gt;</p>
<p>&lt;constructor-arg value=<em>&#8220;ou=AccessGroups,o=sct.co.in,o=cp&#8221;</em> /&gt;</p>
<p>&lt;property name=<em>&#8220;groupRoleAttribute&#8221;</em> value=<em>&#8220;cn&#8221;</em> /&gt;</p>
<p>&lt;property name=<em>&#8220;searchSubtree&#8221;</em> value=<em>&#8220;false&#8221;</em> /&gt;</p>
<p>&lt;property name=<em>&#8220;convertToUpperCase&#8221;</em> value=<em>&#8220;true&#8221;</em> /&gt;</p>
<p>&lt;property name=<em>&#8220;rolePrefix&#8221;</em> value=<em>&#8220;ROLE_&#8221;</em> /&gt;</p>
<p>&lt;property name=<em>&#8220;groupSearchFilter&#8221;</em> value=<em>&#8220;(member={0})&#8221;</em> /&gt;</p>
<p>&lt;/bean&gt;</p>
<p>&lt;!&#8211; <span style="text-decoration:underline;">Ldap</span> Security End &#8211;&gt;</p>
<p>&lt;/beans&gt;</p>
<h3>Step 14:  Now we have to create config file for our web application(web.xml). Create this file under src\main\webapp\WEB-INF folder from root directory.</h3>
<h3>File Name: web.xml</h3>
<p>&lt;?xml version=<em>&#8220;1.0&#8243;</em> encoding=<em>&#8220;UTF-8&#8243;</em>?&gt;</p>
<p>&lt;web-app id=<em>&#8220;WebApp_ID&#8221;</em> version=<em>&#8220;2.4&#8243;</em></p>
<p>xmlns=<em>&#8220;http://java.sun.com/xml/ns/j2ee&#8221;</em> xmlns:xsi=<em>&#8220;http://www.w3.org/2001/XMLSchema-instance&#8221;</em></p>
<p>xsi:schemaLocation=<em>&#8220;http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd&#8221;</em>&gt;</p>
<p>&lt;display-name&gt;JSF Web ApplicationJSF <span style="text-decoration:underline;">App</span>&lt;/display-name&gt;</p>
<p>&lt;context-param&gt;</p>
<p>&lt;param-name&gt;javax.faces.STATE_SAVING_METHOD&lt;/param-name&gt;</p>
<p>&lt;param-value&gt;server&lt;/param-value&gt;</p>
<p>&lt;/context-param&gt;</p>
<p>&lt;context-param&gt;</p>
<p>&lt;param-name&gt;javax.faces.CONFIG_FILES&lt;/param-name&gt;</p>
<p>&lt;param-value&gt;/WEB-INF/faces-config.xml&lt;/param-value&gt;</p>
<p>&lt;/context-param&gt;</p>
<p>&lt;context-param&gt;</p>
<p>&lt;param-name&gt;contextConfigLocation&lt;/param-name&gt;</p>
<p>&lt;param-value&gt;/WEB-INF/webContext.xml&lt;/param-value&gt;</p>
<p>&lt;/context-param&gt;</p>
<p>&lt;context-param&gt;</p>
<p>&lt;param-name&gt;com.sun.faces.validateXml&lt;/param-name&gt;</p>
<p>&lt;param-value&gt;true&lt;/param-value&gt;</p>
<p>&lt;/context-param&gt;</p>
<p>&lt;listener&gt;</p>
<p>&lt;listener-class&gt;org.springframework.web.context.ContextLoaderListener&lt;/listener-class&gt;</p>
<p>&lt;/listener&gt;</p>
<p>&lt;listener&gt;</p>
<p>&lt;listener-class&gt;</p>
<p>org.springframework.web.context.request.RequestContextListener&lt;/listener-class&gt;</p>
<p>&lt;/listener&gt;</p>
<p>&lt;listener&gt;</p>
<p>&lt;listener-class&gt;org.springframework.security.ui.session.HttpSessionEventPublisher&lt;/listener-class&gt;</p>
<p>&lt;/listener&gt;</p>
<p>&lt;listener&gt;</p>
<p>&lt;listener-class&gt;com.sample.bpbgp.security.BPBGPSessionListener&lt;/listener-class&gt;</p>
<p>&lt;/listener&gt;</p>
<p>&lt;servlet&gt;</p>
<p>&lt;servlet-name&gt;Faces <span style="text-decoration:underline;">Servlet</span>&lt;/servlet-name&gt;</p>
<p>&lt;servlet-class&gt;javax.faces.webapp.FacesServlet&lt;/servlet-class&gt;</p>
<p>&lt;load-on-startup&gt;1&lt;/load-on-startup&gt;</p>
<p>&lt;/servlet&gt;</p>
<p>&lt;servlet-mapping&gt;</p>
<p>&lt;servlet-name&gt;Faces <span style="text-decoration:underline;">Servlet</span>&lt;/servlet-name&gt;</p>
<p>&lt;url-pattern&gt;*.<span style="text-decoration:underline;">jsf</span>&lt;/url-pattern&gt;</p>
<p>&lt;/servlet-mapping&gt;</p>
<p>&lt;filter&gt;</p>
<p>&lt;filter-name&gt;filterChainProxy&lt;/filter-name&gt;</p>
<p>&lt;filter-class&gt;org.springframework.web.filter.DelegatingFilterProxy&lt;/filter-class&gt;</p>
<p>&lt;/filter&gt;</p>
<p>&lt;filter&gt;</p>
<p>&lt;filter-name&gt;SessionTimeoutFilter&lt;/filter-name&gt;</p>
<p>&lt;filter-class&gt;com.sample.bpbgp.security.SessionTimeoutFilter&lt;/filter-class&gt;</p>
<p>&lt;/filter&gt;</p>
<p>&lt;filter&gt;</p>
<p>&lt;display-name&gt;Ajax4jsf Filter&lt;/display-name&gt;</p>
<p>&lt;filter-name&gt;ajax4jsf&lt;/filter-name&gt;</p>
<p>&lt;filter-class&gt;org.ajax4jsf.Filter&lt;/filter-class&gt;</p>
<p>&lt;/filter&gt;</p>
<p>&lt;filter-mapping&gt;</p>
<p>&lt;filter-name&gt;ajax4jsf&lt;/filter-name&gt;</p>
<p>&lt;servlet-name&gt;Faces <span style="text-decoration:underline;">Servlet</span>&lt;/servlet-name&gt;</p>
<p>&lt;dispatcher&gt;REQUEST&lt;/dispatcher&gt;</p>
<p>&lt;dispatcher&gt;FORWARD&lt;/dispatcher&gt;</p>
<p>&lt;dispatcher&gt;INCLUDE&lt;/dispatcher&gt;</p>
<p>&lt;/filter-mapping&gt;</p>
<p>&lt;filter-mapping&gt;</p>
<p>&lt;filter-name&gt;filterChainProxy&lt;/filter-name&gt;</p>
<p>&lt;url-pattern&gt;/pages/*&lt;/url-pattern&gt;</p>
<p>&lt;/filter-mapping&gt;</p>
<p>&lt;filter-mapping&gt;</p>
<p>&lt;filter-name&gt;filterChainProxy&lt;/filter-name&gt;</p>
<p>&lt;url-pattern&gt;/*&lt;/url-pattern&gt;</p>
<p>&lt;dispatcher&gt;FORWARD&lt;/dispatcher&gt;</p>
<p>&lt;dispatcher&gt;REQUEST&lt;/dispatcher&gt;</p>
<p>&lt;/filter-mapping&gt;</p>
<p>&lt;filter-mapping&gt;</p>
<p>&lt;filter-name&gt;SessionTimeoutFilter&lt;/filter-name&gt;</p>
<p>&lt;url-pattern&gt;/*&lt;/url-pattern&gt;</p>
<p>&lt;/filter-mapping&gt;</p>
<p>&lt;welcome-file-list&gt;</p>
<p>&lt;welcome-file&gt;index.html&lt;/welcome-file&gt;</p>
<p>&lt;welcome-file&gt;index.htm&lt;/welcome-file&gt;</p>
<p>&lt;welcome-file&gt;index.jsp&lt;/welcome-file&gt;</p>
<p>&lt;welcome-file&gt;default.html&lt;/welcome-file&gt;</p>
<p>&lt;welcome-file&gt;default.htm&lt;/welcome-file&gt;</p>
<p>&lt;welcome-file&gt;default.jsp&lt;/welcome-file&gt;</p>
<p>&lt;/welcome-file-list&gt;</p>
<p>&lt;session-config&gt;</p>
<p>&lt;session-timeout&gt;1&lt;/session-timeout&gt;</p>
<p>&lt;/session-config&gt;</p>
<p>&lt;error-page&gt;</p>
<p>&lt;exception-type&gt;javax.faces.application.ViewExpiredException&lt;/exception-type&gt;</p>
<p>&lt;location&gt;/sessionExpired.jsf&lt;/location&gt;</p>
<p>&lt;/error-page&gt;</p>
<p>&lt;/web-app&gt;</p>
<h3>Step 15:  Now we have to create css file for our application. Create this file under src\main\webapp\css folder from root directory.</h3>
<h3>File Name: style1.css</h3>
<p>/* CSS file */</p>
<p>table.login {</p>
<p>width: <em>30%</em>;</p>
<p>border: <em>1px</em> <em>solid</em> <em>#e5eff8</em>;</p>
<p>text-align: <em>center</em>;</p>
<p>align: <em>center</em></p>
<p>}</p>
<p>TABLE.panelGridClass {</p>
<p>width: <em>300px</em>;</p>
<p>margin: <em>0px</em> <em>auto</em>;</p>
<p>}</p>
<p>TABLE.panelGridClass TR TD {</p>
<p>width: <em>100%</em>;</p>
<p>}</p>
<p>TABLE.panelGridClass TR TD INPUT {</p>
<p>width: <em>100%</em>;</p>
<p>}</p>
<p>Lable.login {</p>
<p>font-size: <em>14</em> <em>position</em> :<em> absolute</em>;</p>
<p>text-align: <em>center</em>;</p>
<p>}</p>
<p>Lable.loginhead {</p>
<p>font-size: <em>18</em> <em>position</em> :<em> absolute</em>;</p>
<p>text-align: <em>center</em>;</p>
<p>}</p>
<h3>Step 16:  Now we have to create build properties file for our application. Create this file under src\main\assembly folder from root directory.</h3>
<h3>File Name: build.properties</h3>
<p>### Commonly used directory structures used across the Flex Reg projects&#8230;</p>
<p>PROJECT_SRC_DIR=../src</p>
<p>PROJECT_MN_DIR=../src/main</p>
<p>JAVA_SRC_DIR=../src/main/java</p>
<p>FILTERS_DIR=../src/main/filters</p>
<p>CONFIG_DIR=../src/main/config</p>
<p>WEBAPP_DIR=../src/main/webapp</p>
<p>WEBAPP_PAGES_DIR=../src/main/webapp/pages</p>
<p>WEBAPP_IMGS_DIR=../src/main/webapp/imgs</p>
<p>WEBAPP_CSS_DIR=../src/main/webapp/css</p>
<p>WEB-INF_DIR=../src/main/webapp/WEB-INF</p>
<p>ASSMBLY_META-INF_DIR=../src/main/assembly/META-INF</p>
<p>PROJECT_TEST_DIR=../src/test</p>
<p>TEST_JAVA_DIR=../src/test/java</p>
<p>TEST_RSCRS_DIR=../src/test/resources</p>
<p>TEST_FILTERS_DIR=../src/test/filters</p>
<p>PROJECT_SITE_DIR=../src/site</p>
<p>RSRCS_DIR=../src/main/resources</p>
<p># Target folders</p>
<p>ASSMBLY_DIR=../target/assembly</p>
<p>CLASSES_DIR=../target/classes</p>
<p>TARGET_DIR=../target</p>
<p>WEBAPP_TARGET_DIR=../target/webapp</p>
<p>WEBAPP_PAGES_TARGET_DIR=../target/webapp/pages</p>
<p>WEBAPP_IMGS_TARGET_DIR=../target/webapp/imgs</p>
<p>WEBAPP_CSS_TARGET_DIR=../target/webapp/css</p>
<p># Replaces WEB-INF_DIR</p>
<p>WEB-INF_TARGET_DIR=../target/webapp/WEB-INF/</p>
<p># Replaces WEB-INF_CLASSES_DIR</p>
<p>WEB-INF_CLASSES_TARGET_DIR=../target/webapp/WEB-INF/classes</p>
<p># Replaces WEB-INF_LIB_TARGET_DIR</p>
<p>WEB-INF_LIB_TARGET_DIR=../target/webapp/WEB-INF/lib</p>
<p>WAR_TARGET_DIR=../target</p>
<p>javac.debug=on</p>
<p>javac.deprecation=on</p>
<p>javac.nowarn=off</p>
<h3>Step 17:  Now create build file for our application. Create this file under src\main\assembly folder from root directory.</h3>
<h3>File Name: build.xml</h3>
<p>&lt;?xml version=&#8221;1.0&#8243;?&gt;</p>
<p>&lt;!&#8211; ======================================================================</p>
<p>${date} ${time}</p>
<p>${project}</p>
<p>${description}</p>
<p>${user}</p>
<p>====================================================================== &#8211;&gt;</p>
<p>&lt;project name=&#8221;Sample JSF Web Application&#8221; default=&#8221;ALL&#8221; basedir=&#8221;../../&#8221; xmlns:artifact=&#8221;antlib:org.apache.maven.artifact.ant&#8221;&gt;</p>
<p>&lt;property name=&#8221;PROJECT_ROOT&#8221; value=&#8221;${basedir}&#8221; /&gt;</p>
<p>&lt;property name=&#8221;RSRCS_DIR&#8221; value=&#8221;${PROJECT_ROOT}/main/resources&#8221; /&gt;</p>
<p>&lt;property file=&#8221;${PROJECT_ROOT}/main/assembly/build.properties&#8221; /&gt;</p>
<p>&lt;artifact:pom id=&#8221;maven.project&#8221; file=&#8221;../pom.xml&#8221; /&gt;</p>
<p>&lt;artifact:dependencies pathId=&#8221;maven.dependency.classpath&#8221; filesetId=&#8221;maven.dependency.fileset&#8221; verbose=&#8221;false&#8221;&gt;</p>
<p>&lt;pom refid=&#8221;maven.project&#8221; /&gt;</p>
<p>&lt;/artifact:dependencies&gt;</p>
<p>&lt;path id=&#8221;classpath&#8221;&gt;</p>
<p>&lt;path refid=&#8221;maven.dependency.classpath&#8221; /&gt;</p>
<p>&lt;/path&gt;</p>
<p>&lt;target name=&#8221;init&#8221;&gt;</p>
<p>&lt;echo message=&#8221;Initializing directories under Sample JSF Web Application Project Root: ${PROJECT_ROOT}&#8221; /&gt;</p>
<p>&lt;tstamp /&gt;</p>
<p>&lt;mkdir dir=&#8221;${CLASSES_DIR}&#8221; /&gt;</p>
<p>&lt;mkdir dir=&#8221;${PROJECT_SRC_DIR}&#8221; /&gt;</p>
<p>&lt;mkdir dir=&#8221;${PROJECT_MN_DIR}&#8221; /&gt;</p>
<p>&lt;mkdir dir=&#8221;${JAVA_SRC_DIR}&#8221; /&gt;</p>
<p>&lt;mkdir dir=&#8221;${RSRCS_DIR}&#8221; /&gt;</p>
<p>&lt;mkdir dir=&#8221;${FILTERS_DIR}&#8221; /&gt;</p>
<p>&lt;mkdir dir=&#8221;${CONFIG_DIR}&#8221; /&gt;</p>
<p>&lt;mkdir dir=&#8221;${WEBAPP_DIR}&#8221; /&gt;</p>
<p>&lt;mkdir dir=&#8221;${WEB-INF_DIR}&#8221; /&gt;</p>
<p>&lt;mkdir dir=&#8221;${WEB-INF_LIB_TARGET_DIR}&#8221; /&gt;</p>
<p>&lt;mkdir dir=&#8221;${ASSMBLY_DIR}&#8221; /&gt;</p>
<p>&lt;mkdir dir=&#8221;${ASSMBLY_META-INF_DIR}&#8221; /&gt;</p>
<p>&lt;mkdir dir=&#8221;${PROJECT_TEST_DIR}&#8221; /&gt;</p>
<p>&lt;mkdir dir=&#8221;${TEST_JAVA_DIR}&#8221; /&gt;</p>
<p>&lt;mkdir dir=&#8221;${TEST_RSCRS_DIR}&#8221; /&gt;</p>
<p>&lt;mkdir dir=&#8221;${TEST_FILTERS_DIR}&#8221; /&gt;</p>
<p>&lt;mkdir dir=&#8221;${PROJECT_SITE_DIR}&#8221; /&gt;</p>
<p>&lt;/target&gt;</p>
<p>&lt;target name=&#8221;ALL&#8221; description=&#8221;Build and package the project&#8221;&gt;</p>
<p>&lt;echo message=&#8221;Executing Sample JSF Web Application WAR file build&#8230;&#8221; /&gt;</p>
<p>&lt;antcall target=&#8221;assembleWar&#8221; /&gt;</p>
<p>&lt;/target&gt;</p>
<p>&lt;target name=&#8221;clean&#8221; description=&#8221;Clean the project&#8221;&gt;</p>
<p>&lt;echo message=&#8221;Cleaning web app assembly folder&#8230; ${ASSMBLY_DIR}&#8221; /&gt;</p>
<p>&lt;echo message=&#8221;Cleaning classes folder&#8230; ${CLASSES_DIR}&#8221; /&gt;</p>
<p>&lt;echo message=&#8221;Cleaning web inf lib folder&#8230; ${WEB-INF_LIB_TARGET_DIR}&#8221; /&gt;</p>
<p>&lt;delete includeemptydirs=&#8221;true&#8221; quiet=&#8221;true&#8221;&gt;</p>
<p>&lt;fileset dir=&#8221;${ASSMBLY_DIR}&#8221; includes=&#8221;**/*&#8221; /&gt;</p>
<p>&lt;fileset dir=&#8221;${CLASSES_DIR}&#8221; includes=&#8221;**/*&#8221; /&gt;</p>
<p>&lt;fileset dir=&#8221;${WEB-INF_LIB_TARGET_DIR}&#8221; includes=&#8221;**/*&#8221; /&gt;</p>
<p>&lt;/delete&gt;</p>
<p>&lt;/target&gt;</p>
<p>&lt;target name=&#8221;compile&#8221; description=&#8221;Compile Java source files&#8221; depends=&#8221;init&#8221;&gt;</p>
<p>&lt;echo message=&#8221;Compiling Java source files&#8230;&#8221; /&gt;</p>
<p>&lt;javac destdir=&#8221;${CLASSES_DIR}&#8221; classpathref=&#8221;classpath&#8221; debug=&#8221;${javac.debug}&#8221; nowarn=&#8221;${javac.nowarn}&#8221; deprecation=&#8221;${javac.deprecation}&#8221; encoding=&#8221;default&#8221; source=&#8221;1.5&#8243; target=&#8221;1.5&#8243;&gt;</p>
<p>&lt;src path=&#8221;${JAVA_SRC_DIR}&#8221; /&gt;</p>
<p>&lt;src path=&#8221;${TEST_JAVA_DIR}&#8221; /&gt;</p>
<p>&lt;/javac&gt;</p>
<p>&lt;copy todir=&#8221;${CLASSES_DIR}&#8221;&gt;</p>
<p>&lt;fileset dir=&#8221;${JAVA_SRC_DIR}&#8221;&gt;</p>
<p>&lt;patternset&gt;</p>
<p>&lt;include name=&#8221;**/*.properties&#8221; /&gt;</p>
<p>&lt;include name=&#8221;**/*.xml&#8221; /&gt;</p>
<p>&lt;/patternset&gt;</p>
<p>&lt;/fileset&gt;</p>
<p>&lt;fileset dir=&#8221;${TEST_JAVA_DIR}&#8221;&gt;</p>
<p>&lt;patternset&gt;</p>
<p>&lt;include name=&#8221;**/*.properties&#8221; /&gt;</p>
<p>&lt;include name=&#8221;**/*.xml&#8221; /&gt;</p>
<p>&lt;/patternset&gt;</p>
<p>&lt;/fileset&gt;</p>
<p>&lt;/copy&gt;</p>
<p>&lt;/target&gt;</p>
<p>&lt;target name=&#8221;copyWebAppToAssemblyDir&#8221; description=&#8221;Copying web app files to the assembly directory&#8230;&#8221;&gt;</p>
<p>&lt;echo message=&#8221;Copying web app files to the assembly directory&#8230;&#8221; /&gt;</p>
<p>&lt;copy todir=&#8221;${WEBAPP_TARGET_DIR}&#8221;&gt;</p>
<p>&lt;fileset dir=&#8221;${WEBAPP_DIR}&#8221;&gt;</p>
<p>&lt;include name=&#8221;*&#8221; /&gt;</p>
<p>&lt;include name=&#8221;**/*.xml&#8221; /&gt;</p>
<p>&lt;/fileset&gt;</p>
<p>&lt;/copy&gt;</p>
<p>&lt;/target&gt;</p>
<p>&lt;target name=&#8221;copyWebAppPagesToAssemblyDir&#8221; description=&#8221;Copying web app page files to the assembly directory&#8230;&#8221;&gt;</p>
<p>&lt;echo message=&#8221;Copying web app pages to the assembly directory&#8230;&#8221; /&gt;</p>
<p>&lt;copy todir=&#8221;${WEBAPP_PAGES_TARGET_DIR}&#8221;&gt;</p>
<p>&lt;fileset dir=&#8221;${WEBAPP_PAGES_DIR}&#8221;&gt;</p>
<p>&lt;include name=&#8221;*&#8221; /&gt;</p>
<p>&lt;/fileset&gt;</p>
<p>&lt;/copy&gt;</p>
<p>&lt;/target&gt;</p>
<p>&lt;target name=&#8221;copyWebAppImagesToAssemblyDir&#8221; description=&#8221;Copying web app image files to the assembly directory&#8230;&#8221;&gt;</p>
<p>&lt;echo message=&#8221;Copying web app image files to the assembly directory&#8230;&#8221; /&gt;</p>
<p>&lt;copy todir=&#8221;${WEBAPP_IMGS_TARGET_DIR}&#8221;&gt;</p>
<p>&lt;fileset dir=&#8221;${WEBAPP_IMGS_DIR}&#8221;&gt;</p>
<p>&lt;include name=&#8221;*&#8221; /&gt;</p>
<p>&lt;/fileset&gt;</p>
<p>&lt;/copy&gt;</p>
<p>&lt;/target&gt;</p>
<p>&lt;target name=&#8221;copyWebAppCSSToAssemblyDir&#8221; description=&#8221;Copying web app CSS files to the assembly directory&#8230;&#8221;&gt;</p>
<p>&lt;echo message=&#8221;Copying web app CSS files to the assembly directory&#8230;&#8221; /&gt;</p>
<p>&lt;copy todir=&#8221;${WEBAPP_CSS_TARGET_DIR}&#8221;&gt;</p>
<p>&lt;fileset dir=&#8221;${WEBAPP_CSS_DIR}&#8221;&gt;</p>
<p>&lt;include name=&#8221;*&#8221; /&gt;</p>
<p>&lt;/fileset&gt;</p>
<p>&lt;/copy&gt;</p>
<p>&lt;/target&gt;</p>
<p>&lt;target name=&#8221;copyResourcesToAssemblyDir&#8221; description=&#8221;Copying Hibernate resource files to the assembly directory&#8230;&#8221;&gt;</p>
<p>&lt;echo message=&#8221;Copying Hibernate resource files to the assembly directory&#8230;&#8221; /&gt;</p>
<p>&lt;echo message=&#8221;&#8230; copying spring files to WEB-INF&#8221; /&gt;</p>
<p>&lt;copy todir=&#8221;${WEB-INF_CLASSES_TARGET_DIR}&#8221;&gt;</p>
<p>&lt;fileset dir=&#8221;${RSRCS_DIR}&#8221;&gt;</p>
<p>&lt;include name=&#8221;**/*&#8221; /&gt;</p>
<p>&lt;/fileset&gt;</p>
<p>&lt;/copy&gt;</p>
<p>&lt;/target&gt;</p>
<p>&lt;target name=&#8221;copyHibernateResourcesToAssemblyDir&#8221; description=&#8221;Copying web app CSS files to the assembly directory&#8230;&#8221;&gt;</p>
<p>&lt;echo message=&#8221;Copying web app CSS files to the assembly directory&#8230;&#8221; /&gt;</p>
<p>&lt;copy todir=&#8221;${WEBAPP_CSS_TARGET_DIR}&#8221;&gt;</p>
<p>&lt;fileset dir=&#8221;${WEBAPP_CSS_DIR}&#8221;&gt;</p>
<p>&lt;include name=&#8221;*&#8221; /&gt;</p>
<p>&lt;/fileset&gt;</p>
<p>&lt;/copy&gt;</p>
<p>&lt;/target&gt;</p>
<p>&lt;target name=&#8221;copyConfigFilesToAssmblyDir&#8221; description=&#8221;Copies the config files to the Assembly dir&#8221;&gt;</p>
<p>&lt;echo message=&#8221;Copying config files to root assembly directory&#8230;&#8221; /&gt;</p>
<p>&lt;copy todir=&#8221;${ASSMBLY_DIR}&#8221; overwrite=&#8221;true&#8221;&gt;</p>
<p>&lt;fileset dir=&#8221;${JAVA_SRC_DIR}&#8221;&gt;</p>
<p>&lt;include name=&#8221;*.xml&#8221; /&gt;</p>
<p>&lt;include name=&#8221;*.properties&#8221; /&gt;</p>
<p>&lt;/fileset&gt;</p>
<p>&lt;/copy&gt;</p>
<p>&lt;/target&gt;</p>
<p>&lt;target name=&#8221;copyClassFilesToWebInfClassesDir&#8221; description=&#8221;Copies the compiled class files to the WEB-INF/classes dir&#8221;&gt;</p>
<p>&lt;echo message=&#8221;Copying compiled class files to the WEB-INF/classes directory&#8230;&#8221; /&gt;</p>
<p>&lt;copy todir=&#8221;${WEB-INF_CLASSES_TARGET_DIR}&#8221; overwrite=&#8221;true&#8221;&gt;</p>
<p>&lt;fileset dir=&#8221;${CLASSES_DIR}&#8221; /&gt;</p>
<p>&lt;fileset dir=&#8221;${CLASSES_DIR}&#8221;&gt;</p>
<p>&lt;patternset&gt;</p>
<p>&lt;include name=&#8221;**/*.xml&#8221; /&gt;</p>
<p>&lt;include name=&#8221;**/*.properties&#8221; /&gt;</p>
<p>&lt;/patternset&gt;</p>
<p>&lt;/fileset&gt;</p>
<p>&lt;/copy&gt;</p>
<p>&lt;/target&gt;</p>
<p>&lt;target name=&#8221;copyJarFilesToWebInfLibDir&#8221; description=&#8221;Copies the jar files from the maven dependencies to the WEB-INF/lib dir&#8221;&gt;</p>
<p>&lt;echo message=&#8221;Copying maven dependency jar files to the WEB-INF/lib directory&#8230;&#8221; /&gt;</p>
<p>&lt;copy todir=&#8221;${WEB-INF_LIB_TARGET_DIR}&#8221; overwrite=&#8221;true&#8221;&gt;</p>
<p>&lt;fileset refid=&#8221;maven.dependency.fileset&#8221; /&gt;</p>
<p>&lt;!&#8211; This mapper strips off all leading directory information &#8211;&gt;</p>
<p>&lt;mapper type=&#8221;flatten&#8221; /&gt;</p>
<p>&lt;/copy&gt;</p>
<p>&lt;/target&gt;</p>
<p>&lt;target name=&#8221;assembleWar&#8221; description=&#8221;Assembles the Sample JSF Web Application WAR file&#8221; depends=&#8221;clean, compile, copyWebAppToAssemblyDir, copyWebAppPagesToAssemblyDir, copyWebAppImagesToAssemblyDir, copyWebAppCSSToAssemblyDir, copyClassFilesToWebInfClassesDir, copyHibernateResourcesToAssemblyDir, copyConfigFilesToAssmblyDir, copyResourcesToAssemblyDir, copyJarFilesToWebInfLibDir&#8221;&gt;</p>
<p>&lt;echo message=&#8221;Assembling Sample JSF Web Application War file&#8230;&#8221; /&gt;</p>
<p>&lt;delete file=&#8221;${WAR_TARGET_DIR}/bpbgp.war&#8221; /&gt;</p>
<p>&lt;war destfile=&#8221;${WAR_TARGET_DIR}/bpbgp.war&#8221; webxml=&#8221;${WEB-INF_TARGET_DIR}/web.xml&#8221; excludes=&#8221;build.xml, build.properties&#8221;&gt;</p>
<p>&lt;webinf dir=&#8221;${WEB-INF_TARGET_DIR}&#8221;&gt;</p>
<p>&lt;include name=&#8221;*.xml&#8221; /&gt;</p>
<p>&lt;include name=&#8221;*.properties&#8221; /&gt;</p>
<p>&lt;/webinf&gt;</p>
<p>&lt;lib dir=&#8221;${WEB-INF_LIB_TARGET_DIR}&#8221;&gt;</p>
<p>&lt;include name=&#8221;*.jar&#8221; /&gt;</p>
<p>&lt;exclude name=&#8221;el-api-1.0.jar&#8221;/&gt;</p>
<p>&lt;/lib&gt;</p>
<p>&lt;fileset dir=&#8221;${WEBAPP_TARGET_DIR}&#8221;&gt;</p>
<p>&lt;include name=&#8221;**/*.*&#8221; /&gt;</p>
<p>&lt;include name=&#8221;*.html&#8221; /&gt;</p>
<p>&lt;include name=&#8221;*.jsp&#8221; /&gt;</p>
<p>&lt;include name=&#8221;*.properties&#8221; /&gt;</p>
<p>&lt;exclude name=&#8221;WEB-INF/*.*&#8221; /&gt;</p>
<p>&lt;exclude name=&#8221;WEB-INF/**/*.*&#8221; /&gt;</p>
<p>&lt;/fileset&gt;</p>
<p>&lt;classes dir=&#8221;${WEB-INF_CLASSES_TARGET_DIR}&#8221; /&gt;</p>
<p>&lt;/war&gt;</p>
<p>&lt;/target&gt;</p>
<p>&lt;/project&gt;</p>
<h3>Step 18:  Now run ant build. Using ant command.</h3>
<h3>Step 19: Deploy the application war file in tomcat webapps directory.</h3>
<h3>Step 20: type following URL in brower</h3>
<p><a href="http://localhost:8080/bpbgp/login.jsf">http://localhost:8080/bpbgp/login.jsf</a></p>
<h3>Step 21: Give your LDAP userID, Password for login.</h3>
<br />Posted in Java  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/peterarockiaraj.wordpress.com/93/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/peterarockiaraj.wordpress.com/93/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/peterarockiaraj.wordpress.com/93/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/peterarockiaraj.wordpress.com/93/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/peterarockiaraj.wordpress.com/93/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/peterarockiaraj.wordpress.com/93/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/peterarockiaraj.wordpress.com/93/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/peterarockiaraj.wordpress.com/93/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/peterarockiaraj.wordpress.com/93/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/peterarockiaraj.wordpress.com/93/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/peterarockiaraj.wordpress.com/93/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/peterarockiaraj.wordpress.com/93/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/peterarockiaraj.wordpress.com/93/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/peterarockiaraj.wordpress.com/93/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=peterarockiaraj.wordpress.com&amp;blog=9287010&amp;post=93&amp;subd=peterarockiaraj&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://peterarockiaraj.wordpress.com/2010/01/15/integrating-jsf-spring-security-and-ldap-3/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f6e3d599f1ab85a63c80822d5e870f6a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">peterarockiaraj</media:title>
		</media:content>
	</item>
		<item>
		<title>Developing Web Services by using Mule, CXF, and Spring</title>
		<link>http://peterarockiaraj.wordpress.com/2009/11/05/developing-web-services-by-using-mule-cxf-and-spring/</link>
		<comments>http://peterarockiaraj.wordpress.com/2009/11/05/developing-web-services-by-using-mule-cxf-and-spring/#comments</comments>
		<pubDate>Thu, 05 Nov 2009 06:35:47 +0000</pubDate>
		<dc:creator>Peter Arockiaraj</dc:creator>
				<category><![CDATA[Web Services]]></category>

		<guid isPermaLink="false">http://peterarockiaraj.wordpress.com/?p=74</guid>
		<description><![CDATA[Introduction In this article we are going to develop a web service by using Spring with CXF and the Mule Enterprise Service Bus. This article provides steps (step by step) to create &#38;  deploy web services by using Spring,CXF and mule. Please go through below to find sample web services. Software Requirements EClipse (Java IDE)- [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=peterarockiaraj.wordpress.com&amp;blog=9287010&amp;post=74&amp;subd=peterarockiaraj&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<h2>Introduction</h2>
<p>In this article we are going to develop a web service by using Spring with CXF and the Mule Enterprise Service Bus. This article provides steps (step by step) to create &amp;  deploy web services by using Spring,CXF and mule. Please go through below to find sample web services.</p>
<h2>Software Requirements</h2>
<ol>
<li>EClipse (Java IDE)- Optional</li>
<li>Mule ESB (Download from <a href="http://www.mulesoft.org/display/MULE/Download">http://www.mulesoft.org/display/MULE/Download</a>)</li>
<li>CXF Jars (Required for Compilation-Download from <a href="http://cxf.apache.org/download.html">http://cxf.apache.org/download.html</a>)</li>
</ol>
<h2>The Code</h2>
<p>In this example, we are going to create a Student service, where students can register for particular course. In this example, we are going to use a code-first approach for this service using JAX-WS annotations.</p>
<p>First, we will need to create following classes and interface</p>
<ol>
<li>Our User-Defined Exception</li>
<li>The interface for our service</li>
<li>The implementation class for our service</li>
<li>Our Student bean</li>
</ol>
<h3>Step 1: Create new java project in EClipse</h3>
<h3>Step 2: Create the Exception class for our service (NotEnoughValueException.java)</h3>
<p><strong> </strong></p>
<p><strong>package</strong> com.peter.cxf.sample;</p>
<p><strong>public</strong> <strong>class</strong> <span style="text-decoration:underline;">NotEnoughValueException</span> <strong>extends</strong> Exception {</p>
<p>String detail;</p>
<p><strong>public</strong> NotEnoughValueException (String message, String detail) {</p>
<p><strong>super</strong> (message);</p>
<p><strong>this</strong>.detail = detail;</p>
<p>}</p>
<p><strong>public</strong> String getDetail () {</p>
<p><strong>return</strong> detail;</p>
<p>}</p>
<p>}</p>
<h3>Step 3: Create the interface for our service (StudentService.java)</h3>
<p><strong>package</strong> com.peter.cxf.sample;</p>
<p><strong>import</strong> javax.jws.WebParam;</p>
<p><strong>import</strong> javax.jws.WebResult;</p>
<p><strong>import</strong> javax.jws.WebService;</p>
<p>@WebService</p>
<p><strong>public</strong> <strong>interface</strong> StudentService {</p>
<p>@WebResult(name = &#8220;registrationstatus&#8221;)</p>
<p><strong>public</strong> String registerStudent(@WebParam(name = &#8220;student&#8221;) Student stu)</p>
<p><strong>throws</strong> NotEnoughValueException;</p>
<p>}</p>
<h3>Step 4: Create the implementation class for our service (StudentServiceImpl.java)</h3>
<p><strong>package</strong> com.peter.cxf.sample;</p>
<p><strong>import</strong> javax.jws.WebService;</p>
<p>@WebService(endpointInterface = &#8220;com.peter.cxf.sample.StudentService&#8221;, serviceName = &#8220;StudentService&#8221;)</p>
<p><strong>public</strong> <strong>class</strong> StudentServiceImpl {</p>
<p>/**</p>
<p>*</p>
<p>* <strong>@param</strong> stu</p>
<p>* <strong>@return</strong></p>
<p>* <strong>@throws</strong> NotEnoughValueException</p>
<p>*/</p>
<p><strong>public</strong> String registerStudent(Student stu) <strong>throws</strong> NotEnoughValueException {</p>
<p><strong>if</strong> (validate(stu)) {</p>
<p><strong>return</strong> &#8220;Hi &#8221; + stu.getFirstName() + &#8221; &#8221; + stu.getLastName()</p>
<p>+ &#8221; Your registertion is accepted. You Can join the course&#8221;;</p>
<p>} <strong>else</strong> {</p>
<p><strong>throw</strong> <strong>new</strong> NotEnoughValueException(&#8220;Input values are not enough&#8221;,</p>
<p>&#8220;Please check you data&#8221;);</p>
<p>}</p>
<p>}</p>
<p><strong>private</strong> <strong>boolean</strong> validate(Student stu) {</p>
<p><strong>if</strong> ((stu.getFirstName() != <strong>null</strong> || stu.getFirstName().trim().equals(&#8220;&#8221;))</p>
<p>&amp;&amp; (stu.getLastName() != <strong>null</strong> || stu.getLastName().trim()</p>
<p>.equals(&#8220;&#8221;))</p>
<p>&amp;&amp; (stu.getPhoneNumber() != <strong>null</strong> || stu.getPhoneNumber().trim()</p>
<p>.equals(&#8220;&#8221;)))</p>
<p><strong>return</strong> <strong>true</strong>;</p>
<p><strong>else</strong></p>
<p><strong>return</strong> <strong>false</strong>;</p>
<p>}</p>
<p>}</p>
<h2>Configuration</h2>
<p>To run our service under Mule, we need to create following configuration files:</p>
<ol>
<li>Spring configuration file</li>
<li>Mule configuration file</li>
</ol>
<h3>Step 5: Create the Spring Configuration file in project root folder (studentContext.xml)</h3>
<p>&lt;?xml version=<em>&#8220;1.0&#8243;</em> encoding=<em>&#8220;UTF-8&#8243;</em>?&gt;</p>
<p>&lt;beans xmlns=<em>&#8220;http://www.springframework.org/schema/beans&#8221;</em></p>
<p>xmlns:xsi=<em>&#8220;http://www.w3.org/2001/XMLSchema-instance&#8221;</em></p>
<p>xsi:schemaLocation=<em>&#8220;http://www.springframework.org/schema/beans</em></p>
<p><em> http://www.springframework.org/schema/beans/spring-beans-2.5.xsd&#8221;</em>&gt;</p>
<p>&lt;bean id=<em>&#8220;studentService&#8221;</em> class=<em>&#8220;com.peter.cxf.sample.StudentServiceImpl&#8221;</em></p>
<p>scope=<em>&#8220;singleton&#8221;</em>&gt;</p>
<p>&lt;/bean&gt;</p>
<p>&lt;/beans&gt;</p>
<h3>Step 6: Create the Mule Configuration file in project root folder (studentservice-config.xml)</h3>
<p>&lt;?xml version=<em>&#8220;1.0&#8243;</em> encoding=<em>&#8220;UTF-8&#8243;</em>?&gt;</p>
<p>&lt;mule xmlns=<em>&#8220;http://www.mulesource.org/schema/mule/core/2.2&#8243;</em></p>
<p>xmlns:xsi=<em>&#8220;http://www.w3.org/2001/XMLSchema-instance&#8221;</em> xmlns:spring=<em>&#8220;http://www.springframework.org/schema/beans&#8221;</em></p>
<p>xmlns:soap=<em>&#8220;http://www.mulesource.org/schema/mule/soap/2.2&#8243;</em> xmlns:cxf=<em>&#8220;http://www.mulesource.org/schema/mule/cxf/2.2&#8243;</em></p>
<p>xsi:schemaLocation=<em>&#8220;</em></p>
<p><em> http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd</em></p>
<p><em> http://www.mulesource.org/schema/mule/core/2.2 http://www.mulesource.org/schema/mule/core/2.2/mule.xsd</em></p>
<p><em> http://www.mulesource.org/schema/mule/soap/2.2 http://www.mulesource.org/schema/mule/soap/2.2/mule-soap.xsd</em></p>
<p><em> http://www.mulesource.org/schema/mule/cxf/2.2 http://www.mulesource.org/schema/mule/cxf/2.2/mule-cxf.xsd&#8221;</em>&gt;</p>
<p>&lt;spring:beans&gt;</p>
<p>&lt;spring:import resource=<em>&#8220;studentContext.xml&#8221;</em> /&gt;</p>
<p>&lt;/spring:beans&gt;</p>
<p>&lt;model name=<em>&#8220;services&#8221;</em>&gt;</p>
<p>&lt;service name=<em>&#8220;StudentService&#8221;</em>&gt;</p>
<p>&lt;inbound&gt;</p>
<p>&lt;cxf:inbound-endpoint</p>
<p>address=<em>&#8220;http://localhost:65082/services/StudentService&#8221;</em> /&gt;</p>
<p>&lt;/inbound&gt;</p>
<p>&lt;<span style="text-decoration:underline;">component</span>&gt;</p>
<p>&lt;<span style="text-decoration:underline;">spring-object</span> bean=<em>&#8220;studentService&#8221;</em> /&gt;</p>
<p>&lt;/component&gt;</p>
<p>&lt;/service&gt;</p>
<p>&lt;/model&gt;</p>
<p>&lt;/mule&gt;</p>
<h2>Build and Deployment</h2>
<h3>Step 7: Create the folder ‘ant’ inside the project root folder</h3>
<h3>Step 8: Create the build.xml file inside ant folder.</h3>
<p>&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;UTF-8&#8243;?&gt;</p>
<p>&lt;project name=&#8221;ws&#8221; basedir=&#8221;../&#8221; default=&#8221;archive&#8221;&gt;</p>
<p>&lt;target name=&#8221;archive&#8221;&gt;</p>
<p>&lt;jar destfile=&#8221;cxfstudentservices.jar&#8221;&gt;</p>
<p>&lt;fileset dir=&#8221;${basedir}\bin&#8221;&gt;</p>
<p>&lt;include name=&#8221;**/*.class&#8221; /&gt;</p>
<p>&lt;/fileset&gt;</p>
<p>&lt;fileset dir=&#8221;${basedir}&#8221;&gt;</p>
<p>&lt;include name=&#8221;**/*.xml&#8221; /&gt;</p>
<p>&lt;exclude name=&#8221;**/*build*&#8221; /&gt;</p>
<p>&lt;/fileset&gt;</p>
<p>&lt;/jar&gt;</p>
<p>&lt;/target&gt;</p>
<p>&lt;/project&gt;</p>
<h3>Step 9: run Ant build</h3>
<h3>Step 10: Copy cxfstudentservices.jar file from project root folder and copy it in MULE_HOME/lib/user folder.</h3>
<h2>Starting the service</h2>
<p>To start the service in mule you have run following command in command prompt.</p>
<p>In Windows: MULE_HOME/bin/mule.bat -config &lt;path-to-config-file&gt;\studentservice-config.xml</p>
<p>For Example:</p>
<p>c:\mule-standalone-2.2.1\bin\mule.bat -config D:\Java Code\CXFMuleStudentService\studentservice-config.xml</p>
<p>Please ensure that your service is up and running by opening following url in your web browser.</p>
<p><a href="http://localhost:65082/services/StudentService?wsdl">http://localhost:65082/services/StudentService?wsdl</a></p>
<h2>Testing the service</h2>
<p>To test your service, please check my previous posts, to create client program for web services.</p>
<br />Posted in Web Services  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/peterarockiaraj.wordpress.com/74/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/peterarockiaraj.wordpress.com/74/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/peterarockiaraj.wordpress.com/74/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/peterarockiaraj.wordpress.com/74/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/peterarockiaraj.wordpress.com/74/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/peterarockiaraj.wordpress.com/74/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/peterarockiaraj.wordpress.com/74/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/peterarockiaraj.wordpress.com/74/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/peterarockiaraj.wordpress.com/74/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/peterarockiaraj.wordpress.com/74/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/peterarockiaraj.wordpress.com/74/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/peterarockiaraj.wordpress.com/74/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/peterarockiaraj.wordpress.com/74/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/peterarockiaraj.wordpress.com/74/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=peterarockiaraj.wordpress.com&amp;blog=9287010&amp;post=74&amp;subd=peterarockiaraj&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://peterarockiaraj.wordpress.com/2009/11/05/developing-web-services-by-using-mule-cxf-and-spring/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f6e3d599f1ab85a63c80822d5e870f6a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">peterarockiaraj</media:title>
		</media:content>
	</item>
		<item>
		<title>Developing Web Services by Using Metro Webservices Framework</title>
		<link>http://peterarockiaraj.wordpress.com/2009/10/06/developing-web-services-by-using-metro-webservices-framework/</link>
		<comments>http://peterarockiaraj.wordpress.com/2009/10/06/developing-web-services-by-using-metro-webservices-framework/#comments</comments>
		<pubDate>Tue, 06 Oct 2009 09:42:24 +0000</pubDate>
		<dc:creator>Peter Arockiaraj</dc:creator>
				<category><![CDATA[Web Services]]></category>

		<guid isPermaLink="false">http://peterarockiaraj.wordpress.com/?p=69</guid>
		<description><![CDATA[Introduction In this article we are going to develop a web service by using Metro Web Services framework. This article provides steps (step by step ) to create &#38;  deploy web services by using Metro. Please go through below to find sample web services. Software Requirements EClipse (Java IDE)- Optional Metro Web services framework (Download [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=peterarockiaraj.wordpress.com&amp;blog=9287010&amp;post=69&amp;subd=peterarockiaraj&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<h2>Introduction</h2>
<p>In this article we are going to develop a web service by using Metro Web Services framework. This article provides steps (step by step ) to create &amp;  deploy web services by using Metro. Please go through below to find sample web services.</p>
<h2>Software Requirements</h2>
<ol>
<li>EClipse (Java IDE)- Optional</li>
<li>Metro Web services framework (Download from <a href="https://metro.dev.java.net/">https://metro.dev.java.net/</a>)</li>
</ol>
<h2>The Code</h2>
<p>In this example, we are going to create a Arithmetic service, to add two numbers. In this example, we are going to use a code-first approach for this service using JAX-WS annotations.</p>
<p><strong>Creating Server Application</strong></p>
<p>Step 1:  Download Following Jar files.</p>
<p>activation.jar</p>
<p>FastInfoset.jar</p>
<p>http.jar</p>
<p>jaxb-api.jar</p>
<p>jaxb-impl.jar</p>
<p>jaxb-xjc.jar</p>
<p>jaxws-api.jar</p>
<p>jsr181-api.jar</p>
<p>jsr250-api.jar</p>
<p>saaj-api.jar</p>
<p>saaj-impl.jar</p>
<p>jsr173_api.jar</p>
<p>woodstox.jar</p>
<p>resolver.jar</p>
<p>stax-ex.jar</p>
<p>streambuffer.jar</p>
<p>jaxws-rt.jar</p>
<p>mimepull.jar</p>
<p>webservices-api.jar</p>
<p>webservices-extra-api.jar</p>
<p>webservices-extra.jar</p>
<p>webservices-rt.jar</p>
<p>webservices-tools.jar</p>
<p>activation.jar</p>
<p>FastInfoset.jar</p>
<p>http.jar</p>
<p>jaxb-api.jar</p>
<p>jaxb-impl.jar</p>
<p>jaxb-xjc.jar</p>
<p>jaxws-api.jar</p>
<p>jsr181-api.jar</p>
<p>jsr250-api.jar</p>
<p>saaj-api.jar</p>
<p>saaj-impl.jar</p>
<p>jsr173_api.jar</p>
<p>woodstox.jar</p>
<p>resolver.jar</p>
<p>stax-ex.jar</p>
<p>streambuffer.jar</p>
<p>jaxws-rt.jar</p>
<p>mimepull.jar</p>
<p>webservices-api.jar</p>
<p>webservices-extra-api.jar</p>
<p>webservices-extra.jar</p>
<p>webservices-rt.jar</p>
<p>webservices-tools.jar</p>
<p>Step 2: Create New Java project in eclipse (MetroWebServices).</p>
<p>Step 3: Create WEB-INF,ant folder inside project folder.</p>
<p>Step 4: Create classes folder inside WEB-INF folder.</p>
<p>Step 5: Create lib folder inside WEB-INF folder.</p>
<p>Step 6: Copy all the jar file into lib folder.</p>
<p>Step 7: Add all jar files into classpath (In Eclipse set java build path-&gt;Libraries). Add set Default output folder into MetroWebServices/WEB-INF/classes</p>
<p>Step 8: Create ArithmeticException.java for user defined exception.</p>
<p><strong>package</strong> com.sungard.sample.metro.webservices;</p>
<p><strong>public</strong> <strong>class</strong> <span style="text-decoration:underline;">ArithmeticException</span> <strong>extends</strong> Exception {</p>
<p>String detail;</p>
<p><strong>public</strong> ArithmeticException (String message, String detail) {</p>
<p><strong>super</strong> (message);</p>
<p><strong>this</strong>.detail = detail;</p>
<p>}</p>
<p><strong>public</strong> String getDetail () {</p>
<p><strong>return</strong> detail;</p>
<p>}</p>
<p>}</p>
<p>Step 9: Create Web services class ArithmeticImpl.java</p>
<p><strong>package</strong> com.sungard.sample.metro.webservices;</p>
<p><strong>import</strong> javax.jws.WebService;</p>
<p><strong>import</strong> javax.jws.WebMethod;</p>
<p>@WebService</p>
<p><strong>public</strong> <strong>class</strong> ArithmeticImpl {</p>
<p>/**</p>
<p>* <strong>@param</strong> number1</p>
<p>* <strong>@param</strong> number2</p>
<p>* <strong>@return</strong> The sum</p>
<p>* <strong>@throws</strong> ArithmeticException</p>
<p>*             if any of the numbers to be added is negative.</p>
<p>*/</p>
<p>@WebMethod</p>
<p><strong>public</strong> <strong>int</strong> addTwoNumbers(<strong>int</strong> number1, <strong>int</strong> number2) <strong>throws</strong> ArithmeticException {</p>
<p><strong>if</strong> (number1 &lt; 0 || number2 &lt; 0) {</p>
<p><strong>throw</strong> <strong>new</strong> ArithmeticException(&#8220;Negative number cant be added!&#8221;,</p>
<p>&#8220;Numbers: &#8221; + number1 + &#8220;, &#8221; + number2);</p>
<p>}</p>
<p><strong>return</strong> number1 + number2;</p>
<p>}</p>
<p>}</p>
<p>Step 10: Inside Web-Inf folder create following xml to define endpoint class.</p>
<p>sun-jaxws.xml</p>
<p>&lt;?xml version=<em>&#8220;1.0&#8243;</em> encoding=<em>&#8220;UTF-8&#8243;</em>?&gt;</p>
<p>&lt;endpoints xmlns=<em>&#8216;http://java.sun.com/xml/ns/jax-ws/ri/runtime&#8217;</em> version=<em>&#8217;2.0&#8242;</em>&gt;</p>
<p>&lt;endpoint</p>
<p>name=<em>&#8216;sungardServices&#8217;</em></p>
<p>implementation=<em>&#8216;com.sungard.sample.metro.webservices.ArithmeticImpl&#8217;</em></p>
<p>url-pattern=<em>&#8216;/addTwoNumbers&#8217;</em>/&gt;</p>
<p>&lt;/endpoints&gt;</p>
<p>Step 11: Create Web.xml file inside web-inf folder as follows.</p>
<p>web.xml</p>
<p>&lt;?xml version=<em>&#8220;1.0&#8243;</em> encoding=<em>&#8220;UTF-8&#8243;</em>?&gt;</p>
<p>&lt;web-app version=<em>&#8220;2.4&#8243;</em> xmlns=<em>&#8220;http://java.sun.com/xml/ns/j2ee&#8221;</em></p>
<p>xmlns:xsi=<em>&#8220;http://www.w3.org/2001/XMLSchema-instance&#8221;</em></p>
<p>xsi:schemaLocation=<em>&#8220;http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd&#8221;</em>&gt;</p>
<p>&lt;description&gt;sungardServices&lt;/description&gt;</p>
<p>&lt;display-name&gt;sungardServices&lt;/display-name&gt;</p>
<p>&lt;listener&gt;</p>
<p>&lt;listener-class&gt;com.sun.xml.ws.transport.http.servlet.WSServletContextListener&lt;/listener-class&gt;</p>
<p>&lt;/listener&gt;</p>
<p>&lt;servlet&gt;</p>
<p>&lt;description&gt;JAX-WS <span style="text-decoration:underline;">endpoint</span> &#8211; sungardServices&lt;/description&gt;</p>
<p>&lt;display-name&gt;sungardServices&lt;/display-name&gt;</p>
<p>&lt;servlet-name&gt;sungardServices&lt;/servlet-name&gt;</p>
<p>&lt;servlet-class&gt;com.sun.xml.ws.transport.http.servlet.WSServlet&lt;/servlet-class&gt;</p>
<p>&lt;load-on-startup&gt;1&lt;/load-on-startup&gt;</p>
<p>&lt;/servlet&gt;</p>
<p>&lt;servlet-mapping&gt;</p>
<p>&lt;servlet-name&gt;sungardServices&lt;/servlet-name&gt;</p>
<p>&lt;url-pattern&gt;/addTwoNumbers&lt;/url-pattern&gt;</p>
<p>&lt;/servlet-mapping&gt;</p>
<p>&lt;session-config&gt;</p>
<p>&lt;session-timeout&gt;60&lt;/session-timeout&gt;</p>
<p>&lt;/session-config&gt;</p>
<p>&lt;/web-app&gt;</p>
<p>Step 12: Create build.xml file inside ant folder.</p>
<p>build.xml</p>
<p>&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;UTF-8&#8243;?&gt;</p>
<p>&lt;project name=&#8221;ws&#8221; basedir=&#8221;../&#8221; default=&#8221;archive&#8221;&gt;</p>
<p>&lt;target name=&#8221;archive&#8221;&gt;</p>
<p>&lt;jar destfile=&#8221;metroservices.war&#8221;&gt;</p>
<p>&lt;fileset dir=&#8221;${basedir}&#8221;&gt;</p>
<p>&lt;include name=&#8221;**/*.class&#8221; /&gt;</p>
<p>&lt;/fileset&gt;</p>
<p>&lt;fileset dir=&#8221;${basedir}&#8221;&gt;</p>
<p>&lt;include name=&#8221;**/*.jar&#8221; /&gt;</p>
<p>&lt;/fileset&gt;</p>
<p>&lt;fileset dir=&#8221;${basedir}&#8221;&gt;</p>
<p>&lt;include name=&#8221;**/*.xml&#8221; /&gt;</p>
<p>&lt;exclude name=&#8221;**/*build*&#8221; /&gt;</p>
<p>&lt;/fileset&gt;</p>
<p>&lt;/jar&gt;</p>
<p>&lt;/target&gt;</p>
<p>&lt;/project&gt;</p>
<p>Step 13: Run ant build</p>
<p>Step 14: Deploy metroservices.war file in tomcat server (or in some web server).</p>
<p>Step 15: To verify application deployed successfully or not use following url.<br />
<a href="http://localhost:8080/metroservices/addTwoNumbers?wsdl">http://localhost:8080/metroservices/addTwoNumbers?wsdl</a></p>
<p>Step 16: Browser will show wsdl file our web service.</p>
<h3>Creating Client Application</h3>
<p>Step 1: Create customizationfiles folder inside project folder.</p>
<p>Step 2: Crate following xml file inside customizationfiles folder.</p>
<p>custom-client.xml</p>
<p>&lt;?xml version=<em>&#8220;1.0&#8243;</em> encoding=<em>&#8220;UTF-8&#8243;</em> standalone=<em>&#8220;yes&#8221;</em>?&gt;</p>
<p>&lt;bindings</p>
<p>xmlns:xsd=<em>&#8220;http://www.w3.org/2001/XMLSchema&#8221;</em></p>
<p>xmlns:wsdl=<em>&#8220;http://schemas.xmlsoap.org/wsdl/&#8221;</em></p>
<p>wsdlLocation=<em>&#8220;http://localhost:8080/metroservices/addTwoNumbers?wsdl&#8221;</em></p>
<p>xmlns=<em>&#8220;http://java.sun.com/xml/ns/jaxws&#8221;</em>&gt;</p>
<p>&lt;bindings node=<em>&#8220;wsdl:definitions&#8221;</em>&gt;</p>
<p>&lt;package name=<em>&#8220;com.sungard.sample.metro.webservices.client&#8221;</em>/&gt;</p>
<p>&lt;/bindings&gt;</p>
<p>&lt;/bindings&gt;</p>
<p>Step 3: Crate following xml file inside customizationfiles folder.</p>
<p>custom-schema.xml</p>
<p>&lt;?xml version=<em>&#8220;1.0&#8243;</em> encoding=<em>&#8220;UTF-8&#8243;</em> standalone=<em>&#8220;yes&#8221;</em>?&gt;</p>
<p>&lt;bindings</p>
<p>xmlns:xsd=<em>&#8220;http://www.w3.org/2001/XMLSchema&#8221;</em></p>
<p>xmlns=<em>&#8220;http://java.sun.com/xml/ns/jaxb&#8221;</em></p>
<p>version=<em>&#8220;1.0&#8243;</em>&gt;</p>
<p>&lt;bindings schemaLocation=<em>&#8220;http://localhost:8080/metroservices/addTwoNumbers?xsd=1&#8243;</em> node=<em>&#8220;/xsd:schema&#8221;</em>&gt;</p>
<p>&lt;schemaBindings&gt;</p>
<p>&lt;package name=<em>&#8220;com.sungard.sample.metro.webservices.client&#8221;</em>/&gt;</p>
<p>&lt;/schemaBindings&gt;</p>
<p>&lt;/bindings&gt;</p>
<p>&lt;/bindings&gt;</p>
<p>Step 4: Create following build xml for client application inside ant folder.</p>
<p>buildclient.xml</p>
<p>&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;UTF-8&#8243;?&gt;</p>
<p>&lt;project name=&#8221;ws&#8221; basedir=&#8221;../&#8221; default=&#8221;generate-client&#8221;&gt;</p>
<p>&lt;path id=&#8221;wsit.classpath&#8221;&gt;</p>
<p>&lt;pathelement location=&#8221;${java.home}/../lib/tools.jar&#8221; /&gt;</p>
<p>&lt;fileset dir=&#8221;${basedir}/WEB-INF/lib/&#8221;&gt;</p>
<p>&lt;include name=&#8221;jaxb-xjc.jar&#8221; /&gt;</p>
<p>&lt;include name=&#8221;jaxb-api.jar&#8221; /&gt;</p>
<p>&lt;include name=&#8221;jaxb-impl.jar&#8221; /&gt;</p>
<p>&lt;include name=&#8221;webservices-api.jar&#8221; /&gt;</p>
<p>&lt;include name=&#8221;webservices-rt.jar&#8221; /&gt;</p>
<p>&lt;include name=&#8221;webservices-tools.jar&#8221; /&gt;</p>
<p>&lt;include name=&#8221;webservices-extra.jar&#8221; /&gt;</p>
<p>&lt;include name=&#8221;webservices-extra-api.jar&#8221; /&gt;</p>
<p>&lt;include name=&#8221;javaee.jar&#8221; /&gt;</p>
<p>&lt;include name=&#8221;activation.jar&#8221; /&gt;</p>
<p>&lt;/fileset&gt;</p>
<p>&lt;/path&gt;</p>
<p>&lt;taskdef name=&#8221;wsimport&#8221; classname=&#8221;com.sun.tools.ws.ant.WsImport&#8221;&gt;</p>
<p>&lt;classpath refid=&#8221;wsit.classpath&#8221; /&gt;</p>
<p>&lt;/taskdef&gt;</p>
<p>&lt;target name=&#8221;generate-client&#8221;&gt;</p>
<p>&lt;wsimport debug=&#8221;false&#8221; verbose=&#8221;false&#8221; keep=&#8221;true&#8221;</p>
<p>extension=&#8221;${extension}&#8221; destdir=&#8221;${basedir}/src&#8221;</p>
<p>wsdl=&#8221;http://localhost:8080/metroservices/addTwoNumbers?wsdl&#8221;&gt;</p>
<p>&lt;binding dir=&#8221;${basedir}/customizationfiles&#8221; includes=&#8221;custom-client.xml, custom-schema.xml&#8221; /&gt;</p>
<p>&lt;/wsimport&gt;</p>
<p>&lt;/target&gt;</p>
<p>&lt;/project&gt;</p>
<p>Step 5: Run buildclient.xml file using ant.</p>
<p>Step 6: Create Client.java file to invoke webservices.</p>
<p><strong>package</strong> com.sungard.sample.metro.webservices.client;</p>
<p><strong>public</strong> <strong>class</strong> Client {</p>
<p><strong>public</strong> <strong>static</strong> <strong>void</strong> main(String[] args) {</p>
<p><strong>try</strong> {</p>
<p>ArithmeticImpl impl = <strong>new</strong> ArithmeticImplService()</p>
<p>.getArithmeticImplPort();</p>
<p><strong>int</strong> number1 = 10;</p>
<p><strong>int</strong> number2 = 20;</p>
<p>System.<em>out</em></p>
<p>.printf(&#8220;Invoking addNumbers(%d, %d)\n&#8221;, number1, number2);</p>
<p><strong>int</strong> result;</p>
<p>result = impl.addTwoNumbers(number1, number2);</p>
<p>System.<em>out</em>.printf(&#8220;The result of adding %d and %d is %d.\n\n&#8221;,</p>
<p>number1, number2, result);</p>
<p>number1 = -10;</p>
<p>System.<em>out</em></p>
<p>.printf(&#8220;Invoking addNumbers(%d, %d)\n&#8221;, number1, number2);</p>
<p>result = impl.addTwoNumbers(number1, number2);</p>
<p>System.<em>out</em>.printf(&#8220;The result of adding %d and %d is %d.\n&#8221;,</p>
<p>number1, number2, result);</p>
<p>} <strong>catch</strong> (ArithmeticException_Exception e) {</p>
<p>e.printStackTrace();</p>
<p>}</p>
<p>}</p>
<p>}</p>
<p>Step 7: run Client.java file in your eclipse. You will be getting following output.</p>
<p>Invoking addNumbers(10, 20)</p>
<p>The result of adding 10 and 20 is 30.</p>
<p>Invoking addNumbers(-10, 20)</p>
<p><span style="text-decoration:underline;">com.sungard.sample.metro.webservices.client.ArithmeticException_Exception</span>: Negative number cant be added!</p>
<p>at sun.reflect.NativeConstructorAccessorImpl.newInstance0(<span style="text-decoration:underline;">Native Method</span>)</p>
<p>at sun.reflect.NativeConstructorAccessorImpl.newInstance(<span style="text-decoration:underline;">NativeConstructorAccessorImpl.java:39</span>)</p>
<p>at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(<span style="text-decoration:underline;">DelegatingConstructorAccessorImpl.java:27</span>)</p>
<p>at java.lang.reflect.Constructor.newInstance(<span style="text-decoration:underline;">Constructor.java:494</span>)</p>
<p>at com.sun.xml.ws.fault.SOAPFaultBuilder.createException(<span style="text-decoration:underline;">SOAPFaultBuilder.java:141</span>)</p>
<p>at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(<span style="text-decoration:underline;">SyncMethodHandler.java:119</span>)</p>
<p>at com.sun.xml.ws.client.sei.SyncMethodHandler.invoke(<span style="text-decoration:underline;">SyncMethodHandler.java:89</span>)</p>
<p>at com.sun.xml.ws.client.sei.SEIStub.invoke(<span style="text-decoration:underline;">SEIStub.java:118</span>)</p>
<p>at $Proxy38.addTwoNumbers(Unknown Source)</p>
<p>at com.sungard.sample.metro.webservices.client.Client.main(<span style="text-decoration:underline;">Client.java:24</span>)</p>
<p>Caused by: <span style="text-decoration:underline;">com.sungard.sample.metro.webservices.ArithmeticException</span>: Negative number cant be added!</p>
<p>at com.sungard.sample.metro.webservices.ArithmeticImpl.addTwoNumbers(<span style="text-decoration:underline;">ArithmeticImpl.java:19</span>)</p>
<p>at sun.reflect.NativeMethodAccessorImpl.invoke0(<span style="text-decoration:underline;">Native Method</span>)</p>
<p>at sun.reflect.NativeMethodAccessorImpl.invoke(<span style="text-decoration:underline;">NativeMethodAccessorImpl.java:39</span>)</p>
<p>at sun.reflect.DelegatingMethodAccessorImpl.invoke(<span style="text-decoration:underline;">DelegatingMethodAccessorImpl.java:25</span>)</p>
<p>at java.lang.reflect.Method.invoke(<span style="text-decoration:underline;">Method.java:585</span>)</p>
<p>at com.sun.xml.ws.api.server.InstanceResolver$1.invoke(<span style="text-decoration:underline;">InstanceResolver.java:246</span>)</p>
<p>at com.sun.xml.ws.server.InvokerTube$2.invoke(<span style="text-decoration:underline;">InvokerTube.java:146</span>)</p>
<p>at com.sun.xml.ws.server.sei.EndpointMethodHandler.invoke(<span style="text-decoration:underline;">EndpointMethodHandler.java:257</span>)</p>
<p>at com.sun.xml.ws.server.sei.SEIInvokerTube.processRequest(<span style="text-decoration:underline;">SEIInvokerTube.java:93</span>)</p>
<p>at com.sun.xml.ws.api.pipe.Fiber.__doRun(<span style="text-decoration:underline;">Fiber.java:598</span>)</p>
<p>at com.sun.xml.ws.api.pipe.Fiber._doRun(<span style="text-decoration:underline;">Fiber.java:557</span>)</p>
<p>at com.sun.xml.ws.api.pipe.Fiber.doRun(<span style="text-decoration:underline;">Fiber.java:542</span>)</p>
<p>at com.sun.xml.ws.api.pipe.Fiber.runSync(<span style="text-decoration:underline;">Fiber.java:439</span>)</p>
<p>at com.sun.xml.ws.server.WSEndpointImpl$2.process(<span style="text-decoration:underline;">WSEndpointImpl.java:243</span>)</p>
<p>at com.sun.xml.ws.transport.http.HttpAdapter$HttpToolkit.handle(<span style="text-decoration:underline;">HttpAdapter.java:471</span>)</p>
<p>at com.sun.xml.ws.transport.http.HttpAdapter.handle(<span style="text-decoration:underline;">HttpAdapter.java:244</span>)</p>
<p>at com.sun.xml.ws.transport.http.servlet.ServletAdapter.handle(<span style="text-decoration:underline;">ServletAdapter.java:135</span>)</p>
<p>at com.sun.xml.ws.transport.http.servlet.WSServletDelegate.doGet(<span style="text-decoration:underline;">WSServletDelegate.java:129</span>)</p>
<p>at com.sun.xml.ws.transport.http.servlet.WSServletDelegate.doPost(<span style="text-decoration:underline;">WSServletDelegate.java:160</span>)</p>
<p>at com.sun.xml.ws.transport.http.servlet.WSServlet.doPost(<span style="text-decoration:underline;">WSServlet.java:75</span>)</p>
<p>at javax.servlet.http.HttpServlet.service(<span style="text-decoration:underline;">HttpServlet.java:647</span>)</p>
<p>at javax.servlet.http.HttpServlet.service(<span style="text-decoration:underline;">HttpServlet.java:729</span>)</p>
<p>at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(<span style="text-decoration:underline;">ApplicationFilterChain.java:269</span>)</p>
<p>at org.apache.catalina.core.ApplicationFilterChain.doFilter(<span style="text-decoration:underline;">ApplicationFilterChain.java:188</span>)</p>
<p>at org.apache.catalina.core.StandardWrapperValve.invoke(<span style="text-decoration:underline;">StandardWrapperValve.java:213</span>)</p>
<p>at org.apache.catalina.core.StandardContextValve.invoke(<span style="text-decoration:underline;">StandardContextValve.java:172</span>)</p>
<p>at org.apache.catalina.core.StandardHostValve.invoke(<span style="text-decoration:underline;">StandardHostValve.java:127</span>)</p>
<p>at org.apache.catalina.valves.ErrorReportValve.invoke(<span style="text-decoration:underline;">ErrorReportValve.java:117</span>)</p>
<p>at org.apache.catalina.core.StandardEngineValve.invoke(<span style="text-decoration:underline;">StandardEngineValve.java:108</span>)</p>
<p>at org.apache.catalina.connector.CoyoteAdapter.service(<span style="text-decoration:underline;">CoyoteAdapter.java:174</span>)</p>
<p>at org.apache.coyote.http11.Http11Processor.process(<span style="text-decoration:underline;">Http11Processor.java:875</span>)</p>
<p>at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(<span style="text-decoration:underline;">Http11BaseProtocol.java:665</span>)</p>
<p>at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(<span style="text-decoration:underline;">PoolTcpEndpoint.java:528</span>)</p>
<p>at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(<span style="text-decoration:underline;">LeaderFollowerWorkerThread.java:81</span>)</p>
<p>at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(<span style="text-decoration:underline;">ThreadPool.java:689</span>)</p>
<p>at java.lang.Thread.run(<span style="text-decoration:underline;">Thread.java:595</span>)</p>
<br />Posted in Web Services  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/peterarockiaraj.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/peterarockiaraj.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/peterarockiaraj.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/peterarockiaraj.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/peterarockiaraj.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/peterarockiaraj.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/peterarockiaraj.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/peterarockiaraj.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/peterarockiaraj.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/peterarockiaraj.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/peterarockiaraj.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/peterarockiaraj.wordpress.com/69/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/peterarockiaraj.wordpress.com/69/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/peterarockiaraj.wordpress.com/69/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=peterarockiaraj.wordpress.com&amp;blog=9287010&amp;post=69&amp;subd=peterarockiaraj&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://peterarockiaraj.wordpress.com/2009/10/06/developing-web-services-by-using-metro-webservices-framework/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f6e3d599f1ab85a63c80822d5e870f6a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">peterarockiaraj</media:title>
		</media:content>
	</item>
		<item>
		<title>Developing CXF WS-Security with Spring &amp; Acegi Security</title>
		<link>http://peterarockiaraj.wordpress.com/2009/09/04/developing-cxf-ws-security-with-spring-acegi-security/</link>
		<comments>http://peterarockiaraj.wordpress.com/2009/09/04/developing-cxf-ws-security-with-spring-acegi-security/#comments</comments>
		<pubDate>Fri, 04 Sep 2009 10:06:35 +0000</pubDate>
		<dc:creator>Peter Arockiaraj</dc:creator>
				<category><![CDATA[Web Services]]></category>

		<guid isPermaLink="false">http://peterarockiaraj.wordpress.com/?p=65</guid>
		<description><![CDATA[Introduction In this article we are going to develop a web service by using Spring with CXF and the Acegi Security. This article provides steps (step by step) to create &#38;  deploy web services by using Spring,CXF andAcegi Security. Please go through below to find sample web services. Software Requirements EClipse (Java IDE)- Optional CXF [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=peterarockiaraj.wordpress.com&amp;blog=9287010&amp;post=65&amp;subd=peterarockiaraj&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong>Introduction</strong></p>
<p>In this article we are going to develop a web service by using Spring with CXF and the Acegi Security. This article provides steps (step by step) to create &amp;  deploy web services by using Spring,CXF andAcegi Security. Please go through below to find sample web services.</p>
<p><strong>Software Requirements</strong></p>
<ol>
<li>EClipse (Java IDE)- Optional</li>
<li>CXF Jars (Required for Compilation-Download from <a href="http://cxf.apache.org/download.html">http://cxf.apache.org/download.html</a>)</li>
</ol>
<p><strong>The Code</strong></p>
<p>In this example, we are going to create a Hello service. In this example, we are going to use a code-first approach for this service using JAX-WS annotations.</p>
<h3>Creating Server Application</h3>
<p>Step 1:   Download Following Jar files.</p>
<p>activation.jar</p>
<p>aopalliance-1.0.jar</p>
<p>commons-collections-3.2.jar</p>
<p>commons-lang-2.1.jar</p>
<p>commons-logging-1.1.jar</p>
<p>geronimo-activation-2.0.1.jar</p>
<p>geronimo-annotation_1.0_spec-1.1.jar</p>
<p>geronimo-javamail_1.4_mail-1.2.jar</p>
<p>geronimo-servlet_2.5_spec-1.1.jar</p>
<p>geronimo-ws-metadata_2.0_spec-1.1.1.jar</p>
<p>jaxb-api.jar</p>
<p>jaxb-api-2.0.jar</p>
<p>jaxb-impl-2.0.5.jar</p>
<p>jaxb-xjc.jar</p>
<p>jaxws-api.jar</p>
<p>mail.jar</p>
<p>neethi-2.0.jar</p>
<p>opensaml-1.0.1.jar</p>
<p>saaj-api.jar</p>
<p>saaj-impl.jar</p>
<p>spring-beans-2.0.6.jar</p>
<p>spring-context-2.0.6.jar</p>
<p>spring-core-2.0.6.jar</p>
<p>spring-web-2.0.6.jar</p>
<p>stax-api-1.0.1.jar</p>
<p>velocity-1.5.jar</p>
<p>wsdl4j-1.6.1.jar</p>
<p>wstx-asl-3.2.1.jar</p>
<p>xalan-2[1].6.0.jar</p>
<p>xalan-2[1].7.0.jar</p>
<p>xml-resolver-1.2.jar</p>
<p>xmlsec-1.2.1.jar</p>
<p>cxf-bundle-2.0.4-incubator.jar</p>
<p>XmlSchema-1.3.2.jar</p>
<p>wss4j-1.5.1.jar</p>
<p>acegi-security-1.0.5.jar</p>
<p>spring-dao-2.0.7.jar</p>
<p>Step 2: Create New Java project in eclipse (CXFAcegiSecurity).</p>
<p>Step 3: Create WEB-INF folder inside project folder.</p>
<p>Step 4: Create classes folder inside WEB-INF folder.</p>
<p>Step 5: Create lib folder inside WEB-INF folder.</p>
<p>Step 6: Copy all the jar file into lib folder.</p>
<p>Step 7: Add all jar files into classpath (In Eclipse set java build path-&gt;Libraries). Add set Default output folder into CXFAcegiSecurity/WEB-INF/classes</p>
<p>Step 8: Create Remote Interface IHello.java</p>
<p>package com.sungard.cxf.example.server;</p>
<p>import javax.jws.WebService;</p>
<p>@WebService</p>
<p>public interface IHello {</p>
<p>public String sayHello(String value);</p>
<p>}</p>
<p>Step 9: Create Implementation Class IHello_Impl.java</p>
<p>package com.sungard.cxf.example.server;</p>
<p>import javax.jws.WebService;</p>
<p>@WebService(endpointInterface = &#8220;com.sungard.cxf.example.server.IHello&#8221;)</p>
<p>public class IHello_Impl implements IHello {</p>
<p>public String sayHello(String value) {</p>
<p>return &#8220;You Said&#8221; + value;</p>
<p>}</p>
<p>}</p>
<p>Step 10: Create User.java to store User details in java object. Acegi Security Service is using this object.</p>
<p>package com.sungard.cxf.example.server;</p>
<p>public class User {</p>
<p>private String userId;</p>
<p>private String password;</p>
<p>private String role;</p>
<p>public String getPassword() {</p>
<p>return password;</p>
<p>}</p>
<p>public void setPassword(String password) {</p>
<p>this.password = password;</p>
<p>}</p>
<p>public String getRole() {</p>
<p>return role;</p>
<p>}</p>
<p>public void setRole(String role) {</p>
<p>this.role = role;</p>
<p>}</p>
<p>public String getUserId() {</p>
<p>return userId;</p>
<p>}</p>
<p>public void setUserId(String userId) {</p>
<p>this.userId = userId;</p>
<p>}</p>
<p>public User(String userId, String password, String role) {</p>
<p>super();</p>
<p>this.userId = userId;</p>
<p>this.password = password;</p>
<p>this.role = role;</p>
<p>}</p>
<p>}</p>
<p>Step 11: Create MyGrantedAuthority.java to grand Authority.</p>
<p>package com.sungard.cxf.example.server;</p>
<p>import org.acegisecurity.GrantedAuthority;</p>
<p>public class MyGrantedAuthority implements GrantedAuthority {</p>
<p>private String authority = null;</p>
<p>public MyGrantedAuthority(String authority) {</p>
<p>this.authority = authority;</p>
<p>}</p>
<p>public String getAuthority() {</p>
<p>return authority;</p>
<p>}</p>
<p>}</p>
<p>Step 12: Create MyUserDetails.java class to Store User details.</p>
<p>package com.sungard.cxf.example.server;</p>
<p>import org.acegisecurity.GrantedAuthority;</p>
<p>import org.acegisecurity.userdetails.UserDetails;</p>
<p>public class MyUserDetails implements UserDetails {</p>
<p>private GrantedAuthority[] authorities = null;</p>
<p>private String password = null;</p>
<p>private String username = null;</p>
<p>private String additionalData = null;</p>
<p>public MyUserDetails(GrantedAuthority[] authorities, String password,</p>
<p>String username, String additionalData) {</p>
<p>super();</p>
<p>this.authorities = authorities;</p>
<p>this.password = password;</p>
<p>this.username = username;</p>
<p>this.additionalData = additionalData;</p>
<p>}</p>
<p>public GrantedAuthority[] getAuthorities() {</p>
<p>return authorities;</p>
<p>}</p>
<p>public String getPassword() {</p>
<p>return password;</p>
<p>}</p>
<p>public String getUsername() {</p>
<p>return username;</p>
<p>}</p>
<p>public boolean isAccountNonExpired() {</p>
<p>return true;</p>
<p>}</p>
<p>public boolean isAccountNonLocked() {</p>
<p>return true;</p>
<p>}</p>
<p>public boolean isCredentialsNonExpired() {</p>
<p>return true;</p>
<p>}</p>
<p>public boolean isEnabled() {</p>
<p>return true;</p>
<p>}</p>
<p>}</p>
<p>Step 13: Create MyUserDetailsService.java to load user details. By creating these classes we are customizing Acegi security framework</p>
<p>In this class I have used peter as user. You can use any name.</p>
<p>tUsers.put(&#8220;peter&#8221;, new User(&#8220;peter&#8221;, &#8220;arockiaraj&#8221;, &#8220;ROLE_ADMIN&#8221;));</p>
<p>package com.sungard.cxf.example.server;</p>
<p>import java.util.HashMap;</p>
<p>import java.util.Map;</p>
<p>import org.acegisecurity.GrantedAuthority;</p>
<p>import org.acegisecurity.userdetails.UserDetails;</p>
<p>import org.acegisecurity.userdetails.UserDetailsService;</p>
<p>import org.acegisecurity.userdetails.UsernameNotFoundException;</p>
<p>import org.springframework.dao.DataAccessException;</p>
<p>public class MyUserDetailsService implements UserDetailsService {</p>
<p>private Map users = init();</p>
<p>private Map init() {</p>
<p>Map tUsers = new HashMap();</p>
<p>tUsers.put(&#8220;scott&#8221;, new User(&#8220;scott&#8221;, &#8220;tiger&#8221;, &#8220;ROLE_USER&#8221;));</p>
<p>tUsers.put(&#8220;harry&#8221;, new User(&#8220;harry&#8221;, &#8220;potter&#8221;, &#8220;ROLE_ADMIN&#8221;));</p>
<p>tUsers.put(&#8220;frodo&#8221;, new User(&#8220;frodo&#8221;, &#8220;baggins&#8221;, &#8220;ROLE_USER&#8221;));</p>
<p>tUsers.put(&#8220;peter&#8221;, new User(&#8220;peter&#8221;, &#8220;arockiaraj&#8221;, &#8220;ROLE_ADMIN&#8221;));</p>
<p>return tUsers;</p>
<p>}</p>
<p>public UserDetails loadUserByUsername(String s)</p>
<p>throws UsernameNotFoundException, DataAccessException {</p>
<p>User user = (User) users.get(s);</p>
<p>GrantedAuthority authority = new MyGrantedAuthority(user.getRole());</p>
<p>UserDetails userDetails = new MyUserDetails(</p>
<p>new GrantedAuthority[] { authority }, user.getUserId(), user</p>
<p>.getPassword(), &#8220;Additional Data&#8221;);</p>
<p>return userDetails;</p>
<p>}</p>
<p>}</p>
<p>Step 14:  Create PasswordHandler.java file to handle usernames and passwords.</p>
<p>if (pc.getIdentifer().equals(&#8220;satnewpubcert&#8221;)) {</p>
<p>pc.setPassword(&#8220;satsat&#8221;);</p>
<p>}</p>
<p>package com.sungard.cxf.example.server;</p>
<p>import java.io.IOException;</p>
<p>import javax.security.auth.callback.Callback;</p>
<p>import javax.security.auth.callback.CallbackHandler;</p>
<p>import javax.security.auth.callback.UnsupportedCallbackException;</p>
<p>import org.apache.ws.security.WSPasswordCallback;</p>
<p>public class PasswordHandler implements CallbackHandler {</p>
<p>public void handle(Callback[] callbacks) throws IOException,</p>
<p>UnsupportedCallbackException {</p>
<p>System.out.println(&#8220;Enterd PasswordHandler::handle&#8221;);</p>
<p>WSPasswordCallback pc = (WSPasswordCallback) callbacks[0];</p>
<p>if (pc.getIdentifer().equals(&#8220;satnewpubcert&#8221;)) {</p>
<p>pc.setPassword(&#8220;satsat&#8221;);</p>
<p>}</p>
<p>System.out.println(&#8220;Leaving PasswordHandler::handle&#8221;);</p>
<p>}</p>
<p>}</p>
<p>Step 15: Create ValidateUserTokenAcegiInterceptor.java class to handle soap requests. If you have proper Acegi Database setup then in this you have to UserDetailsService instead of MyUserDetailsService class. And MyGrantedAuthority.java, MyUserDetails.java, MyUserDetailsService.java, User.java classes are not required in this project.</p>
<p>package com.sungard.cxf.example.server;</p>
<p>import java.util.Vector;</p>
<p>import javax.servlet.http.HttpServletRequest;</p>
<p>import org.acegisecurity.context.SecurityContextHolder;</p>
<p>import org.acegisecurity.providers.UsernamePasswordAuthenticationToken;</p>
<p>import org.acegisecurity.ui.WebAuthenticationDetails;</p>
<p>import org.apache.cxf.binding.soap.SoapMessage;</p>
<p>import org.apache.cxf.binding.soap.interceptor.AbstractSoapInterceptor;</p>
<p>import org.apache.cxf.interceptor.Fault;</p>
<p>import org.apache.cxf.phase.Phase;</p>
<p>import org.apache.ws.security.WSSecurityEngineResult;</p>
<p>import org.apache.ws.security.WSUsernameTokenPrincipal;</p>
<p>import org.apache.ws.security.handler.WSHandlerConstants;</p>
<p>import org.apache.ws.security.handler.WSHandlerResult;</p>
<p>/**</p>
<p>* A WS-Security handler used to validate the user token passed in to the web</p>
<p>* service via the header of the soap packet.</p>
<p>*</p>
<p>* You shouldn&#8217;t have to change this class at all unless you want to inspect</p>
<p>* specific properties of the incoming WS-Security message.</p>
<p>*</p>
<p>*/</p>
<p>public class ValidateUserTokenAcegiInterceptor extends AbstractSoapInterceptor {</p>
<p>private MyUserDetailsService userDetailsService=new MyUserDetailsService();</p>
<p>public ValidateUserTokenAcegiInterceptor(String s) {</p>
<p>super(s);</p>
<p>}</p>
<p>public ValidateUserTokenAcegiInterceptor() {</p>
<p>super(Phase.UNMARSHAL);</p>
<p>}</p>
<p>public void handleMessage(SoapMessage message) throws Fault {</p>
<p>boolean userTokenValidated = false;</p>
<p>// if user still has a security context session open from a previous</p>
<p>// request, we probably don&#8217;t need to re-auth them</p>
<p>// debug stuff the message has&#8230;</p>
<p>// for(String key: message.keySet()) {</p>
<p>// System.out.println(&#8220;key: ["+key+","+message.get(key)+"]&#8220;);</p>
<p>// }</p>
<p>Vector result = (Vector) message</p>
<p>.getContextualProperty(WSHandlerConstants.RECV_RESULTS);</p>
<p>for (int i = 0; i &lt; result.size(); i++) {</p>
<p>WSHandlerResult res = (WSHandlerResult) result.get(i);</p>
<p>for (int j = 0; j &lt; res.getResults().size(); j++) {</p>
<p>WSSecurityEngineResult secRes = (WSSecurityEngineResult) res</p>
<p>.getResults().get(j);</p>
<p>WSUsernameTokenPrincipal principal = (WSUsernameTokenPrincipal) secRes</p>
<p>.getPrincipal();</p>
<p>// hack, we are just doing plain text&#8230;</p>
<p>if (principal.getPassword() != null) {</p>
<p>userTokenValidated = true;</p>
<p>} else {</p>
<p>throw new RuntimeException(</p>
<p>&#8220;Invalid Security Header: Please use a password&#8221;);</p>
<p>}</p>
<p>// old code to make sure all WS-Security headers are passed in</p>
<p>// and aren&#8217;t null</p>
<p>/*</p>
<p>* if(!principal.isPasswordDigest() || principal.getNonce() ==</p>
<p>* null || principal.getPassword() == null) { ||</p>
<p>* principal.getCreatedTime() == null) { throw new</p>
<p>* RuntimeException(&#8220;Invalid Security Header&#8221;); } else {</p>
<p>* userTokenValidated = true; }</p>
<p>*/</p>
<p>if (userTokenValidated) {</p>
<p>HttpServletRequest request = (HttpServletRequest) message</p>
<p>.get(&#8220;HTTP.REQUEST&#8221;);</p>
<p>request.getSession(true).getId();// hack to make sure we</p>
<p>// get a session id for</p>
<p>// acegi to use &#8211; this</p>
<p>// is needed for the</p>
<p>// concurrent filter</p>
<p>// authenticate with acegi</p>
<p>final UsernamePasswordAuthenticationToken authReq = new UsernamePasswordAuthenticationToken(</p>
<p>principal.getName(), principal.getPassword());</p>
<p>// message.HTTP_REQUEST_METHOD</p>
<p>authReq.setDetails(new WebAuthenticationDetails(request));</p>
<p>SecurityContextHolder.getContext().setAuthentication(</p>
<p>authReq);</p>
<p>System.out</p>
<p>.println(&#8220;ValidateUserTokenAcegiInterceptor::handleMessage::principal.getName()=&#8221;</p>
<p>+ principal.getName());</p>
<p>userDetailsService.loadUserByUsername(</p>
<p>principal.getName());</p>
<p>}</p>
<p>}</p>
<p>}</p>
<p>if (!userTokenValidated) {</p>
<p>throw new RuntimeException(&#8220;Security processing failed&#8221;);</p>
<p>}</p>
<p>}</p>
<p>}</p>
<p>Step 16: Create beans.xml file to setup the application context for the server. If you are proper Acegi Database setup then you have to configure data source.</p>
<p>&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;UTF-8&#8243;?&gt;</p>
<p>&lt;beans xmlns=&#8221;http://www.springframework.org/schema/beans&#8221;</p>
<p>xmlns:xsi=&#8221;http://www.w3.org/2001/XMLSchema-instance&#8221;</p>
<p>xmlns:jaxws=&#8221;http://cxf.apache.org/jaxws&#8221;</p>
<p>xsi:schemaLocation=&#8221;</p>
<p>http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd</p>
<p>http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd&#8221;&gt;</p>
<p>&lt;import resource=&#8221;classpath:META-INF/cxf/cxf.xml&#8221; /&gt;</p>
<p>&lt;import resource=&#8221;classpath:META-INF/cxf/cxf-extension-soap.xml&#8221; /&gt;</p>
<p>&lt;import resource=&#8221;classpath:META-INF/cxf/cxf-servlet.xml&#8221; /&gt;</p>
<p>&lt;jaxws:endpoint id=&#8221;helloWorld&#8221;</p>
<p>implementor=&#8221;com.sungard.cxf.example.server.IHello_Impl&#8221;</p>
<p>address=&#8221;/HelloService&#8221;&gt;</p>
<p>&lt;jaxws:inInterceptors&gt;</p>
<p>&lt;bean id=&#8221;logIn&#8221;</p>
<p>/&gt;</p>
<p>&lt;bean id=&#8221;logOut&#8221;</p>
<p>/&gt;</p>
<p>&lt;bean</p>
<p>/&gt;</p>
<p>&lt;bean</p>
<p>&gt;</p>
<p>&lt;property name=&#8221;properties&#8221;&gt;</p>
<p>&lt;map&gt;</p>
<p>&lt;entry key=&#8221;action&#8221;</p>
<p>value=&#8221;UsernameToken&#8221; /&gt;</p>
<p>&lt;entry key=&#8221;passwordType&#8221; value=&#8221;PasswordText&#8221; /&gt;</p>
<p>&lt;entry key=&#8221;passwordCallbackClass&#8221;</p>
<p>value=&#8221;com.sungard.cxf.example.server.PasswordHandler&#8221; /&gt;</p>
<p>&lt;/map&gt;</p>
<p>&lt;/property&gt;</p>
<p>&lt;/bean&gt;</p>
<p>&lt;bean</p>
<p>/&gt;</p>
<p>&lt;/jaxws:inInterceptors&gt;</p>
<p>&lt;/jaxws:endpoint&gt;</p>
<p>&lt;bean id=&#8221;userDetailsService&#8221;</p>
<p>&gt;</p>
<p>&lt;/bean&gt;</p>
<p>&lt;/beans&gt;</p>
<p>Step 17: Create web.xml file</p>
<p>&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;ISO-8859-1&#8243;?&gt;</p>
<p>&lt;!DOCTYPE web-app</p>
<p>PUBLIC &#8220;-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN&#8221;</p>
<p>&#8220;http://java.sun.com/dtd/web-app_2_3.dtd&#8221;&gt;</p>
<p>&lt;web-app&gt;</p>
<p>&lt;context-param&gt;</p>
<p>&lt;param-name&gt;contextConfigLocation&lt;/param-name&gt;</p>
<p>&lt;param-value&gt;WEB-INF/beans.xml&lt;/param-value&gt;</p>
<p>&lt;/context-param&gt;</p>
<p>&lt;listener&gt;</p>
<p>&lt;listener-class&gt;</p>
<p>org.springframework.web.context.ContextLoaderListener</p>
<p>&lt;/listener-class&gt;</p>
<p>&lt;/listener&gt;</p>
<p>&lt;servlet&gt;</p>
<p>&lt;servlet-name&gt;CXFServlet&lt;/servlet-name&gt;</p>
<p>&lt;display-name&gt;CXF Servlet&lt;/display-name&gt;</p>
<p>&lt;servlet-class&gt;</p>
<p>org.apache.cxf.transport.servlet.CXFServlet</p>
<p>&lt;/servlet-class&gt;</p>
<p>&lt;load-on-startup&gt;1&lt;/load-on-startup&gt;</p>
<p>&lt;/servlet&gt;</p>
<p>&lt;servlet-mapping&gt;</p>
<p>&lt;servlet-name&gt;CXFServlet&lt;/servlet-name&gt;</p>
<p>&lt;url-pattern&gt;/*&lt;/url-pattern&gt;</p>
<p>&lt;/servlet-mapping&gt;</p>
<p>&lt;/web-app&gt;</p>
<p>Step 18: Create ant folder inside project. And Create build.xml file inside ant folder.</p>
<p>&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;UTF-8&#8243;?&gt;</p>
<p>&lt;project name=&#8221;ws&#8221; basedir=&#8221;../&#8221; default=&#8221;archive&#8221;&gt;</p>
<p>&lt;target name=&#8221;archive&#8221;&gt;</p>
<p>&lt;jar destfile=&#8221;acegisecurity.war&#8221;&gt;</p>
<p>&lt;fileset dir=&#8221;${basedir}&#8221;&gt;</p>
<p>&lt;include name=&#8221;**/*.class&#8221; /&gt;</p>
<p>&lt;/fileset&gt;</p>
<p>&lt;fileset dir=&#8221;${basedir}&#8221;&gt;</p>
<p>&lt;include name=&#8221;**/*.jar&#8221; /&gt;</p>
<p>&lt;/fileset&gt;</p>
<p>&lt;fileset dir=&#8221;${basedir}&#8221;&gt;</p>
<p>&lt;include name=&#8221;**/*.xml&#8221; /&gt;</p>
<p>&lt;exclude name=&#8221;**/*build*&#8221; /&gt;</p>
<p>&lt;/fileset&gt;</p>
<p>&lt;/jar&gt;</p>
<p>&lt;/target&gt;</p>
<p>&lt;/project&gt;</p>
<p>Step 19: Run build.xml using Ant.</p>
<p>Step 20: Deploy acegisecurity.war into Web/Application Server (Tomcat/JBoss).</p>
<p>Step 21: Verify application deployed successfully or by using following url.<br />
<a href="http://localhost:8080/acegisecurity/HelloService?wsdl">http://localhost:8080/acegisecurity/HelloService?wsdl</a></p>
<p>Step 22: Browser will show wsdl file our web service.</p>
<h2>Creating Client Application.</h2>
<p>Step 1: Create New Java project in Eclipse</p>
<p>Step 2: Create folder Structure as like above application</p>
<p>Step 3: Use same jar files used for Server application.</p>
<p>Step 4: Set all the jars files into classpath.</p>
<p>Step 5: Create Remote Interface in client (IHello.java) (You can use wsdl2java for creating same)</p>
<p>package com.sungard.cxf.example.server;</p>
<p>import javax.jws.WebService;</p>
<p>@WebService</p>
<p>public interface IHello {</p>
<p>public String sayHello(String value);</p>
<p>}</p>
<p>Step 6: Create ClientPasswordCallback.java for handling soap request in client side.</p>
<p>pc.setPassword(&#8220;arockiaraj&#8221;);</p>
<p>package com.sungard.cxf.example.server;</p>
<p>import java.io.IOException;</p>
<p>import javax.security.auth.callback.Callback;</p>
<p>import javax.security.auth.callback.CallbackHandler;</p>
<p>import javax.security.auth.callback.UnsupportedCallbackException;</p>
<p>import org.apache.ws.security.WSPasswordCallback;</p>
<p>public class ClientPasswordCallback implements CallbackHandler {</p>
<p>public void handle(Callback[] callbacks) throws IOException,</p>
<p>UnsupportedCallbackException {</p>
<p>WSPasswordCallback pc = (WSPasswordCallback) callbacks[0];</p>
<p>// set the password for our message.</p>
<p>pc.setPassword(&#8220;arockiaraj&#8221;);</p>
<p>}</p>
<p>}</p>
<p>Step 7: Create the service factory (AuthServiceFactory.java), which is extremely easy since all the work was done in the Spring file:</p>
<p>package com.sungard.cxf.example.server;</p>
<p>import org.springframework.context.support.ClassPathXmlApplicationContext;</p>
<p>public final class AuthServiceFactory {</p>
<p>private static final ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(</p>
<p>new String[] { &#8220;cxfClient.xml&#8221; });</p>
<p>public AuthServiceFactory() {</p>
<p>}</p>
<p>public IHello getService() {</p>
<p>return (IHello) context.getBean(&#8220;client&#8221;);</p>
<p>}</p>
<p>}</p>
<p>Step 8: Create Client.java to invoke the service.</p>
<p>package com.sungard.cxf.example.server;</p>
<p>public final class Client {</p>
<p>private Client() {</p>
<p>}</p>
<p>public static void main(String args[]) throws Exception {</p>
<p>AuthServiceFactory af = new AuthServiceFactory();</p>
<p>IHello client1 = af.getService();</p>
<p>String response1 = client1.sayHello(&#8220;Hello&#8221;);</p>
<p>System.out.println(&#8220;Response: &#8221; + response1);</p>
<p>}</p>
<p>}</p>
<p>Step 9: Create cxfClient.xml to setup the application context for the client.</p>
<p>&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;UTF-8&#8243;?&gt;</p>
<p>&lt;beans xmlns=&#8221;http://www.springframework.org/schema/beans&#8221;</p>
<p>xmlns:xsi=&#8221;http://www.w3.org/2001/XMLSchema-instance&#8221;</p>
<p>xmlns:jaxws=&#8221;http://cxf.apache.org/jaxws&#8221;</p>
<p>xsi:schemaLocation=&#8221;http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd</p>
<p>http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd&#8221;&gt;</p>
<p>&lt;bean id=&#8221;proxyFactory&#8221;</p>
<p>&gt;</p>
<p>&lt;property name=&#8221;serviceClass&#8221;</p>
<p>value=&#8221;com.sungard.cxf.example.server.IHello&#8221; /&gt;</p>
<p>&lt;property name=&#8221;address&#8221;</p>
<p>value=&#8221;http://localhost:8080/acegisecurity/HelloService&#8221; /&gt;</p>
<p>&lt;property name=&#8221;inInterceptors&#8221;&gt;</p>
<p>&lt;list&gt;</p>
<p>&lt;ref bean=&#8221;logIn&#8221; /&gt;</p>
<p>&lt;/list&gt;</p>
<p>&lt;/property&gt;</p>
<p>&lt;property name=&#8221;outInterceptors&#8221;&gt;</p>
<p>&lt;list&gt;</p>
<p>&lt;ref bean=&#8221;logOut&#8221; /&gt;</p>
<p>&lt;ref bean=&#8221;saajOut&#8221; /&gt;</p>
<p>&lt;ref bean=&#8221;wss4jOut&#8221; /&gt;</p>
<p>&lt;/list&gt;</p>
<p>&lt;/property&gt;</p>
<p>&lt;/bean&gt;</p>
<p>&lt;bean id=&#8221;client&#8221;</p>
<p>factory-bean=&#8221;proxyFactory&#8221; factory-method=&#8221;create&#8221; /&gt;</p>
<p>&lt;bean id=&#8221;logIn&#8221;</p>
<p>/&gt;</p>
<p>&lt;bean id=&#8221;logOut&#8221;</p>
<p>/&gt;</p>
<p>&lt;bean id=&#8221;saajOut&#8221;</p>
<p>/&gt;</p>
<p>&lt;bean id=&#8221;wss4jOut&#8221;</p>
<p>&gt;</p>
<p>&lt;constructor-arg&gt;</p>
<p>&lt;map&gt;</p>
<p>&lt;entry key=&#8221;action&#8221; value=&#8221;UsernameToken&#8221; /&gt;</p>
<p>&lt;entry key=&#8221;user&#8221; value=&#8221;peter&#8221; /&gt;</p>
<p>&lt;entry key=&#8221;passwordType&#8221; value=&#8221;PasswordDigest&#8221; /&gt;</p>
<p>&lt;entry key=&#8221;passwordCallbackClass&#8221;</p>
<p>value=&#8221;com.sungard.cxf.example.server.ClientPasswordCallback&#8221; /&gt;</p>
<p>&lt;/map&gt;</p>
<p>&lt;/constructor-arg&gt;</p>
<p>&lt;/bean&gt;</p>
<p>&lt;/beans&gt;</p>
<p>Step 10:  Run Client.java</p>
<p>You will get response like as follows.</p>
<p>Response: You SaidHello</p>
<p><em><span style="text-decoration:underline;">Note:</span></em></p>
<p><em> </em></p>
<p><em><span style="text-decoration:underline;">Client Side:</span></em></p>
<p><em> </em></p>
<p><em>We Set User name in client cxfClient.xml file. (We can set the same through program also and we can read it xml/properties files. We can pass the same in runtime also)</em></p>
<p><em> </em></p>
<p><em>&lt;</em><em>entry </em><em>key</em><em>=</em><em>&#8220;user&#8221; </em><em>value</em><em>=</em><em>&#8220;peter&#8221;</em><em>/&gt;</em><em> </em></p>
<p><em> </em></p>
<p><em>We Set password in ClientPasswordCallback.java class (We can pass same in runtime also)</em></p>
<p><em> </em></p>
<p><em> // set the password for our message.</em></p>
<p><em> pc.setPassword(&#8220;arockiaraj&#8221;);</em></p>
<p><em> </em></p>
<p><em>You can see the In &amp; Outbound Messages in Client Side.</em></p>
<p><em> </em></p>
<p>INFO: Outbound Message</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p>Encoding: UTF-8</p>
<p>Headers: {SOAPAction=[""], Accept=[*]}</p>
<p>Messages:</p>
<p>Payload: &lt;soap:Envelope xmlns:soap=&#8221;http://schemas.xmlsoap.org/soap/envelope/&#8221;&gt;</p>
<p>&lt;soap:Header&gt;</p>
<p>&lt;wsse:Security xmlns:wsse=&#8221;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd&#8221; soap:mustUnderstand=&#8221;1&#8243;&gt;&lt;wsse:UsernameToken xmlns:wsu=&#8221;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd&#8221; wsu:Id=&#8221;UsernameToken-23954271&#8243; xmlns:wsse=&#8221;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd&#8221;&gt;&lt;wsse:Username xmlns:wsse=&#8221;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd&#8221;&gt;arsenal&lt;/wsse:Username&gt;&lt;wsse:Password Type=&#8221;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest&#8221; xmlns:wsse=&#8221;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd&#8221;&gt;U6FK/CmMuPoKaB+SzgY4VNYed2U=&lt;/wsse:Password&gt;&lt;wsse:Nonce xmlns:wsse=&#8221;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd&#8221;&gt;CdPEvSgU87L+4VR4SZxPQQ==&lt;/wsse:Nonce&gt;&lt;wsu:Created xmlns:wsu=&#8221;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd&#8221;&gt;2008-03-27T12:53:36.713Z&lt;/wsu:Created&gt;&lt;/wsse:UsernameToken&gt;&lt;/wsse:Security&gt;&lt;/soap:Header&gt;&lt;soap:Body&gt;&lt;ns1:sayHello xmlns:ns1=&#8221;http://server.example.cxf.sungard.com/&#8221;&gt;&lt;arg0&gt;Hello&lt;/arg0&gt;&lt;/ns1:sayHello&gt;&lt;/soap:Body&gt;&lt;/soap:Envelope&gt;</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p>
<p>Mar 27, 2008 6:23:37 PM org.apache.cxf.interceptor.LoggingInInterceptor logging</p>
<p>INFO: Inbound Message</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</p>
<p>Encoding: UTF-8</p>
<p>Headers: {content-type=[text/xml;charset=UTF-8], Date=[Thu, 27 Mar 2008 12:53:37 GMT], Content-Length=[230], SOAPAction=[""], Server=[Apache-Coyote/1.1]}</p>
<p>Messages:</p>
<p>Message:</p>
<p>Payload: &lt;soap:Envelope xmlns:soap=&#8221;http://schemas.xmlsoap.org/soap/envelope/&#8221;&gt;&lt;soap:Body&gt;&lt;ns1:sayHelloResponse xmlns:ns1=&#8221;http://server.example.cxf.sungard.com/&#8221;&gt;&lt;return&gt;You SaidHello&lt;/return&gt;&lt;/ns1:sayHelloResponse&gt;&lt;/soap:Body&gt;&lt;/soap:Envelope&gt;</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<em><span style="text-decoration:underline;"> </span></em></p>
<p><em><span style="text-decoration:underline;">Server Side:</span></em></p>
<p><em> </em></p>
<p><em>User Name and password are got validated in PasswordHandler.java file. These values we can read it from xml/properties or from configuration files.</em></p>
<p><em> </em></p>
<p><em>if (pc.getIdentifer().equals(&#8220;peter&#8221;)) {</em></p>
<p><em> pc.setPassword(&#8220;arockiaraj&#8221;);</em></p>
<p><em> }</em></p>
<p><em> </em></p>
<br />Posted in Web Services  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/peterarockiaraj.wordpress.com/65/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/peterarockiaraj.wordpress.com/65/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/peterarockiaraj.wordpress.com/65/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/peterarockiaraj.wordpress.com/65/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/peterarockiaraj.wordpress.com/65/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/peterarockiaraj.wordpress.com/65/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/peterarockiaraj.wordpress.com/65/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/peterarockiaraj.wordpress.com/65/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/peterarockiaraj.wordpress.com/65/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/peterarockiaraj.wordpress.com/65/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/peterarockiaraj.wordpress.com/65/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/peterarockiaraj.wordpress.com/65/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/peterarockiaraj.wordpress.com/65/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/peterarockiaraj.wordpress.com/65/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=peterarockiaraj.wordpress.com&amp;blog=9287010&amp;post=65&amp;subd=peterarockiaraj&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://peterarockiaraj.wordpress.com/2009/09/04/developing-cxf-ws-security-with-spring-acegi-security/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f6e3d599f1ab85a63c80822d5e870f6a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">peterarockiaraj</media:title>
		</media:content>
	</item>
		<item>
		<title>Developing CXF WS-Security with SAML</title>
		<link>http://peterarockiaraj.wordpress.com/2009/09/04/developing-cxf-ws-security-with-saml/</link>
		<comments>http://peterarockiaraj.wordpress.com/2009/09/04/developing-cxf-ws-security-with-saml/#comments</comments>
		<pubDate>Fri, 04 Sep 2009 10:02:36 +0000</pubDate>
		<dc:creator>Peter Arockiaraj</dc:creator>
				<category><![CDATA[Web Services]]></category>

		<guid isPermaLink="false">http://peterarockiaraj.wordpress.com/?p=63</guid>
		<description><![CDATA[Introduction In this article we are going to develop a web service by using Spring and CXF with WS-Security (SAML). This article provides steps (step by step) to create &#38;  deploy web services by usingSpring and CXF with WS-Security (SAML). Please go through below to find sample web services. Software Requirements EClipse (Java IDE)- Optional [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=peterarockiaraj.wordpress.com&amp;blog=9287010&amp;post=63&amp;subd=peterarockiaraj&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong>Introduction</strong></p>
<p>In this article we are going to develop a web service by using Spring and CXF with WS-Security (SAML). This article provides steps (step by step) to create &amp;  deploy web services by usingSpring and CXF with WS-Security (SAML). Please go through below to find sample web services.</p>
<p><strong>Software Requirements</strong></p>
<ol>
<li>EClipse (Java IDE)- Optional</li>
<li>CXF Jars (Required for Compilation-Download from <a href="http://cxf.apache.org/download.html">http://cxf.apache.org/download.html</a>)</li>
</ol>
<p><strong>The Code</strong></p>
<p>In this example, we are going to create a Hello service. In this example, we are going to use a code-first approach for this service using JAX-WS annotations.</p>
<h2>Creating Server and Client Certificates</h2>
<p>For the Signature and Encryption actions, you&#8217;ll need to create a public &amp; private key for the entities involved. You can generate a key pair for the development environment via the following steps. Keep in mind these will not be signed by an external authority like Verisign</p>
<p>Keytool is inbuild tool which is comes with jdk.</p>
<p>Follow the steps to create client and server certificates (Refer following site)</p>
<ol>
<li><a style="text-decoration:none;" href="http://pa55word.wordpress.com/">http://pa55word.wordpress.com/</a></li>
</ol>
<p>When urgently you need some keystores and truststores to test out some security related java code this is a useful bat file to have. Copy the code below and create a bat file. run it and you got your stuff.</p>
<p><em>keytool -genkey -alias serverkeys -keyalg RSA -keystore server.keystore -storepass changeit -keypass changeit -dname “CN=localhost, OU=MYOU, O=MYORG, L=MYCITY, ST=MYSTATE, C=MY”</em></p>
<p><em><br />
<em>keytool -export -alias serverkeys -keystore server.keystore -storepass changeit -file server.cer</em></em></p>
<p><em><br />
<em>keytool -genkey -alias clientkeys -keyalg RSA -keystore client.keystore -storepass changeit -keypass changeit -dname “CN=localhost, OU=MYOU, O=MYORG, L=MYCITY, S=MY</em><br />
<em>STATE, C=MY”</em></em></p>
<p><em><br />
<em>keytool -export -alias clientkeys -keystore client.keystore -storepass changeit -file client.cer</em></em></p>
<p><em><br />
<em>keytool -import -v -keystore client.truststore -storepass changeit -file server.cer</em></em></p>
<p><em><br />
<em>keytool -import -v -keystore server.truststore -storepass changeit -file client.cer</em></em></p>
<p>It generates a keystore called server.keystore with password changeit. Then it creates server certificate server.cer.</p>
<p>Then it  generates a keystore called client.keystore with password changeit. Creates a client certificate named client.cer</p>
<p>Next it imports server certificate into client truststore and client certificate into server truststore.</p>
<p>These are self signed certificates. Good for internal use. You can use open ssl<br />
and create certificates. But this bat file is short and sweet for immediate use.<br />
When you paste it you do have to be careful about keywords not getting split up like wordpress does.</p>
<h2>Creating Server Application</h2>
<p>Step 1:   Download Following Jar files.</p>
<p>activation.jar</p>
<p>aopalliance-1.0.jar</p>
<p>commons-collections-3.2.jar</p>
<p>commons-lang-2.1.jar</p>
<p>commons-logging-1.1.jar</p>
<p>geronimo-activation-2.0.1.jar</p>
<p>geronimo-annotation_1.0_spec-1.1.jar</p>
<p>geronimo-javamail_1.4_mail-1.2.jar</p>
<p>geronimo-servlet_2.5_spec-1.1.jar</p>
<p>geronimo-ws-metadata_2.0_spec-1.1.1.jar</p>
<p>jaxb-api.jar</p>
<p>jaxb-api-2.0.jar</p>
<p>jaxb-impl-2.0.5.jar</p>
<p>jaxb-xjc.jar</p>
<p>jaxws-api.jar</p>
<p>mail.jar</p>
<p>neethi-2.0.jar</p>
<p>opensaml-1.0.1.jar</p>
<p>saaj-api.jar</p>
<p>saaj-impl.jar</p>
<p>spring-beans-2.0.6.jar</p>
<p>spring-context-2.0.6.jar</p>
<p>spring-core-2.0.6.jar</p>
<p>spring-web-2.0.6.jar</p>
<p>stax-api-1.0.1.jar</p>
<p>velocity-1.5.jar</p>
<p>wsdl4j-1.6.1.jar</p>
<p>wstx-asl-3.2.1.jar</p>
<p>xalan-2[1].6.0.jar</p>
<p>xalan-2[1].7.0.jar</p>
<p>xml-resolver-1.2.jar</p>
<p>cxf-bundle-2.0.4-incubator.jar</p>
<p>XmlSchema-1.3.2.jar</p>
<p>wss4j-1.5.1.jar</p>
<p>keyexport.jar</p>
<p>pkcs12import.jar</p>
<p>security-plugin.jar</p>
<p>wss-provider-update.jar</p>
<p>xws-security_jaxrpc.jar</p>
<p>xws-security.jar</p>
<p>xmlsec-1.3.0.jar</p>
<p>Step 2: Create New Java project in eclipse (CXFSAMLSecurity).</p>
<p>Step 3: Create WEB-INF folder inside project folder.</p>
<p>Step 4: Create classes folder inside WEB-INF folder.</p>
<p>Step 5: Create lib folder inside WEB-INF folder.</p>
<p>Step 6: Copy all the jar file into lib folder.</p>
<p>Step 7: Add all jar files into classpath (In Eclipse set java build path-&gt;Libraries). Add set Default output folder into CXFSAMLSecurity/WEB-INF/classes</p>
<p>Step 8: Create Remote Interface IHello.java</p>
<p>package com.sungard.cxf.example.server;</p>
<p>import javax.jws.WebService;</p>
<p>@WebService</p>
<p>public interface IHello {</p>
<p>public String sayHello(String value);</p>
<p>}</p>
<p>Step 9: Create Implementation Class IHello_Impl.java</p>
<p>package com.sungard.cxf.example.server;</p>
<p>import javax.jws.WebService;</p>
<p>@WebService(endpointInterface = &#8220;com.sungard.cxf.example.server.IHello&#8221;)</p>
<p>public class IHello_Impl implements IHello {</p>
<p>public String sayHello(String value) {</p>
<p>return &#8220;You Said&#8221; + value;</p>
<p>}</p>
<p>}</p>
<p>Step 10:  Create ServerSecurityEnvironmentHandler.java file to handle usernames and passwords. Here you have to give server certificate, server trust certificate alias name for checking. Password is alias password. Also you have to give client keystore file passwords also.</p>
<p>private String keyStorePassword = &#8220;changeit&#8221;;</p>
<p>private String trustStorePassword = &#8220;changeit&#8221;;</p>
<p>else if (callbacks[i] instanceof WSPasswordCallback) {</p>
<p>System.out.println(&#8220;handle::WSPasswordCallback&#8221;);</p>
<p>WSPasswordCallback cb = (WSPasswordCallback) callbacks[i];</p>
<p>cb.setPassword(&#8220;changeit&#8221;);</p>
<p>}</p>
<p>package com.sungard.cxf.example.server;</p>
<p>import java.io.IOException;</p>
<p>import java.math.BigInteger;</p>
<p>import java.net.URL;</p>
<p>import java.security.KeyStore;</p>
<p>import java.security.PrivateKey;</p>
<p>import java.security.cert.CertPathBuilder;</p>
<p>import java.security.cert.Certificate;</p>
<p>import java.security.cert.CertificateExpiredException;</p>
<p>import java.security.cert.CertificateNotYetValidException;</p>
<p>import java.security.cert.PKIXBuilderParameters;</p>
<p>import java.security.cert.PKIXCertPathBuilderResult;</p>
<p>import java.security.cert.X509CertSelector;</p>
<p>import java.security.cert.X509Certificate;</p>
<p>import java.text.SimpleDateFormat;</p>
<p>import java.util.Arrays;</p>
<p>import java.util.Calendar;</p>
<p>import java.util.Date;</p>
<p>import java.util.Enumeration;</p>
<p>import java.util.GregorianCalendar;</p>
<p>import javax.security.auth.callback.Callback;</p>
<p>import javax.security.auth.callback.CallbackHandler;</p>
<p>import javax.security.auth.callback.UnsupportedCallbackException;</p>
<p>import org.apache.ws.security.WSPasswordCallback;</p>
<p>//import com.sun.org.apache.xml.internal.security.utils.RFC2253Parser;</p>
<p>import com.sun.xml.wss.impl.callback.CertificateValidationCallback;</p>
<p>import com.sun.xml.wss.impl.callback.DecryptionKeyCallback;</p>
<p>import com.sun.xml.wss.impl.callback.EncryptionKeyCallback;</p>
<p>import com.sun.xml.wss.impl.callback.PasswordValidationCallback;</p>
<p>import com.sun.xml.wss.impl.callback.SignatureKeyCallback;</p>
<p>import com.sun.xml.wss.impl.callback.SignatureVerificationKeyCallback;</p>
<p>import com.sun.xml.wss.impl.callback.TimestampValidationCallback;</p>
<p>import com.sun.xml.wss.impl.misc.SecurityUtil;</p>
<p>/**</p>
<p>* A sample implementation of a CallbackHandler.</p>
<p>*/</p>
<p>public class ServerSecurityEnvironmentHandler implements CallbackHandler {</p>
<p>private KeyStore keyStore;</p>
<p>private KeyStore trustStore;</p>
<p>private String keyStorePassword = &#8220;changeit&#8221;;</p>
<p>private String trustStorePassword = &#8220;changeit&#8221;;</p>
<p>private static final UnsupportedCallbackException unsupported = new UnsupportedCallbackException(</p>
<p>null, &#8220;Unsupported Callback Type Encountered&#8221;);</p>
<p>public ServerSecurityEnvironmentHandler() throws Exception {</p>
<p>initTrustStore();</p>
<p>initKeyStore();</p>
<p>}</p>
<p>public void handle(Callback[] callbacks) throws IOException,</p>
<p>UnsupportedCallbackException {</p>
<p>System.out.println(&#8220;Entered::ServerSecurityEnvironmentHandler::handle&#8221;);</p>
<p>for (int i = 0; i &lt; callbacks.length; i++) {</p>
<p>System.out.println(&#8220;handle::For-1&#8243;);</p>
<p>if (callbacks[i] instanceof PasswordValidationCallback) {</p>
<p>System.out.println(&#8220;handle::PasswordValidationCallback&#8221;);</p>
<p>PasswordValidationCallback cb = (PasswordValidationCallback) callbacks[i];</p>
<p>if (cb.getRequest() instanceof PasswordValidationCallback.PlainTextPasswordRequest) {</p>
<p>System.out.println(&#8220;handle::PlainTextPasswordRequest&#8221;);</p>
<p>cb.setValidator(new PlainTextPasswordValidator());</p>
<p>} else if (cb.getRequest() instanceof PasswordValidationCallback.DigestPasswordRequest) {</p>
<p>System.out.println(&#8220;handle::DigestPasswordRequest&#8221;);</p>
<p>PasswordValidationCallback.DigestPasswordRequest request = (PasswordValidationCallback.DigestPasswordRequest) cb</p>
<p>.getRequest();</p>
<p>String username = request.getUsername();</p>
<p>if (&#8220;Ron&#8221;.equals(username)) {</p>
<p>request.setPassword(&#8220;noR&#8221;);</p>
<p>cb</p>
<p>.setValidator(new PasswordValidationCallback.DigestPasswordValidator());</p>
<p>}</p>
<p>} else {</p>
<p>throw unsupported;</p>
<p>}</p>
<p>} else if (callbacks[i] instanceof TimestampValidationCallback) {</p>
<p>System.out.println(&#8220;handle::TimestampValidationCallback&#8221;);</p>
<p>TimestampValidationCallback cb = (TimestampValidationCallback) callbacks[i];</p>
<p>cb.setValidator(new DefaultTimestampValidator());</p>
<p>} else if (callbacks[i] instanceof SignatureVerificationKeyCallback) {</p>
<p>System.out.println(&#8220;handle::SignatureVerificationKeyCallback&#8221;);</p>
<p>SignatureVerificationKeyCallback cb = (SignatureVerificationKeyCallback) callbacks[i];</p>
<p>if (cb.getRequest() instanceof SignatureVerificationKeyCallback.X509SubjectKeyIdentifierBasedRequest) {</p>
<p>System.out.println(&#8220;handle::X509SubjectKeyIdentifierBasedRequest&#8221;);</p>
<p>// subject keyid request</p>
<p>SignatureVerificationKeyCallback.X509SubjectKeyIdentifierBasedRequest request = (SignatureVerificationKeyCallback.X509SubjectKeyIdentifierBasedRequest) cb</p>
<p>.getRequest();</p>
<p>X509Certificate cert = getCertificateFromTrustStore(request</p>
<p>.getSubjectKeyIdentifier());</p>
<p>request.setX509Certificate(cert);</p>
<p>} else if (cb.getRequest() instanceof SignatureVerificationKeyCallback.X509IssuerSerialBasedRequest) {</p>
<p>// issuer serial request</p>
<p>System.out.println(&#8220;handle::X509IssuerSerialBasedRequest&#8221;);</p>
<p>SignatureVerificationKeyCallback.X509IssuerSerialBasedRequest request = (SignatureVerificationKeyCallback.X509IssuerSerialBasedRequest) cb</p>
<p>.getRequest();</p>
<p>X509Certificate cert = getCertificateFromTrustStore(request</p>
<p>.getIssuerName(), request.getSerialNumber());</p>
<p>request.setX509Certificate(cert);</p>
<p>} else {</p>
<p>throw unsupported;</p>
<p>}</p>
<p>} else if (callbacks[i] instanceof SignatureKeyCallback) {</p>
<p>System.out.println(&#8220;handle::SignatureKeyCallback&#8221;);</p>
<p>SignatureKeyCallback cb = (SignatureKeyCallback) callbacks[i];</p>
<p>if (cb.getRequest() instanceof SignatureKeyCallback.DefaultPrivKeyCertRequest) {</p>
<p>System.out.println(&#8220;handle::DefaultPrivKeyCertRequest&#8221;);</p>
<p>// default priv key cert req</p>
<p>SignatureKeyCallback.DefaultPrivKeyCertRequest request = (SignatureKeyCallback.DefaultPrivKeyCertRequest) cb</p>
<p>.getRequest();</p>
<p>getDefaultPrivKeyCert(request);</p>
<p>} else if (cb.getRequest() instanceof SignatureKeyCallback.AliasPrivKeyCertRequest) {</p>
<p>System.out.println(&#8220;handle::AliasPrivKeyCertRequest&#8221;);</p>
<p>SignatureKeyCallback.AliasPrivKeyCertRequest request = (SignatureKeyCallback.AliasPrivKeyCertRequest) cb</p>
<p>.getRequest();</p>
<p>String alias = request.getAlias();</p>
<p>try {</p>
<p>X509Certificate cert = (X509Certificate) keyStore</p>
<p>.getCertificate(alias);</p>
<p>request.setX509Certificate(cert);</p>
<p>// Assuming key passwords same as the keystore password</p>
<p>PrivateKey privKey = (PrivateKey) keyStore.getKey(</p>
<p>alias, keyStorePassword.toCharArray());</p>
<p>request.setPrivateKey(privKey);</p>
<p>} catch (Exception e) {</p>
<p>System.out.println(&#8220;handle::AliasPrivKeyCertRequest::Exception&#8221;);</p>
<p>throw new IOException(e.getMessage());</p>
<p>}</p>
<p>} else {</p>
<p>System.out.println(&#8220;handle::AliasPrivKeyCertRequest::Exception::own::1&#8243;);</p>
<p>throw unsupported;</p>
<p>}</p>
<p>} else if (callbacks[i] instanceof DecryptionKeyCallback) {</p>
<p>DecryptionKeyCallback cb = (DecryptionKeyCallback) callbacks[i];</p>
<p>System.out.println(&#8220;handle::DecryptionKeyCallback&#8221;);</p>
<p>if (cb.getRequest() instanceof DecryptionKeyCallback.X509SubjectKeyIdentifierBasedRequest) {</p>
<p>System.out.println(&#8220;handle::X509SubjectKeyIdentifierBasedRequest&#8221;);</p>
<p>DecryptionKeyCallback.X509SubjectKeyIdentifierBasedRequest request = (DecryptionKeyCallback.X509SubjectKeyIdentifierBasedRequest) cb</p>
<p>.getRequest();</p>
<p>byte[] ski = request.getSubjectKeyIdentifier();</p>
<p>PrivateKey privKey = getPrivateKey(ski);</p>
<p>request.setPrivateKey(privKey);</p>
<p>} else if (cb.getRequest() instanceof DecryptionKeyCallback.X509IssuerSerialBasedRequest) {</p>
<p>System.out.println(&#8220;handle::X509IssuerSerialBasedRequest&#8221;);</p>
<p>DecryptionKeyCallback.X509IssuerSerialBasedRequest request = (DecryptionKeyCallback.X509IssuerSerialBasedRequest) cb</p>
<p>.getRequest();</p>
<p>String issuerName = request.getIssuerName();</p>
<p>BigInteger serialNumber = request.getSerialNumber();</p>
<p>PrivateKey privKey = getPrivateKey(issuerName, serialNumber);</p>
<p>request.setPrivateKey(privKey);</p>
<p>} else if (cb.getRequest() instanceof DecryptionKeyCallback.X509CertificateBasedRequest) {</p>
<p>System.out.println(&#8220;handle::X509CertificateBasedRequest&#8221;);</p>
<p>DecryptionKeyCallback.X509CertificateBasedRequest request = (DecryptionKeyCallback.X509CertificateBasedRequest) cb</p>
<p>.getRequest();</p>
<p>X509Certificate cert = request.getX509Certificate();</p>
<p>PrivateKey privKey = getPrivateKey(cert);</p>
<p>request.setPrivateKey(privKey);</p>
<p>} else {</p>
<p>System.out.println(&#8220;handle::X509CertificateBasedRequest::Exception::own:2&#8243;);</p>
<p>throw unsupported;</p>
<p>}</p>
<p>} else if (callbacks[i] instanceof EncryptionKeyCallback) {</p>
<p>EncryptionKeyCallback cb = (EncryptionKeyCallback) callbacks[i];</p>
<p>System.out.println(&#8220;handle::EncryptionKeyCallback&#8221;);</p>
<p>if (cb.getRequest() instanceof EncryptionKeyCallback.AliasX509CertificateRequest) {</p>
<p>System.out.println(&#8220;handle::AliasX509CertificateRequest&#8221;);</p>
<p>EncryptionKeyCallback.AliasX509CertificateRequest request = (EncryptionKeyCallback.AliasX509CertificateRequest) cb</p>
<p>.getRequest();</p>
<p>String alias = request.getAlias();</p>
<p>if (alias == null) {</p>
<p>System.out.println(&#8220;handle::AliasX509CertificateRequest::read&#8221;);</p>
<p>// plugin code here to read the cert from the</p>
<p>// ThreadLocal</p>
<p>} else {</p>
<p>try {</p>
<p>System.out.println(&#8220;handle::AliasX509CertificateRequest:try&#8221;);</p>
<p>X509Certificate cert = (X509Certificate) trustStore</p>
<p>.getCertificate(alias);</p>
<p>request.setX509Certificate(cert);</p>
<p>} catch (Exception e) {</p>
<p>System.out.println(&#8220;handle::AliasX509CertificateRequest::Exception&#8221;);</p>
<p>throw new IOException(e.getMessage());</p>
<p>}</p>
<p>}</p>
<p>} else {</p>
<p>System.out.println(&#8220;handle::AliasX509CertificateRequest::Exception::own::3&#8243;);</p>
<p>throw unsupported;</p>
<p>}</p>
<p>} else if (callbacks[i] instanceof CertificateValidationCallback) {</p>
<p>System.out.println(&#8220;handle::CertificateValidationCallback&#8221;);</p>
<p>CertificateValidationCallback cb = (CertificateValidationCallback) callbacks[i];</p>
<p>cb.setValidator(new X509CertificateValidatorImpl());</p>
<p>} else if (callbacks[i] instanceof CertificateValidationCallback) {</p>
<p>System.out.println(&#8220;handle::CertificateValidationCallback&#8221;);</p>
<p>CertificateValidationCallback cb = (CertificateValidationCallback) callbacks[i];</p>
<p>cb.setValidator(new X509CertificateValidatorImpl());</p>
<p>} else if (callbacks[i] instanceof WSPasswordCallback) {</p>
<p>System.out.println(&#8220;handle::WSPasswordCallback&#8221;);</p>
<p>WSPasswordCallback cb = (WSPasswordCallback) callbacks[i];</p>
<p>System.out.println(&#8220;handle::cb.getPassword()&#8221;+cb.getPassword());</p>
<p>cb.setPassword(&#8220;changeit&#8221;);</p>
<p>} else {</p>
<p>System.out.println(&#8220;handle::CallBack Class Name::&#8221;+callbacks[i].getClass().getName());</p>
<p>System.out.println(&#8220;handle::CertificateValidationCallback::Exception::own::4&#8243;);</p>
<p>throw unsupported;</p>
<p>}</p>
<p>}</p>
<p>System.out.println(&#8220;Leaving::ServerSecurityEnvironmentHandler::handle&#8221;);</p>
<p>}</p>
<p>private void initTrustStore() throws IOException {</p>
<p>System.out</p>
<p>.println(&#8220;Entered::ServerSecurityEnvironmentHandler::initTrustStore&#8221;);</p>
<p>try {</p>
<p>URL truststoreURL = SecurityUtil</p>
<p>.loadFromClasspath(&#8220;server-truststore.jks&#8221;);</p>
<p>trustStore = KeyStore.getInstance(&#8220;JKS&#8221;);</p>
<p>trustStore.load(truststoreURL.openStream(), trustStorePassword</p>
<p>.toCharArray());</p>
<p>} catch (Exception e) {</p>
<p>e.printStackTrace();</p>
<p>throw new IOException(e.getMessage());</p>
<p>}</p>
<p>System.out</p>
<p>.println(&#8220;Leaving::ServerSecurityEnvironmentHandler::initTrustStore&#8221;);</p>
<p>}</p>
<p>private void initKeyStore() throws IOException {</p>
<p>System.out</p>
<p>.println(&#8220;Entered::ServerSecurityEnvironmentHandler::initKeyStore&#8221;);</p>
<p>try {</p>
<p>URL keystoreURL = SecurityUtil</p>
<p>.loadFromClasspath(&#8220;server-keystore.jks&#8221;);</p>
<p>keyStore = KeyStore.getInstance(&#8220;JKS&#8221;);</p>
<p>keyStore.load(keystoreURL.openStream(), keyStorePassword</p>
<p>.toCharArray());</p>
<p>} catch (Exception e) {</p>
<p>throw new IOException(e.getMessage());</p>
<p>}</p>
<p>System.out</p>
<p>.println(&#8220;Leaving::ServerSecurityEnvironmentHandler::initKeyStore&#8221;);</p>
<p>}</p>
<p>private X509Certificate getCertificateFromTrustStore(byte[] ski)</p>
<p>throws IOException {</p>
<p>System.out</p>
<p>.println(&#8220;Entered::ServerSecurityEnvironmentHandler::getCertificateFromTrustStore&#8221;);</p>
<p>try {</p>
<p>Enumeration aliases = trustStore.aliases();</p>
<p>while (aliases.hasMoreElements()) {</p>
<p>String alias = (String) aliases.nextElement();</p>
<p>Certificate cert = trustStore.getCertificate(alias);</p>
<p>if (cert == null || !&#8221;X.509&#8243;.equals(cert.getType())) {</p>
<p>continue;</p>
<p>}</p>
<p>X509Certificate x509Cert = (X509Certificate) cert;</p>
<p>byte[] keyId = getSubjectKeyIdentifier(x509Cert);</p>
<p>if (keyId == null) {</p>
<p>// Cert does not contain a key identifier</p>
<p>continue;</p>
<p>}</p>
<p>if (Arrays.equals(ski, keyId)) {</p>
<p>System.out</p>
<p>.println(&#8220;Leaving::ServerSecurityEnvironmentHandler::getCertificateFromTrustStore::1&#8243;);</p>
<p>return x509Cert;</p>
<p>}</p>
<p>}</p>
<p>} catch (Exception e) {</p>
<p>throw new IOException(e.getMessage());</p>
<p>}</p>
<p>System.out</p>
<p>.println(&#8220;Leaving::ServerSecurityEnvironmentHandler::getCertificateFromTrustStore::2&#8243;);</p>
<p>return null;</p>
<p>}</p>
<p>private X509Certificate getCertificateFromTrustStore(String issuerName,</p>
<p>BigInteger serialNumber) throws IOException {</p>
<p>System.out</p>
<p>.println(&#8220;Entered::ServerSecurityEnvironmentHandler::getCertificateFromTrustStore::Multiple&#8221;);</p>
<p>try {</p>
<p>Enumeration aliases = trustStore.aliases();</p>
<p>while (aliases.hasMoreElements()) {</p>
<p>String alias = (String) aliases.nextElement();</p>
<p>Certificate cert = trustStore.getCertificate(alias);</p>
<p>if (cert == null || !&#8221;X.509&#8243;.equals(cert.getType())) {</p>
<p>continue;</p>
<p>}</p>
<p>X509Certificate x509Cert = (X509Certificate) cert;</p>
<p>String thisIssuerName = org.apache.xml.security.utils.RFC2253Parser.normalize(x509Cert</p>
<p>.getIssuerDN().getName());</p>
<p>BigInteger thisSerialNumber = x509Cert.getSerialNumber();</p>
<p>if (thisIssuerName.equals(issuerName)</p>
<p>&amp;&amp; thisSerialNumber.equals(serialNumber)) {</p>
<p>System.out</p>
<p>.println(&#8220;Leaving::ServerSecurityEnvironmentHandler::getCertificateFromTrustStore::Multiple::1&#8243;);</p>
<p>return x509Cert;</p>
<p>}</p>
<p>}</p>
<p>} catch (Exception e) {</p>
<p>throw new IOException(e.getMessage());</p>
<p>}</p>
<p>System.out</p>
<p>.println(&#8220;Leaving::ServerSecurityEnvironmentHandler::getCertificateFromTrustStore::Multiple::2&#8243;);</p>
<p>return null;</p>
<p>}</p>
<p>public PrivateKey getPrivateKey(byte[] ski) throws IOException {</p>
<p>System.out</p>
<p>.println(&#8220;Entered::ServerSecurityEnvironmentHandler::getPrivateKey&#8221;);</p>
<p>try {</p>
<p>Enumeration aliases = keyStore.aliases();</p>
<p>while (aliases.hasMoreElements()) {</p>
<p>String alias = (String) aliases.nextElement();</p>
<p>if (!keyStore.isKeyEntry(alias))</p>
<p>continue;</p>
<p>Certificate cert = keyStore.getCertificate(alias);</p>
<p>if (cert == null || !&#8221;X.509&#8243;.equals(cert.getType())) {</p>
<p>continue;</p>
<p>}</p>
<p>X509Certificate x509Cert = (X509Certificate) cert;</p>
<p>byte[] keyId = getSubjectKeyIdentifier(x509Cert);</p>
<p>if (keyId == null) {</p>
<p>// Cert does not contain a key identifier</p>
<p>continue;</p>
<p>}</p>
<p>if (Arrays.equals(ski, keyId)) {</p>
<p>// Asuumed key password same as the keystore password</p>
<p>System.out</p>
<p>.println(&#8220;Leaving::ServerSecurityEnvironmentHandler::getPrivateKey::2&#8243;);</p>
<p>return (PrivateKey) keyStore.getKey(alias, keyStorePassword</p>
<p>.toCharArray());</p>
<p>}</p>
<p>}</p>
<p>} catch (Exception e) {</p>
<p>throw new IOException(e.getMessage());</p>
<p>}</p>
<p>System.out</p>
<p>.println(&#8220;Leaving::ServerSecurityEnvironmentHandler::getPrivateKey::2&#8243;);</p>
<p>return null;</p>
<p>}</p>
<p>public PrivateKey getPrivateKey(String issuerName, BigInteger serialNumber)</p>
<p>throws IOException {</p>
<p>System.out</p>
<p>.println(&#8220;Entered::ServerSecurityEnvironmentHandler::getPrivateKey::multiple&#8221;);</p>
<p>try {</p>
<p>Enumeration aliases = keyStore.aliases();</p>
<p>while (aliases.hasMoreElements()) {</p>
<p>String alias = (String) aliases.nextElement();</p>
<p>if (!keyStore.isKeyEntry(alias))</p>
<p>continue;</p>
<p>Certificate cert = keyStore.getCertificate(alias);</p>
<p>if (cert == null || !&#8221;X.509&#8243;.equals(cert.getType())) {</p>
<p>continue;</p>
<p>}</p>
<p>X509Certificate x509Cert = (X509Certificate) cert;</p>
<p>String thisIssuerName = org.apache.xml.security.utils.RFC2253Parser.normalize(x509Cert</p>
<p>.getIssuerDN().getName());</p>
<p>BigInteger thisSerialNumber = x509Cert.getSerialNumber();</p>
<p>if (thisIssuerName.equals(issuerName)</p>
<p>&amp;&amp; thisSerialNumber.equals(serialNumber)) {</p>
<p>System.out</p>
<p>.println(&#8220;Leaving::ServerSecurityEnvironmentHandler::getPrivateKey::multiple::1&#8243;);</p>
<p>return (PrivateKey) keyStore.getKey(alias, keyStorePassword</p>
<p>.toCharArray());</p>
<p>}</p>
<p>}</p>
<p>} catch (Exception e) {</p>
<p>throw new IOException(e.getMessage());</p>
<p>}</p>
<p>System.out</p>
<p>.println(&#8220;Leaving::ServerSecurityEnvironmentHandler::getPrivateKey::multiple::1&#8243;);</p>
<p>return null;</p>
<p>}</p>
<p>public PrivateKey getPrivateKey(X509Certificate certificate)</p>
<p>throws IOException {</p>
<p>System.out</p>
<p>.println(&#8220;Entered::ServerSecurityEnvironmentHandler::getPrivateKey::certificate&#8221;);</p>
<p>try {</p>
<p>Enumeration aliases = keyStore.aliases();</p>
<p>while (aliases.hasMoreElements()) {</p>
<p>String alias = (String) aliases.nextElement();</p>
<p>if (!keyStore.isKeyEntry(alias))</p>
<p>continue;</p>
<p>Certificate cert = keyStore.getCertificate(alias);</p>
<p>if (cert != null &amp;&amp; cert.equals(certificate))</p>
<p>System.out</p>
<p>.println(&#8220;Leaving::ServerSecurityEnvironmentHandler::getPrivateKey::certificate::1&#8243;);</p>
<p>return (PrivateKey) keyStore.getKey(alias, keyStorePassword</p>
<p>.toCharArray());</p>
<p>}</p>
<p>} catch (Exception e) {</p>
<p>throw new IOException(e.getMessage());</p>
<p>}</p>
<p>System.out</p>
<p>.println(&#8220;Leaving::ServerSecurityEnvironmentHandler::getPrivateKey::certificate::2&#8243;);</p>
<p>return null;</p>
<p>}</p>
<p>private void getDefaultPrivKeyCert(</p>
<p>SignatureKeyCallback.DefaultPrivKeyCertRequest request)</p>
<p>throws IOException {</p>
<p>System.out</p>
<p>.println(&#8220;Entered::ServerSecurityEnvironmentHandler::getDefaultPrivKeyCert&#8221;);</p>
<p>String uniqueAlias = null;</p>
<p>try {</p>
<p>Enumeration aliases = keyStore.aliases();</p>
<p>while (aliases.hasMoreElements()) {</p>
<p>String currentAlias = (String) aliases.nextElement();</p>
<p>if (keyStore.isKeyEntry(currentAlias)) {</p>
<p>Certificate thisCertificate = keyStore</p>
<p>.getCertificate(currentAlias);</p>
<p>if (thisCertificate != null) {</p>
<p>if (thisCertificate instanceof X509Certificate) {</p>
<p>if (uniqueAlias == null) {</p>
<p>uniqueAlias = currentAlias;</p>
<p>} else {</p>
<p>// Not unique!</p>
<p>uniqueAlias = null;</p>
<p>break;</p>
<p>}</p>
<p>}</p>
<p>}</p>
<p>}</p>
<p>}</p>
<p>if (uniqueAlias != null) {</p>
<p>request.setX509Certificate((X509Certificate) keyStore</p>
<p>.getCertificate(uniqueAlias));</p>
<p>request.setPrivateKey((PrivateKey) keyStore.getKey(uniqueAlias,</p>
<p>keyStorePassword.toCharArray()));</p>
<p>}</p>
<p>} catch (Exception e) {</p>
<p>throw new IOException(e.getMessage());</p>
<p>}</p>
<p>System.out</p>
<p>.println(&#8220;Leaving::ServerSecurityEnvironmentHandler::getDefaultPrivKeyCert&#8221;);</p>
<p>}</p>
<p>private static byte[] getSubjectKeyIdentifier(X509Certificate cert) {</p>
<p>System.out</p>
<p>.println(&#8220;Entered::ServerSecurityEnvironmentHandler::getSubjectKeyIdentifier&#8221;);</p>
<p>String SUBJECT_KEY_IDENTIFIER_OID = &#8220;2.5.29.14&#8243;;</p>
<p>byte[] subjectKeyIdentifier = cert</p>
<p>.getExtensionValue(SUBJECT_KEY_IDENTIFIER_OID);</p>
<p>if (subjectKeyIdentifier == null)</p>
<p>return null;</p>
<p>try {</p>
<p>sun.security.x509.KeyIdentifier keyId = null;</p>
<p>sun.security.util.DerValue derVal = new sun.security.util.DerValue(</p>
<p>new sun.security.util.DerInputStream(subjectKeyIdentifier)</p>
<p>.getOctetString());</p>
<p>keyId = new sun.security.x509.KeyIdentifier(derVal.getOctetString());</p>
<p>System.out</p>
<p>.println(&#8220;Leaving::ServerSecurityEnvironmentHandler::getSubjectKeyIdentifier::1&#8243;);</p>
<p>return keyId.getIdentifier();</p>
<p>} catch (NoClassDefFoundError ncde) {</p>
<p>if (subjectKeyIdentifier == null)</p>
<p>return null;</p>
<p>byte[] dest = new byte[subjectKeyIdentifier.length - 4];</p>
<p>System.arraycopy(subjectKeyIdentifier, 4, dest, 0,</p>
<p>subjectKeyIdentifier.length &#8211; 4);</p>
<p>System.out</p>
<p>.println(&#8220;Leaving::ServerSecurityEnvironmentHandler::getSubjectKeyIdentifier::2&#8243;);</p>
<p>return dest;</p>
<p>} catch (java.io.IOException ex) {</p>
<p>// ignore</p>
<p>System.out</p>
<p>.println(&#8220;Leaving::ServerSecurityEnvironmentHandler::getSubjectKeyIdentifier::3&#8243;);</p>
<p>return null;</p>
<p>}</p>
<p>}</p>
<p>private class PlainTextPasswordValidator implements</p>
<p>PasswordValidationCallback.PasswordValidator {</p>
<p>public boolean validate(PasswordValidationCallback.Request request)</p>
<p>throws PasswordValidationCallback.PasswordValidationException {</p>
<p>System.out.println(&#8220;Entered::PlainTextPasswordValidator::validate&#8221;);</p>
<p>PasswordValidationCallback.PlainTextPasswordRequest plainTextRequest = (PasswordValidationCallback.PlainTextPasswordRequest) request;</p>
<p>if (&#8220;Ron&#8221;.equals(plainTextRequest.getUsername())</p>
<p>&amp;&amp; &#8220;noR&#8221;.equals(plainTextRequest.getPassword())) {</p>
<p>System.out</p>
<p>.println(&#8220;Leaving::PlainTextPasswordValidator::validate::true&#8221;);</p>
<p>return true;</p>
<p>}</p>
<p>System.out</p>
<p>.println(&#8220;Leaving::PlainTextPasswordValidator::validate::false&#8221;);</p>
<p>return false;</p>
<p>}</p>
<p>}</p>
<p>private class DefaultTimestampValidator implements</p>
<p>TimestampValidationCallback.TimestampValidator {</p>
<p>public void validate(TimestampValidationCallback.Request request)</p>
<p>throws TimestampValidationCallback.TimestampValidationException {</p>
<p>System.out.println(&#8220;Entered::DefaultTimestampValidator::validate&#8221;);</p>
<p>// validate timestamp creation and expiration time.</p>
<p>TimestampValidationCallback.UTCTimestampRequest utcTimestampRequest = (TimestampValidationCallback.UTCTimestampRequest) request;</p>
<p>SimpleDateFormat calendarFormatter2 = new SimpleDateFormat(</p>
<p>&#8220;yyyy-MM-dd&#8217;T'HH:mm:ss&#8217;Z'&#8221;);</p>
<p>SimpleDateFormat calendarFormatter1 = new SimpleDateFormat(</p>
<p>&#8220;yyyy-MM-dd&#8217;T'HH:mm:ss&#8217;.'SSS&#8217;Z'&#8221;);</p>
<p>Date created = null;</p>
<p>Date expired = null;</p>
<p>try {</p>
<p>try {</p>
<p>created = calendarFormatter1.parse(utcTimestampRequest</p>
<p>.getCreated());</p>
<p>if (utcTimestampRequest.getExpired() != null)</p>
<p>expired = calendarFormatter1.parse(utcTimestampRequest</p>
<p>.getExpired());</p>
<p>} catch (java.text.ParseException pe) {</p>
<p>created = calendarFormatter2.parse(utcTimestampRequest</p>
<p>.getCreated());</p>
<p>if (utcTimestampRequest.getExpired() != null)</p>
<p>expired = calendarFormatter2.parse(utcTimestampRequest</p>
<p>.getExpired());</p>
<p>}</p>
<p>} catch (java.text.ParseException pe) {</p>
<p>throw new TimestampValidationCallback.TimestampValidationException(</p>
<p>pe.getMessage());</p>
<p>}</p>
<p>long maxClockSkew = utcTimestampRequest.getMaxClockSkew();</p>
<p>long timestampFreshnessLimit = utcTimestampRequest</p>
<p>.getTimestampFreshnessLimit();</p>
<p>// validate creation time</p>
<p>validateCreationTime(created, maxClockSkew, timestampFreshnessLimit);</p>
<p>// validate expiration time</p>
<p>if (expired != null)</p>
<p>validateExpirationTime(expired, maxClockSkew,</p>
<p>timestampFreshnessLimit);</p>
<p>System.out.println(&#8220;Leaving::DefaultTimestampValidator::validate&#8221;);</p>
<p>}</p>
<p>}</p>
<p>public void validateExpirationTime(Date expires, long maxClockSkew,</p>
<p>long timestampFreshnessLimit)</p>
<p>throws TimestampValidationCallback.TimestampValidationException {</p>
<p>System.out</p>
<p>.println(&#8220;Enterd::DefaultTimestampValidator::validateExpirationTime&#8221;);</p>
<p>Date currentTime = getGMTDateWithSkewAdjusted(new GregorianCalendar(),</p>
<p>maxClockSkew, false);</p>
<p>if (expires.before(currentTime)) {</p>
<p>throw new TimestampValidationCallback.TimestampValidationException(</p>
<p>&#8220;The current time is ahead of the expiration time in Timestamp&#8221;);</p>
<p>}</p>
<p>System.out</p>
<p>.println(&#8220;Leaving::DefaultTimestampValidator::validateExpirationTime&#8221;);</p>
<p>}</p>
<p>public void validateCreationTime(Date created, long maxClockSkew,</p>
<p>long timestampFreshnessLimit)</p>
<p>throws TimestampValidationCallback.TimestampValidationException {</p>
<p>System.out</p>
<p>.println(&#8220;Enterd::DefaultTimestampValidator::validateCreationTime&#8221;);</p>
<p>Date current = getFreshnessAndSkewAdjustedDate(maxClockSkew,</p>
<p>timestampFreshnessLimit);</p>
<p>System.out.println(&#8220;Validate Creation time called current=&#8221; + current);</p>
<p>System.out.println(&#8220;Validate Creation time called created=&#8221; + created);</p>
<p>if (created.before(current)) {</p>
<p>throw new TimestampValidationCallback.TimestampValidationException(</p>
<p>&#8220;The creation time is older than &#8220;</p>
<p>+ &#8221; currenttime &#8211; timestamp-freshness-limit &#8211; max-clock-skew&#8221;);</p>
<p>}</p>
<p>Date currentTime = getGMTDateWithSkewAdjusted(new GregorianCalendar(),</p>
<p>maxClockSkew, true);</p>
<p>System.out.println(&#8220;Validate Creation time called currentTime=&#8221;</p>
<p>+ currentTime);</p>
<p>System.out.println(&#8220;Validate Creation time called created=&#8221; + created);</p>
<p>if (currentTime.before(created)) {</p>
<p>throw new TimestampValidationCallback.TimestampValidationException(</p>
<p>&#8220;The creation time is ahead of the current time.&#8221;);</p>
<p>}</p>
<p>System.out</p>
<p>.println(&#8220;Leaving::DefaultTimestampValidator::validateCreationTime&#8221;);</p>
<p>}</p>
<p>private static Date getFreshnessAndSkewAdjustedDate(long maxClockSkew,</p>
<p>long timestampFreshnessLimit) {</p>
<p>System.out</p>
<p>.println(&#8220;Enterd::DefaultTimestampValidator::getFreshnessAndSkewAdjustedDate&#8221;);</p>
<p>Calendar c = new GregorianCalendar();</p>
<p>long offset = c.get(Calendar.ZONE_OFFSET);</p>
<p>if (c.getTimeZone().inDaylightTime(c.getTime())) {</p>
<p>offset += c.getTimeZone().getDSTSavings();</p>
<p>}</p>
<p>long beforeTime = c.getTimeInMillis();</p>
<p>long currentTime = beforeTime &#8211; offset;</p>
<p>System.out.println(&#8220;MaxSkew=&#8221; + maxClockSkew + &#8221; freshness=&#8221;</p>
<p>+ timestampFreshnessLimit);</p>
<p>long adjustedTime = currentTime &#8211; maxClockSkew</p>
<p>- timestampFreshnessLimit;</p>
<p>c.setTimeInMillis(adjustedTime);</p>
<p>System.out</p>
<p>.println(&#8220;Leaving::DefaultTimestampValidator::getFreshnessAndSkewAdjustedDate&#8221;);</p>
<p>return c.getTime();</p>
<p>}</p>
<p>private static Date getGMTDateWithSkewAdjusted(Calendar c,</p>
<p>long maxClockSkew, boolean addSkew) {</p>
<p>System.out</p>
<p>.println(&#8220;Enterd::DefaultTimestampValidator::getGMTDateWithSkewAdjusted&#8221;);</p>
<p>long offset = c.get(Calendar.ZONE_OFFSET);</p>
<p>if (c.getTimeZone().inDaylightTime(c.getTime())) {</p>
<p>offset += c.getTimeZone().getDSTSavings();</p>
<p>}</p>
<p>long beforeTime = c.getTimeInMillis();</p>
<p>long currentTime = beforeTime &#8211; offset;</p>
<p>if (addSkew)</p>
<p>currentTime = currentTime + maxClockSkew;</p>
<p>else</p>
<p>currentTime = currentTime &#8211; maxClockSkew;</p>
<p>c.setTimeInMillis(currentTime);</p>
<p>System.out</p>
<p>.println(&#8220;Leaving::DefaultTimestampValidator::getGMTDateWithSkewAdjusted&#8221;);</p>
<p>return c.getTime();</p>
<p>}</p>
<p>private class X509CertificateValidatorImpl implements</p>
<p>CertificateValidationCallback.CertificateValidator {</p>
<p>public boolean validate(X509Certificate certificate)</p>
<p>throws CertificateValidationCallback.CertificateValidationException {</p>
<p>System.out</p>
<p>.println(&#8220;Enterd::X509CertificateValidatorImpl::validate&#8221;);</p>
<p>if (isSelfCert(certificate)) {</p>
<p>System.out</p>
<p>.println(&#8220;Leaving::X509CertificateValidatorImpl::validate::1&#8243;);</p>
<p>return true;</p>
<p>}</p>
<p>try {</p>
<p>certificate.checkValidity();</p>
<p>} catch (CertificateExpiredException e) {</p>
<p>e.printStackTrace();</p>
<p>throw new CertificateValidationCallback.CertificateValidationException(</p>
<p>&#8220;X509Certificate Expired&#8221;, e);</p>
<p>} catch (CertificateNotYetValidException e) {</p>
<p>e.printStackTrace();</p>
<p>throw new CertificateValidationCallback.CertificateValidationException(</p>
<p>&#8220;X509Certificate not yet valid&#8221;, e);</p>
<p>}</p>
<p>X509CertSelector certSelector = new X509CertSelector();</p>
<p>certSelector.setCertificate(certificate);</p>
<p>PKIXBuilderParameters parameters;</p>
<p>CertPathBuilder builder;</p>
<p>try {</p>
<p>parameters = new PKIXBuilderParameters(trustStore, certSelector);</p>
<p>parameters.setRevocationEnabled(false);</p>
<p>builder = CertPathBuilder.getInstance(&#8220;PKIX&#8221;);</p>
<p>} catch (Exception e) {</p>
<p>e.printStackTrace();</p>
<p>throw new CertificateValidationCallback.CertificateValidationException(</p>
<p>e.getMessage(), e);</p>
<p>}</p>
<p>try {</p>
<p>PKIXCertPathBuilderResult result = (PKIXCertPathBuilderResult) builder</p>
<p>.build(parameters);</p>
<p>} catch (Exception e) {</p>
<p>e.printStackTrace();</p>
<p>System.out</p>
<p>.println(&#8220;Leaving::X509CertificateValidatorImpl::validate::2&#8243;);</p>
<p>return false;</p>
<p>}</p>
<p>System.out</p>
<p>.println(&#8220;Leaving::X509CertificateValidatorImpl::validate::3&#8243;);</p>
<p>return true;</p>
<p>}</p>
<p>private boolean isSelfCert(X509Certificate cert)</p>
<p>throws CertificateValidationCallback.CertificateValidationException {</p>
<p>System.out</p>
<p>.println(&#8220;Entered::X509CertificateValidatorImpl::isSelfCert&#8221;);</p>
<p>try {</p>
<p>if (keyStore == null)</p>
<p>initKeyStore();</p>
<p>Enumeration aliases = keyStore.aliases();</p>
<p>while (aliases.hasMoreElements()) {</p>
<p>String alias = (String) aliases.nextElement();</p>
<p>if (keyStore.isKeyEntry(alias)) {</p>
<p>X509Certificate x509Cert = (X509Certificate) keyStore</p>
<p>.getCertificate(alias);</p>
<p>if (x509Cert != null) {</p>
<p>if (x509Cert.equals(cert))</p>
<p>System.out</p>
<p>.println(&#8220;Leaving::X509CertificateValidatorImpl::isSelfCert::1&#8243;);</p>
<p>return true;</p>
<p>}</p>
<p>}</p>
<p>}</p>
<p>System.out</p>
<p>.println(&#8220;Leaving::X509CertificateValidatorImpl::isSelfCert::2&#8243;);</p>
<p>return false;</p>
<p>} catch (Exception e) {</p>
<p>e.printStackTrace();</p>
<p>throw new CertificateValidationCallback.CertificateValidationException(</p>
<p>e.getMessage(), e);</p>
<p>}</p>
<p>}</p>
<p>}</p>
<p>private String getContainerHome() {</p>
<p>System.out</p>
<p>.println(&#8220;Entered::X509CertificateValidatorImpl::getContainerHome&#8221;);</p>
<p>String _home = &#8220;&#8221;;</p>
<p>String fileSeparator = System.getProperty(&#8220;file.separator&#8221;);</p>
<p>String contHome = System.getProperty(&#8220;catalina.home&#8221;);</p>
<p>if (contHome != null) {</p>
<p>String isAS = System.getProperty(&#8220;com.sun.aas.instanceRoot&#8221;);</p>
<p>if (isAS != null) {</p>
<p>_home = contHome + fileSeparator + &#8220;..&#8221; + fileSeparator + &#8220;..&#8221;;</p>
<p>} else {</p>
<p>_home = contHome;</p>
<p>}</p>
<p>} else {</p>
<p>_home = System.getProperty(&#8220;jwsdp.home&#8221;);</p>
<p>if (_home == null) {</p>
<p>_home = System.getProperty(&#8220;as.home&#8221;);</p>
<p>}</p>
<p>}</p>
<p>System.out</p>
<p>.println(&#8220;Leaving::X509CertificateValidatorImpl::getContainerHome&#8221;);</p>
<p>return _home;</p>
<p>}</p>
<p>}</p>
<p>Step 11: Create Interceptor class to handle soap requests ValidateUserTokenInterceptor.java.</p>
<p>package com.sungard.cxf.example.server;</p>
<p>import java.util.Vector;</p>
<p>import org.apache.cxf.message.Message;</p>
<p>import org.apache.cxf.phase.AbstractPhaseInterceptor;</p>
<p>import org.apache.cxf.phase.Phase;</p>
<p>import org.apache.ws.security.WSSecurityEngineResult;</p>
<p>import org.apache.ws.security.WSUsernameTokenPrincipal;</p>
<p>import org.apache.ws.security.handler.WSHandlerConstants;</p>
<p>import org.apache.ws.security.handler.WSHandlerResult;</p>
<p>public class ValidateUserTokenInterceptor extends AbstractPhaseInterceptor {</p>
<p>public ValidateUserTokenInterceptor(String s) {</p>
<p>super(s);</p>
<p>}</p>
<p>public ValidateUserTokenInterceptor() {</p>
<p>super(Phase.UNMARSHAL);</p>
<p>}</p>
<p>public void handleMessage(Message message) {</p>
<p>System.out</p>
<p>.println(&#8220;Enterd ValidateUserTokenInterceptor::handleMessage&#8221;);</p>
<p>boolean userTokenValidated = false;</p>
<p>Vector result = (Vector) message</p>
<p>.getContextualProperty(WSHandlerConstants.RECV_RESULTS);</p>
<p>for (int i = 0; i &lt; result.size(); i++) {</p>
<p>WSHandlerResult res = (WSHandlerResult) result.get(i);</p>
<p>for (int j = 0; j &lt; res.getResults().size(); j++) {</p>
<p>WSSecurityEngineResult secRes = (WSSecurityEngineResult) res</p>
<p>.getResults().get(j);</p>
<p>if (secRes.getPrincipal() != null) {</p>
<p>System.out</p>
<p>.println(&#8220;ValidateUserTokenInterceptor::handleMessage::Class&#8221;</p>
<p>+ secRes.getPrincipal().getClass());</p>
<p>System.out</p>
<p>.println(&#8220;ValidateUserTokenInterceptor::handleMessage::ClassName&#8221;</p>
<p>+ secRes.getPrincipal().getClass()</p>
<p>.getName());</p>
<p>System.out</p>
<p>.println(&#8220;ValidateUserTokenInterceptor::handleMessage::Name&#8221;</p>
<p>+ secRes.getPrincipal().getName());</p>
<p>if (secRes.getPrincipal().getClass().getName().equals(</p>
<p>&#8220;org.apache.ws.security.WSUsernameTokenPrincipal&#8221;)) {</p>
<p>System.out</p>
<p>.println(&#8220;ValidateUserTokenInterceptor::handleMessage::WSUsernameTokenPrincipal&#8221;</p>
<p>+ secRes.getPrincipal().getName());</p>
<p>WSUsernameTokenPrincipal principal = (WSUsernameTokenPrincipal) secRes</p>
<p>.getPrincipal();</p>
<p>System.out.println(&#8220;principal.isPasswordDigest&#8221;</p>
<p>+ principal.isPasswordDigest());</p>
<p>System.out.println(&#8220;principal.getNonce()&#8221;</p>
<p>+ principal.getNonce());</p>
<p>System.out.println(&#8220;principal.getPassword()&#8221;</p>
<p>+ principal.getPassword());</p>
<p>System.out.println(&#8220;principal.getCreatedTime()&#8221;</p>
<p>+ principal.getCreatedTime());</p>
<p>if (principal.getPassword() == null) {</p>
<p>throw new RuntimeException(</p>
<p>&#8220;Invalid Security Header&#8221;);</p>
<p>} else {</p>
<p>System.out</p>
<p>.println(&#8220;ValidateUserTokenInterceptor::handleMessage::userTokenValidated = true&#8221;);</p>
<p>userTokenValidated = true;</p>
<p>}</p>
<p>}</p>
<p>}</p>
<p>}</p>
<p>}</p>
<p>if (!userTokenValidated) {</p>
<p>throw new RuntimeException(&#8220;Security processing failed::Peter&#8221;);</p>
<p>}</p>
<p>System.out</p>
<p>.println(&#8220;Leaving ValidateUserTokenInterceptor::handleMessage&#8221;);</p>
<p>}</p>
<p>}</p>
<p>Step 12: Create beans.xml file to setup the application context for the server.</p>
<p>&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;UTF-8&#8243;?&gt;</p>
<p>&lt;beans xmlns=&#8221;http://www.springframework.org/schema/beans&#8221;</p>
<p>xmlns:xsi=&#8221;http://www.w3.org/2001/XMLSchema-instance&#8221;</p>
<p>xmlns:jaxws=&#8221;http://cxf.apache.org/jaxws&#8221;</p>
<p>xsi:schemaLocation=&#8221;</p>
<p>http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd</p>
<p>http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd&#8221;&gt;</p>
<p>&lt;import resource=&#8221;classpath:META-INF/cxf/cxf.xml&#8221; /&gt;</p>
<p>&lt;import resource=&#8221;classpath:META-INF/cxf/cxf-extension-soap.xml&#8221; /&gt;</p>
<p>&lt;import resource=&#8221;classpath:META-INF/cxf/cxf-servlet.xml&#8221; /&gt;</p>
<p>&lt;jaxws:endpoint id=&#8221;helloWorld&#8221;</p>
<p>implementor=&#8221;com.sungard.cxf.example.server.IHello_Impl&#8221;</p>
<p>address=&#8221;/HelloService&#8221;&gt;</p>
<p>&lt;jaxws:inInterceptors&gt;</p>
<p>&lt;bean id=&#8221;logIn&#8221;</p>
<p>/&gt;</p>
<p>&lt;bean id=&#8221;logOut&#8221;</p>
<p>/&gt;</p>
<p>&lt;bean</p>
<p>/&gt;</p>
<p>&lt;bean</p>
<p>&gt;</p>
<p>&lt;property name=&#8221;properties&#8221;&gt;</p>
<p>&lt;map&gt;</p>
<p>&lt;entry key=&#8221;action&#8221;</p>
<p>value=&#8221;UsernameToken SAMLTokenUnsigned&#8221; /&gt;</p>
<p>&lt;entry key=&#8221;passwordType&#8221; value=&#8221;PasswordText&#8221; /&gt;</p>
<p>&lt;entry key=&#8221;enableNamespacePrefixOptimization&#8221;</p>
<p>value=&#8221;true&#8221; /&gt;</p>
<p>&lt;entry key=&#8221;disablePrettyXML&#8221; value=&#8221;true&#8221; /&gt;</p>
<p>&lt;entry key=&#8221;sendXsiTypes&#8221; value=&#8221;true&#8221; /&gt;</p>
<p>&lt;entry key=&#8221;sendMultiRefs&#8221; value=&#8221;true&#8221; /&gt;</p>
<p>&lt;entry key=&#8221;sendXMLDeclaration&#8221; value=&#8221;true&#8221; /&gt;</p>
<p>&lt;entry key=&#8221;passwordCallbackClass&#8221;</p>
<p>value=&#8221;com.sungard.cxf.example.server.ServerSecurityEnvironmentHandler&#8221; /&gt;</p>
<p>&lt;entry key=&#8221;signaturePropFile&#8221;</p>
<p>value=&#8221;server_sign.properties&#8221;&gt;</p>
<p>&lt;/entry&gt;</p>
<p>&lt;/map&gt;</p>
<p>&lt;/property&gt;</p>
<p>&lt;/bean&gt;</p>
<p>&lt;bean</p>
<p>/&gt;</p>
<p>&lt;/jaxws:inInterceptors&gt;</p>
<p>&lt;/jaxws:endpoint&gt;</p>
<p>&lt;/beans&gt;</p>
<p>Step 13: Create server_sign.properties under WEB-INF\classes folder to mention private keystore file details.</p>
<p>org.apache.ws.security.crypto.provider=org.apache.ws.security.components.crypto.Merlin</p>
<p>org.apache.ws.security.crypto.merlin.keystore.type=jks</p>
<p>org.apache.ws.security.crypto.merlin.keystore.password=changeit</p>
<p>org.apache.ws.security.crypto.merlin.file=server-keystore.jks</p>
<p>Step 14: Copy all keystore and certificate files under WEB-INF\classes folder.</p>
<p>Step 15: Create web.xml file</p>
<p>&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;ISO-8859-1&#8243;?&gt;</p>
<p>&lt;!DOCTYPE web-app</p>
<p>PUBLIC &#8220;-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN&#8221;</p>
<p>&#8220;http://java.sun.com/dtd/web-app_2_3.dtd&#8221;&gt;</p>
<p>&lt;web-app&gt;</p>
<p>&lt;context-param&gt;</p>
<p>&lt;param-name&gt;contextConfigLocation&lt;/param-name&gt;</p>
<p>&lt;param-value&gt;WEB-INF/beans.xml&lt;/param-value&gt;</p>
<p>&lt;/context-param&gt;</p>
<p>&lt;listener&gt;</p>
<p>&lt;listener-class&gt;</p>
<p>org.springframework.web.context.ContextLoaderListener</p>
<p>&lt;/listener-class&gt;</p>
<p>&lt;/listener&gt;</p>
<p>&lt;servlet&gt;</p>
<p>&lt;servlet-name&gt;CXFServlet&lt;/servlet-name&gt;</p>
<p>&lt;display-name&gt;CXF Servlet&lt;/display-name&gt;</p>
<p>&lt;servlet-class&gt;</p>
<p>org.apache.cxf.transport.servlet.CXFServlet</p>
<p>&lt;/servlet-class&gt;</p>
<p>&lt;load-on-startup&gt;1&lt;/load-on-startup&gt;</p>
<p>&lt;/servlet&gt;</p>
<p>&lt;servlet-mapping&gt;</p>
<p>&lt;servlet-name&gt;CXFServlet&lt;/servlet-name&gt;</p>
<p>&lt;url-pattern&gt;/*&lt;/url-pattern&gt;</p>
<p>&lt;/servlet-mapping&gt;</p>
<p>&lt;/web-app&gt;</p>
<p>Step 16: Create ant folder inside project. And Create build.xml file inside ant folder.</p>
<p>&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;UTF-8&#8243;?&gt;</p>
<p>&lt;project basedir=&#8221;../&#8221; default=&#8221;archive&#8221;&gt;</p>
<p>&lt;target name=&#8221;archive&#8221;&gt;</p>
<p>&lt;jar destfile=&#8221;samlnormalsecurity.war&#8221;&gt;</p>
<p>&lt;fileset dir=&#8221;${basedir}&#8221;&gt;</p>
<p>&lt;include name=&#8221;**/*.class&#8221; /&gt;</p>
<p>&lt;include name=&#8221;**/*.jks*&#8221; /&gt;</p>
<p>&lt;include name=&#8221;**/*.properties*&#8221; /&gt;</p>
<p>&lt;/fileset&gt;</p>
<p>&lt;fileset dir=&#8221;${basedir}&#8221;&gt;</p>
<p>&lt;include name=&#8221;**/*.jar&#8221; /&gt;</p>
<p>&lt;/fileset&gt;</p>
<p>&lt;fileset dir=&#8221;${basedir}&#8221;&gt;</p>
<p>&lt;include name=&#8221;**/*.xml&#8221; /&gt;</p>
<p>&lt;exclude name=&#8221;**/*build*&#8221; /&gt;</p>
<p>&lt;/fileset&gt;</p>
<p>&lt;/jar&gt;</p>
<p>&lt;/target&gt;</p>
<p>&lt;/project&gt;</p>
<p>Step 17: Run build.xml using Ant.</p>
<p>Step 18: Deploy samlnormalsecurity.war into Web/Application Server (Tomcat/JBoss).</p>
<p>Step 19: Verify application deployed successfully or by using following url.<br />
<a href="http://localhost:8080/samlnormalsecurity/HelloService?wsdl">http://localhost:8080/samlnormalsecurity/HelloService?wsdl</a></p>
<p>Step 20: Browser will show wsdl file our web service.</p>
<p>&nbsp;</p>
<h2>Creating Client Application.</h2>
<p>Step 1: Create New Java project in Eclipse</p>
<p>Step 2: Create folder Structure as like above application</p>
<p>Step 3: Use same jar files used for Server application.</p>
<p>Step 4: Set all the jars files into classpath.</p>
<p>Step 5: Create Remote Interface in client (IHello.java) (You can use wsdl2java for creating same)</p>
<p>package com.sungard.cxf.example.server;</p>
<p>import javax.jws.WebService;</p>
<p>@WebService</p>
<p>public interface IHello {</p>
<p>public String sayHello(String value);</p>
<p>}</p>
<p>Step 6: Create ClientSecurityEnvironmentHandler.java for handling soap request in client side. Here you have set the password what you are given client alias. You have tomention client ketstore passwords also here.</p>
<p>private String keyStorePassword = &#8220;changeit&#8221;;</p>
<p>private String trustStorePassword = &#8220;changeit&#8221;;<strong> </strong></p>
<p><strong> </strong></p>
<p>else if (callbacks[i] instanceof WSPasswordCallback) {</p>
<p>WSPasswordCallback cb = (WSPasswordCallback) callbacks[i];</p>
<p>System.out.println(&#8220;cb.getPassword()&#8221; + cb.getPassword());</p>
<p>cb.setPassword(&#8220;changeit&#8221;);</p>
<p>}</p>
<p>package com.sungard.cxf.example.server;</p>
<p>import java.io.IOException;</p>
<p>import java.math.BigInteger;</p>
<p>import java.net.URL;</p>
<p>import java.security.KeyStore;</p>
<p>import java.security.PrivateKey;</p>
<p>import java.security.cert.CertPathBuilder;</p>
<p>import java.security.cert.Certificate;</p>
<p>import java.security.cert.CertificateExpiredException;</p>
<p>import java.security.cert.CertificateNotYetValidException;</p>
<p>import java.security.cert.PKIXBuilderParameters;</p>
<p>import java.security.cert.PKIXCertPathBuilderResult;</p>
<p>import java.security.cert.X509CertSelector;</p>
<p>import java.security.cert.X509Certificate;</p>
<p>import java.text.SimpleDateFormat;</p>
<p>import java.util.Arrays;</p>
<p>import java.util.Calendar;</p>
<p>import java.util.Date;</p>
<p>import java.util.Enumeration;</p>
<p>import java.util.GregorianCalendar;</p>
<p>import javax.security.auth.callback.Callback;</p>
<p>import javax.security.auth.callback.CallbackHandler;</p>
<p>import javax.security.auth.callback.UnsupportedCallbackException;</p>
<p>import javax.xml.ws.BindingProvider;</p>
<p>import org.apache.ws.security.WSPasswordCallback;</p>
<p>import com.sun.xml.wss.impl.callback.CertificateValidationCallback;</p>
<p>import com.sun.xml.wss.impl.callback.DecryptionKeyCallback;</p>
<p>import com.sun.xml.wss.impl.callback.EncryptionKeyCallback;</p>
<p>import com.sun.xml.wss.impl.callback.PasswordCallback;</p>
<p>import com.sun.xml.wss.impl.callback.PasswordValidationCallback;</p>
<p>import com.sun.xml.wss.impl.callback.SignatureKeyCallback;</p>
<p>import com.sun.xml.wss.impl.callback.SignatureVerificationKeyCallback;</p>
<p>import com.sun.xml.wss.impl.callback.TimestampValidationCallback;</p>
<p>import com.sun.xml.wss.impl.callback.UsernameCallback;</p>
<p>import com.sun.xml.wss.impl.misc.SecurityUtil;</p>
<p>/**</p>
<p>* A sample implementation of a CallbackHandler.</p>
<p>*/</p>
<p>public class ClientSecurityEnvironmentHandler implements CallbackHandler {</p>
<p>private KeyStore keyStore;</p>
<p>private KeyStore trustStore;</p>
<p>private String keyStorePassword = &#8220;changeit&#8221;;</p>
<p>private String trustStorePassword = &#8220;changeit&#8221;;</p>
<p>private static final UnsupportedCallbackException unsupported = new UnsupportedCallbackException(</p>
<p>null, &#8220;Unsupported Callback Type Encountered&#8221;);</p>
<p>public ClientSecurityEnvironmentHandler() throws Exception {</p>
<p>System.out.println(&#8220;Entered::ClientSecurityEnvironmentHandler&#8221;);</p>
<p>initTrustStore();</p>
<p>initKeyStore();</p>
<p>System.out.println(&#8220;Leaving::ClientSecurityEnvironmentHandler&#8221;);</p>
<p>}</p>
<p>public void handle(Callback[] callbacks) throws IOException,</p>
<p>UnsupportedCallbackException {</p>
<p>System.out.println(&#8220;Entered::ClientSecurityEnvironmentHandler::handle&#8221;);</p>
<p>for (int i = 0; i &lt; callbacks.length; i++) {</p>
<p>if (callbacks[i] instanceof PasswordValidationCallback) {</p>
<p>PasswordValidationCallback cb = (PasswordValidationCallback) callbacks[i];</p>
<p>if (cb.getRequest() instanceof PasswordValidationCallback.PlainTextPasswordRequest) {</p>
<p>cb.setValidator(new PlainTextPasswordValidator());</p>
<p>} else if (cb.getRequest() instanceof PasswordValidationCallback.DigestPasswordRequest) {</p>
<p>PasswordValidationCallback.DigestPasswordRequest request = (PasswordValidationCallback.DigestPasswordRequest) cb</p>
<p>.getRequest();</p>
<p>String username = request.getUsername();</p>
<p>if (&#8220;Ron&#8221;.equals(username)) {</p>
<p>request.setPassword(&#8220;noR&#8221;);</p>
<p>cb</p>
<p>.setValidator(new PasswordValidationCallback.DigestPasswordValidator());</p>
<p>}</p>
<p>} else {</p>
<p>System.out</p>
<p>.println(&#8220;ClientSecurityEnvironmentHandler::Handle::1&#8243;);</p>
<p>throw unsupported;</p>
<p>}</p>
<p>} else if (callbacks[i] instanceof TimestampValidationCallback) {</p>
<p>TimestampValidationCallback cb = (TimestampValidationCallback) callbacks[i];</p>
<p>cb.setValidator(new DefaultTimestampValidator());</p>
<p>} else if (callbacks[i] instanceof SignatureVerificationKeyCallback) {</p>
<p>SignatureVerificationKeyCallback cb = (SignatureVerificationKeyCallback) callbacks[i];</p>
<p>if (cb.getRequest() instanceof SignatureVerificationKeyCallback.X509SubjectKeyIdentifierBasedRequest) {</p>
<p>// subject keyid request</p>
<p>SignatureVerificationKeyCallback.X509SubjectKeyIdentifierBasedRequest request = (SignatureVerificationKeyCallback.X509SubjectKeyIdentifierBasedRequest) cb</p>
<p>.getRequest();</p>
<p>X509Certificate cert = getCertificateFromTrustStore(request</p>
<p>.getSubjectKeyIdentifier());</p>
<p>request.setX509Certificate(cert);</p>
<p>} else if (cb.getRequest() instanceof SignatureVerificationKeyCallback.X509IssuerSerialBasedRequest) {</p>
<p>// issuer serial request</p>
<p>SignatureVerificationKeyCallback.X509IssuerSerialBasedRequest request = (SignatureVerificationKeyCallback.X509IssuerSerialBasedRequest) cb</p>
<p>.getRequest();</p>
<p>X509Certificate cert = getCertificateFromTrustStore(request</p>
<p>.getIssuerName(), request.getSerialNumber());</p>
<p>request.setX509Certificate(cert);</p>
<p>} else {</p>
<p>System.out</p>
<p>.println(&#8220;ClientSecurityEnvironmentHandler::Handle::2&#8243;);</p>
<p>throw unsupported;</p>
<p>}</p>
<p>} else if (callbacks[i] instanceof SignatureKeyCallback) {</p>
<p>SignatureKeyCallback cb = (SignatureKeyCallback) callbacks[i];</p>
<p>if (cb.getRequest() instanceof SignatureKeyCallback.DefaultPrivKeyCertRequest) {</p>
<p>// default priv key cert req</p>
<p>SignatureKeyCallback.DefaultPrivKeyCertRequest request = (SignatureKeyCallback.DefaultPrivKeyCertRequest) cb</p>
<p>.getRequest();</p>
<p>getDefaultPrivKeyCert(request);</p>
<p>} else if (cb.getRequest() instanceof SignatureKeyCallback.AliasPrivKeyCertRequest) {</p>
<p>SignatureKeyCallback.AliasPrivKeyCertRequest request = (SignatureKeyCallback.AliasPrivKeyCertRequest) cb</p>
<p>.getRequest();</p>
<p>String alias = request.getAlias();</p>
<p>try {</p>
<p>X509Certificate cert = (X509Certificate) keyStore</p>
<p>.getCertificate(alias);</p>
<p>request.setX509Certificate(cert);</p>
<p>// Assuming key passwords same as the keystore password</p>
<p>PrivateKey privKey = (PrivateKey) keyStore.getKey(</p>
<p>alias, keyStorePassword.toCharArray());</p>
<p>request.setPrivateKey(privKey);</p>
<p>} catch (Exception e) {</p>
<p>throw new IOException(e.getMessage());</p>
<p>}</p>
<p>} else {</p>
<p>System.out</p>
<p>.println(&#8220;ClientSecurityEnvironmentHandler::Handle::3&#8243;);</p>
<p>throw unsupported;</p>
<p>}</p>
<p>} else if (callbacks[i] instanceof DecryptionKeyCallback) {</p>
<p>DecryptionKeyCallback cb = (DecryptionKeyCallback) callbacks[i];</p>
<p>if (cb.getRequest() instanceof DecryptionKeyCallback.X509SubjectKeyIdentifierBasedRequest) {</p>
<p>DecryptionKeyCallback.X509SubjectKeyIdentifierBasedRequest request = (DecryptionKeyCallback.X509SubjectKeyIdentifierBasedRequest) cb</p>
<p>.getRequest();</p>
<p>byte[] ski = request.getSubjectKeyIdentifier();</p>
<p>PrivateKey privKey = getPrivateKey(ski);</p>
<p>request.setPrivateKey(privKey);</p>
<p>} else if (cb.getRequest() instanceof DecryptionKeyCallback.X509IssuerSerialBasedRequest) {</p>
<p>DecryptionKeyCallback.X509IssuerSerialBasedRequest request = (DecryptionKeyCallback.X509IssuerSerialBasedRequest) cb</p>
<p>.getRequest();</p>
<p>String issuerName = request.getIssuerName();</p>
<p>BigInteger serialNumber = request.getSerialNumber();</p>
<p>PrivateKey privKey = getPrivateKey(issuerName, serialNumber);</p>
<p>request.setPrivateKey(privKey);</p>
<p>} else if (cb.getRequest() instanceof DecryptionKeyCallback.X509CertificateBasedRequest) {</p>
<p>DecryptionKeyCallback.X509CertificateBasedRequest request = (DecryptionKeyCallback.X509CertificateBasedRequest) cb</p>
<p>.getRequest();</p>
<p>X509Certificate cert = request.getX509Certificate();</p>
<p>PrivateKey privKey = getPrivateKey(cert);</p>
<p>request.setPrivateKey(privKey);</p>
<p>} else {</p>
<p>System.out</p>
<p>.println(&#8220;ClientSecurityEnvironmentHandler::Handle::4&#8243;);</p>
<p>throw unsupported;</p>
<p>}</p>
<p>} else if (callbacks[i] instanceof EncryptionKeyCallback) {</p>
<p>EncryptionKeyCallback cb = (EncryptionKeyCallback) callbacks[i];</p>
<p>if (cb.getRequest() instanceof EncryptionKeyCallback.AliasX509CertificateRequest) {</p>
<p>EncryptionKeyCallback.AliasX509CertificateRequest request = (EncryptionKeyCallback.AliasX509CertificateRequest) cb</p>
<p>.getRequest();</p>
<p>String alias = request.getAlias();</p>
<p>if (alias == null) {</p>
<p>// plugin code here to read the cert from the</p>
<p>// ThreadLocal</p>
<p>} else {</p>
<p>try {</p>
<p>X509Certificate cert = (X509Certificate) trustStore</p>
<p>.getCertificate(alias);</p>
<p>request.setX509Certificate(cert);</p>
<p>} catch (Exception e) {</p>
<p>throw new IOException(e.getMessage());</p>
<p>}</p>
<p>}</p>
<p>} else {</p>
<p>System.out</p>
<p>.println(&#8220;ClientSecurityEnvironmentHandler::Handle::5&#8243;);</p>
<p>throw unsupported;</p>
<p>}</p>
<p>} else if (callbacks[i] instanceof CertificateValidationCallback) {</p>
<p>CertificateValidationCallback cb = (CertificateValidationCallback) callbacks[i];</p>
<p>cb.setValidator(new X509CertificateValidatorImpl());</p>
<p>} else if (callbacks[i] instanceof UsernameCallback) {</p>
<p>UsernameCallback cb = (UsernameCallback) callbacks[i];</p>
<p>String username = (String) cb.getRuntimeProperties().get(</p>
<p>BindingProvider.USERNAME_PROPERTY);</p>
<p>System.out.println(&#8220;Got Username&#8230;&#8230;&#8230; : &#8221; + username);</p>
<p>cb.setUsername(username);</p>
<p>} else if (callbacks[i] instanceof PasswordCallback) {</p>
<p>PasswordCallback cb = (PasswordCallback) callbacks[i];</p>
<p>String password = (String) cb.getRuntimeProperties().get(</p>
<p>BindingProvider.PASSWORD_PROPERTY);</p>
<p>System.out.println(&#8220;Got Password&#8230;&#8230;&#8230; : &#8221; + password);</p>
<p>cb.setPassword(password);</p>
<p>} else if (callbacks[i] instanceof WSPasswordCallback) {</p>
<p>WSPasswordCallback cb = (WSPasswordCallback) callbacks[i];</p>
<p>System.out.println(&#8220;cb.getPassword()&#8221; + cb.getPassword());</p>
<p>cb.setPassword(&#8220;changeit&#8221;);</p>
<p>} else {</p>
<p>System.out.println(callbacks[i].getClass().getName());</p>
<p>System.out</p>
<p>.println(&#8220;ClientSecurityEnvironmentHandler::Handle::6&#8243;);</p>
<p>throw unsupported;</p>
<p>}</p>
<p>}</p>
<p>}</p>
<p>private void initTrustStore() throws IOException {</p>
<p>try {</p>
<p>URL truststoreURL = SecurityUtil</p>
<p>.loadFromClasspath(&#8220;client-truststore.jks&#8221;);</p>
<p>trustStore = KeyStore.getInstance(&#8220;JKS&#8221;);</p>
<p>trustStore.load(truststoreURL.openStream(), trustStorePassword</p>
<p>.toCharArray());</p>
<p>} catch (Exception e) {</p>
<p>throw new IOException(e.getMessage());</p>
<p>}</p>
<p>}</p>
<p>private void initKeyStore() throws IOException {</p>
<p>try {</p>
<p>URL keystoreURL = SecurityUtil</p>
<p>.loadFromClasspath(&#8220;client-keystore.jks&#8221;);</p>
<p>keyStore = KeyStore.getInstance(&#8220;JKS&#8221;);</p>
<p>keyStore.load(keystoreURL.openStream(), keyStorePassword</p>
<p>.toCharArray());</p>
<p>} catch (Exception e) {</p>
<p>throw new IOException(e.getMessage());</p>
<p>}</p>
<p>}</p>
<p>private X509Certificate getCertificateFromTrustStore(byte[] ski)</p>
<p>throws IOException {</p>
<p>try {</p>
<p>Enumeration aliases = trustStore.aliases();</p>
<p>while (aliases.hasMoreElements()) {</p>
<p>String alias = (String) aliases.nextElement();</p>
<p>Certificate cert = trustStore.getCertificate(alias);</p>
<p>if (cert == null || !&#8221;X.509&#8243;.equals(cert.getType())) {</p>
<p>continue;</p>
<p>}</p>
<p>X509Certificate x509Cert = (X509Certificate) cert;</p>
<p>byte[] keyId = getSubjectKeyIdentifier(x509Cert);</p>
<p>if (keyId == null) {</p>
<p>// Cert does not contain a key identifier</p>
<p>continue;</p>
<p>}</p>
<p>if (Arrays.equals(ski, keyId)) {</p>
<p>return x509Cert;</p>
<p>}</p>
<p>}</p>
<p>} catch (Exception e) {</p>
<p>throw new IOException(e.getMessage());</p>
<p>}</p>
<p>return null;</p>
<p>}</p>
<p>private X509Certificate getCertificateFromTrustStore(String issuerName,</p>
<p>BigInteger serialNumber) throws IOException {</p>
<p>try {</p>
<p>Enumeration aliases = trustStore.aliases();</p>
<p>while (aliases.hasMoreElements()) {</p>
<p>String alias = (String) aliases.nextElement();</p>
<p>Certificate cert = trustStore.getCertificate(alias);</p>
<p>if (cert == null || !&#8221;X.509&#8243;.equals(cert.getType())) {</p>
<p>continue;</p>
<p>}</p>
<p>X509Certificate x509Cert = (X509Certificate) cert;</p>
<p>String thisIssuerName = org.apache.xml.security.utils.RFC2253Parser</p>
<p>.normalize(x509Cert.getIssuerDN().getName());</p>
<p>BigInteger thisSerialNumber = x509Cert.getSerialNumber();</p>
<p>if (thisIssuerName.equals(issuerName)</p>
<p>&amp;&amp; thisSerialNumber.equals(serialNumber)) {</p>
<p>return x509Cert;</p>
<p>}</p>
<p>}</p>
<p>} catch (Exception e) {</p>
<p>throw new IOException(e.getMessage());</p>
<p>}</p>
<p>return null;</p>
<p>}</p>
<p>public PrivateKey getPrivateKey(byte[] ski) throws IOException {</p>
<p>try {</p>
<p>Enumeration aliases = keyStore.aliases();</p>
<p>while (aliases.hasMoreElements()) {</p>
<p>String alias = (String) aliases.nextElement();</p>
<p>if (!keyStore.isKeyEntry(alias))</p>
<p>continue;</p>
<p>Certificate cert = keyStore.getCertificate(alias);</p>
<p>if (cert == null || !&#8221;X.509&#8243;.equals(cert.getType())) {</p>
<p>continue;</p>
<p>}</p>
<p>X509Certificate x509Cert = (X509Certificate) cert;</p>
<p>byte[] keyId = getSubjectKeyIdentifier(x509Cert);</p>
<p>if (keyId == null) {</p>
<p>// Cert does not contain a key identifier</p>
<p>continue;</p>
<p>}</p>
<p>if (Arrays.equals(ski, keyId)) {</p>
<p>// Asuumed key password same as the keystore password</p>
<p>return (PrivateKey) keyStore.getKey(alias, keyStorePassword</p>
<p>.toCharArray());</p>
<p>}</p>
<p>}</p>
<p>} catch (Exception e) {</p>
<p>throw new IOException(e.getMessage());</p>
<p>}</p>
<p>return null;</p>
<p>}</p>
<p>public PrivateKey getPrivateKey(String issuerName, BigInteger serialNumber)</p>
<p>throws IOException {</p>
<p>try {</p>
<p>Enumeration aliases = keyStore.aliases();</p>
<p>while (aliases.hasMoreElements()) {</p>
<p>String alias = (String) aliases.nextElement();</p>
<p>if (!keyStore.isKeyEntry(alias))</p>
<p>continue;</p>
<p>Certificate cert = keyStore.getCertificate(alias);</p>
<p>if (cert == null || !&#8221;X.509&#8243;.equals(cert.getType())) {</p>
<p>continue;</p>
<p>}</p>
<p>X509Certificate x509Cert = (X509Certificate) cert;</p>
<p>String thisIssuerName = org.apache.xml.security.utils.RFC2253Parser</p>
<p>.normalize(x509Cert.getIssuerDN().getName());</p>
<p>BigInteger thisSerialNumber = x509Cert.getSerialNumber();</p>
<p>if (thisIssuerName.equals(issuerName)</p>
<p>&amp;&amp; thisSerialNumber.equals(serialNumber)) {</p>
<p>return (PrivateKey) keyStore.getKey(alias, keyStorePassword</p>
<p>.toCharArray());</p>
<p>}</p>
<p>}</p>
<p>} catch (Exception e) {</p>
<p>throw new IOException(e.getMessage());</p>
<p>}</p>
<p>return null;</p>
<p>}</p>
<p>public PrivateKey getPrivateKey(X509Certificate certificate)</p>
<p>throws IOException {</p>
<p>try {</p>
<p>Enumeration aliases = keyStore.aliases();</p>
<p>while (aliases.hasMoreElements()) {</p>
<p>String alias = (String) aliases.nextElement();</p>
<p>if (!keyStore.isKeyEntry(alias))</p>
<p>continue;</p>
<p>Certificate cert = keyStore.getCertificate(alias);</p>
<p>if (cert != null &amp;&amp; cert.equals(certificate))</p>
<p>return (PrivateKey) keyStore.getKey(alias, keyStorePassword</p>
<p>.toCharArray());</p>
<p>}</p>
<p>} catch (Exception e) {</p>
<p>throw new IOException(e.getMessage());</p>
<p>}</p>
<p>return null;</p>
<p>}</p>
<p>private void getDefaultPrivKeyCert(</p>
<p>SignatureKeyCallback.DefaultPrivKeyCertRequest request)</p>
<p>throws IOException {</p>
<p>String uniqueAlias = null;</p>
<p>try {</p>
<p>Enumeration aliases = keyStore.aliases();</p>
<p>while (aliases.hasMoreElements()) {</p>
<p>String currentAlias = (String) aliases.nextElement();</p>
<p>if (keyStore.isKeyEntry(currentAlias)) {</p>
<p>Certificate thisCertificate = keyStore</p>
<p>.getCertificate(currentAlias);</p>
<p>if (thisCertificate != null) {</p>
<p>if (thisCertificate instanceof X509Certificate) {</p>
<p>if (uniqueAlias == null) {</p>
<p>uniqueAlias = currentAlias;</p>
<p>} else {</p>
<p>// Not unique!</p>
<p>uniqueAlias = null;</p>
<p>break;</p>
<p>}</p>
<p>}</p>
<p>}</p>
<p>}</p>
<p>}</p>
<p>if (uniqueAlias != null) {</p>
<p>request.setX509Certificate((X509Certificate) keyStore</p>
<p>.getCertificate(uniqueAlias));</p>
<p>request.setPrivateKey((PrivateKey) keyStore.getKey(uniqueAlias,</p>
<p>keyStorePassword.toCharArray()));</p>
<p>}</p>
<p>} catch (Exception e) {</p>
<p>throw new IOException(e.getMessage());</p>
<p>}</p>
<p>}</p>
<p>private static byte[] getSubjectKeyIdentifier(X509Certificate cert) {</p>
<p>String SUBJECT_KEY_IDENTIFIER_OID = &#8220;2.5.29.14&#8243;;</p>
<p>byte[] subjectKeyIdentifier = cert</p>
<p>.getExtensionValue(SUBJECT_KEY_IDENTIFIER_OID);</p>
<p>if (subjectKeyIdentifier == null)</p>
<p>return null;</p>
<p>try {</p>
<p>sun.security.x509.KeyIdentifier keyId = null;</p>
<p>sun.security.util.DerValue derVal = new sun.security.util.DerValue(</p>
<p>new sun.security.util.DerInputStream(subjectKeyIdentifier)</p>
<p>.getOctetString());</p>
<p>keyId = new sun.security.x509.KeyIdentifier(derVal.getOctetString());</p>
<p>return keyId.getIdentifier();</p>
<p>} catch (NoClassDefFoundError ncde) {</p>
<p>if (subjectKeyIdentifier == null)</p>
<p>return null;</p>
<p>byte[] dest = new byte[subjectKeyIdentifier.length - 4];</p>
<p>System.arraycopy(subjectKeyIdentifier, 4, dest, 0,</p>
<p>subjectKeyIdentifier.length &#8211; 4);</p>
<p>return dest;</p>
<p>} catch (java.io.IOException ex) {</p>
<p>// ignore</p>
<p>return null;</p>
<p>}</p>
<p>}</p>
<p>private class PlainTextPasswordValidator implements</p>
<p>PasswordValidationCallback.PasswordValidator {</p>
<p>public boolean validate(PasswordValidationCallback.Request request)</p>
<p>throws PasswordValidationCallback.PasswordValidationException {</p>
<p>PasswordValidationCallback.PlainTextPasswordRequest plainTextRequest = (PasswordValidationCallback.PlainTextPasswordRequest) request;</p>
<p>if (&#8220;Ron&#8221;.equals(plainTextRequest.getUsername())</p>
<p>&amp;&amp; &#8220;noR&#8221;.equals(plainTextRequest.getPassword())) {</p>
<p>return true;</p>
<p>}</p>
<p>return false;</p>
<p>}</p>
<p>}</p>
<p>private class DefaultTimestampValidator implements</p>
<p>TimestampValidationCallback.TimestampValidator {</p>
<p>public void validate(TimestampValidationCallback.Request request)</p>
<p>throws TimestampValidationCallback.TimestampValidationException {</p>
<p>// validate timestamp creation and expiration time.</p>
<p>TimestampValidationCallback.UTCTimestampRequest utcTimestampRequest = (TimestampValidationCallback.UTCTimestampRequest) request;</p>
<p>SimpleDateFormat calendarFormatter2 = new SimpleDateFormat(</p>
<p>&#8220;yyyy-MM-dd&#8217;T'HH:mm:ss&#8217;Z'&#8221;);</p>
<p>SimpleDateFormat calendarFormatter1 = new SimpleDateFormat(</p>
<p>&#8220;yyyy-MM-dd&#8217;T'HH:mm:ss&#8217;.'SSS&#8217;Z'&#8221;);</p>
<p>Date created = null;</p>
<p>Date expired = null;</p>
<p>try {</p>
<p>try {</p>
<p>created = calendarFormatter1.parse(utcTimestampRequest</p>
<p>.getCreated());</p>
<p>if (utcTimestampRequest.getExpired() != null)</p>
<p>expired = calendarFormatter1.parse(utcTimestampRequest</p>
<p>.getExpired());</p>
<p>} catch (java.text.ParseException pe) {</p>
<p>created = calendarFormatter2.parse(utcTimestampRequest</p>
<p>.getCreated());</p>
<p>if (utcTimestampRequest.getExpired() != null)</p>
<p>expired = calendarFormatter2.parse(utcTimestampRequest</p>
<p>.getExpired());</p>
<p>}</p>
<p>} catch (java.text.ParseException pe) {</p>
<p>throw new TimestampValidationCallback.TimestampValidationException(</p>
<p>pe.getMessage());</p>
<p>}</p>
<p>long maxClockSkew = utcTimestampRequest.getMaxClockSkew();</p>
<p>long timestampFreshnessLimit = utcTimestampRequest</p>
<p>.getTimestampFreshnessLimit();</p>
<p>// validate creation time</p>
<p>validateCreationTime(created, maxClockSkew, timestampFreshnessLimit);</p>
<p>// validate expiration time</p>
<p>if (expired != null)</p>
<p>validateExpirationTime(expired, maxClockSkew,</p>
<p>timestampFreshnessLimit);</p>
<p>}</p>
<p>}</p>
<p>public void validateExpirationTime(Date expires, long maxClockSkew,</p>
<p>long timestampFreshnessLimit)</p>
<p>throws TimestampValidationCallback.TimestampValidationException {</p>
<p>// System.out.println(&#8220;Validate Expiration time called&#8221;);</p>
<p>Date currentTime = getGMTDateWithSkewAdjusted(new GregorianCalendar(),</p>
<p>maxClockSkew, false);</p>
<p>if (expires.before(currentTime)) {</p>
<p>throw new TimestampValidationCallback.TimestampValidationException(</p>
<p>&#8220;The current time is ahead of the expiration time in Timestamp&#8221;);</p>
<p>}</p>
<p>}</p>
<p>public void validateCreationTime(Date created, long maxClockSkew,</p>
<p>long timestampFreshnessLimit)</p>
<p>throws TimestampValidationCallback.TimestampValidationException {</p>
<p>// System.out.println(&#8220;Validate Creation time called&#8221;);</p>
<p>Date current = getFreshnessAndSkewAdjustedDate(maxClockSkew,</p>
<p>timestampFreshnessLimit);</p>
<p>if (created.before(current)) {</p>
<p>throw new TimestampValidationCallback.TimestampValidationException(</p>
<p>&#8220;The creation time is older than &#8220;</p>
<p>+ &#8221; currenttime &#8211; timestamp-freshness-limit &#8211; max-clock-skew&#8221;);</p>
<p>}</p>
<p>Date currentTime = getGMTDateWithSkewAdjusted(new GregorianCalendar(),</p>
<p>maxClockSkew, true);</p>
<p>if (currentTime.before(created)) {</p>
<p>throw new TimestampValidationCallback.TimestampValidationException(</p>
<p>&#8220;The creation time is ahead of the current time.&#8221;);</p>
<p>}</p>
<p>}</p>
<p>private static Date getFreshnessAndSkewAdjustedDate(long maxClockSkew,</p>
<p>long timestampFreshnessLimit) {</p>
<p>Calendar c = new GregorianCalendar();</p>
<p>long offset = c.get(Calendar.ZONE_OFFSET);</p>
<p>if (c.getTimeZone().inDaylightTime(c.getTime())) {</p>
<p>offset += c.getTimeZone().getDSTSavings();</p>
<p>}</p>
<p>long beforeTime = c.getTimeInMillis();</p>
<p>long currentTime = beforeTime &#8211; offset;</p>
<p>long adjustedTime = currentTime &#8211; maxClockSkew</p>
<p>- timestampFreshnessLimit;</p>
<p>c.setTimeInMillis(adjustedTime);</p>
<p>return c.getTime();</p>
<p>}</p>
<p>private static Date getGMTDateWithSkewAdjusted(Calendar c,</p>
<p>long maxClockSkew, boolean addSkew) {</p>
<p>long offset = c.get(Calendar.ZONE_OFFSET);</p>
<p>if (c.getTimeZone().inDaylightTime(c.getTime())) {</p>
<p>offset += c.getTimeZone().getDSTSavings();</p>
<p>}</p>
<p>long beforeTime = c.getTimeInMillis();</p>
<p>long currentTime = beforeTime &#8211; offset;</p>
<p>if (addSkew)</p>
<p>currentTime = currentTime + maxClockSkew;</p>
<p>else</p>
<p>currentTime = currentTime &#8211; maxClockSkew;</p>
<p>c.setTimeInMillis(currentTime);</p>
<p>return c.getTime();</p>
<p>}</p>
<p>private class X509CertificateValidatorImpl implements</p>
<p>CertificateValidationCallback.CertificateValidator {</p>
<p>public boolean validate(X509Certificate certificate)</p>
<p>throws CertificateValidationCallback.CertificateValidationException {</p>
<p>if (isSelfCert(certificate)) {</p>
<p>return true;</p>
<p>}</p>
<p>try {</p>
<p>certificate.checkValidity();</p>
<p>} catch (CertificateExpiredException e) {</p>
<p>e.printStackTrace();</p>
<p>throw new CertificateValidationCallback.CertificateValidationException(</p>
<p>&#8220;X509Certificate Expired&#8221;, e);</p>
<p>} catch (CertificateNotYetValidException e) {</p>
<p>e.printStackTrace();</p>
<p>throw new CertificateValidationCallback.CertificateValidationException(</p>
<p>&#8220;X509Certificate not yet valid&#8221;, e);</p>
<p>}</p>
<p>X509CertSelector certSelector = new X509CertSelector();</p>
<p>certSelector.setCertificate(certificate);</p>
<p>PKIXBuilderParameters parameters;</p>
<p>CertPathBuilder builder;</p>
<p>try {</p>
<p>parameters = new PKIXBuilderParameters(trustStore, certSelector);</p>
<p>parameters.setRevocationEnabled(false);</p>
<p>builder = CertPathBuilder.getInstance(&#8220;PKIX&#8221;);</p>
<p>} catch (Exception e) {</p>
<p>e.printStackTrace();</p>
<p>throw new CertificateValidationCallback.CertificateValidationException(</p>
<p>e.getMessage(), e);</p>
<p>}</p>
<p>try {</p>
<p>PKIXCertPathBuilderResult result = (PKIXCertPathBuilderResult) builder</p>
<p>.build(parameters);</p>
<p>} catch (Exception e) {</p>
<p>e.printStackTrace();</p>
<p>return false;</p>
<p>}</p>
<p>return true;</p>
<p>}</p>
<p>private boolean isSelfCert(X509Certificate cert)</p>
<p>throws CertificateValidationCallback.CertificateValidationException {</p>
<p>try {</p>
<p>if (keyStore == null)</p>
<p>initKeyStore();</p>
<p>Enumeration aliases = keyStore.aliases();</p>
<p>while (aliases.hasMoreElements()) {</p>
<p>String alias = (String) aliases.nextElement();</p>
<p>if (keyStore.isKeyEntry(alias)) {</p>
<p>X509Certificate x509Cert = (X509Certificate) keyStore</p>
<p>.getCertificate(alias);</p>
<p>if (x509Cert != null) {</p>
<p>if (x509Cert.equals(cert))</p>
<p>return true;</p>
<p>}</p>
<p>}</p>
<p>}</p>
<p>return false;</p>
<p>} catch (Exception e) {</p>
<p>e.printStackTrace();</p>
<p>throw new CertificateValidationCallback.CertificateValidationException(</p>
<p>e.getMessage(), e);</p>
<p>}</p>
<p>}</p>
<p>}</p>
<p>private String getContainerHome() {</p>
<p>String _home = &#8220;&#8221;;</p>
<p>String fileSeparator = System.getProperty(&#8220;file.separator&#8221;);</p>
<p>String contHome = System.getProperty(&#8220;catalina.home&#8221;);</p>
<p>if (contHome != null) {</p>
<p>String isAS = System.getProperty(&#8220;com.sun.aas.instanceRoot&#8221;);</p>
<p>if (isAS != null) {</p>
<p>_home = contHome + fileSeparator + &#8220;..&#8221; + fileSeparator + &#8220;..&#8221;;</p>
<p>} else {</p>
<p>_home = contHome;</p>
<p>}</p>
<p>} else {</p>
<p>_home = System.getProperty(&#8220;jwsdp.home&#8221;);</p>
<p>if (_home == null) {</p>
<p>_home = System.getProperty(&#8220;as.home&#8221;);</p>
<p>}</p>
<p>}</p>
<p>return _home;</p>
<p>}</p>
<p>}</p>
<p>Step 7: Create the service factory (AuthServiceFactory.java), which is extremely easy since all the work was done in the Spring file:</p>
<p>package com.sungard.cxf.example.server;</p>
<p>import org.springframework.context.support.ClassPathXmlApplicationContext;</p>
<p>public final class AuthServiceFactory {</p>
<p>private static final ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(</p>
<p>new String[] { &#8220;cxfClient.xml&#8221; });</p>
<p>public AuthServiceFactory() {</p>
<p>}</p>
<p>public IHello getService() {</p>
<p>return (IHello) context.getBean(&#8220;client&#8221;);</p>
<p>}</p>
<p>}</p>
<p>Step 8: Create Client.java to invoke the service.</p>
<p>package com.sungard.cxf.example.server;</p>
<p>public final class Client {</p>
<p>private Client() {</p>
<p>}</p>
<p>public static void main(String args[]) throws Exception {</p>
<p>AuthServiceFactory af = new AuthServiceFactory();</p>
<p>IHello client1 = af.getService();</p>
<p>String response1 = client1.sayHello(&#8220;Hello&#8221;);</p>
<p>System.out.println(&#8220;Response: &#8221; + response1);</p>
<p>}</p>
<p>}</p>
<p>Step 9: Create cxfClient.xml to setup the application context for the client.</p>
<p>&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;UTF-8&#8243;?&gt;</p>
<p>&lt;beans xmlns=&#8221;http://www.springframework.org/schema/beans&#8221;</p>
<p>xmlns:xsi=&#8221;http://www.w3.org/2001/XMLSchema-instance&#8221;</p>
<p>xmlns:jaxws=&#8221;http://cxf.apache.org/jaxws&#8221;</p>
<p>xsi:schemaLocation=&#8221;http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd</p>
<p>http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd&#8221;&gt;</p>
<p>&lt;bean id=&#8221;proxyFactory&#8221;</p>
<p>&gt;</p>
<p>&lt;property name=&#8221;serviceClass&#8221;</p>
<p>value=&#8221;com.sungard.cxf.example.server.IHello&#8221; /&gt;</p>
<p>&lt;property name=&#8221;address&#8221;</p>
<p>value=&#8221;http://localhost:8080/samlnormalsecurity/HelloService&#8221; /&gt;</p>
<p>&lt;property name=&#8221;inInterceptors&#8221;&gt;</p>
<p>&lt;list&gt;</p>
<p>&lt;ref bean=&#8221;logIn&#8221; /&gt;</p>
<p>&lt;/list&gt;</p>
<p>&lt;/property&gt;</p>
<p>&lt;property name=&#8221;outInterceptors&#8221;&gt;</p>
<p>&lt;list&gt;</p>
<p>&lt;ref bean=&#8221;logOut&#8221; /&gt;</p>
<p>&lt;ref bean=&#8221;saajOut&#8221; /&gt;</p>
<p>&lt;ref bean=&#8221;wss4jOut&#8221; /&gt;</p>
<p>&lt;/list&gt;</p>
<p>&lt;/property&gt;</p>
<p>&lt;/bean&gt;</p>
<p>&lt;bean id=&#8221;client&#8221;</p>
<p>factory-bean=&#8221;proxyFactory&#8221; factory-method=&#8221;create&#8221; /&gt;</p>
<p>&lt;bean id=&#8221;logIn&#8221;</p>
<p>/&gt;</p>
<p>&lt;bean id=&#8221;logOut&#8221;</p>
<p>/&gt;</p>
<p>&lt;bean id=&#8221;saajOut&#8221;</p>
<p>/&gt;</p>
<p>&lt;bean id=&#8221;wss4jOut&#8221;</p>
<p>&gt;</p>
<p>&lt;constructor-arg&gt;</p>
<p>&lt;map&gt;</p>
<p>&lt;entry key=&#8221;action&#8221; value=&#8221;UsernameToken SAMLTokenUnsigned&#8221; /&gt;</p>
<p>&lt;entry key=&#8221;user&#8221; value=&#8221;xws-security-client&#8221; /&gt;</p>
<p>&lt;entry key=&#8221;passwordType&#8221; value=&#8221;PasswordText&#8221; /&gt;</p>
<p>&lt;entry key=&#8221;samlPropFile&#8221; value=&#8221;saml2.properties&#8221;/&gt;</p>
<p>&lt;entry key=&#8221;enableNamespacePrefixOptimization&#8221; value=&#8221;true&#8221;/&gt;</p>
<p>&lt;entry key=&#8221;disablePrettyXML&#8221; value=&#8221;true&#8221;/&gt;</p>
<p>&lt;entry key=&#8221;sendXsiTypes&#8221; value=&#8221;true&#8221;/&gt;</p>
<p>&lt;entry key=&#8221;sendMultiRefs&#8221; value=&#8221;true&#8221;/&gt;</p>
<p>&lt;entry key=&#8221;sendXMLDeclaration&#8221; value=&#8221;true&#8221;/&gt;</p>
<p>&lt;entry key=&#8221;passwordCallbackClass&#8221;</p>
<p>value=&#8221;com.sungard.cxf.example.server.ClientSecurityEnvironmentHandler&#8221; /&gt;</p>
<p>&lt;/map&gt;</p>
<p>&lt;/constructor-arg&gt;</p>
<p>&lt;/bean&gt;</p>
<p>&lt;/beans&gt;</p>
<p>Step 11:  Create client_sign.properties file under WEB-INF\classes folder. To give public keystore file details.</p>
<p>org.apache.ws.security.crypto.provider=org.apache.ws.security.components.crypto.Merlin</p>
<p>org.apache.ws.security.crypto.merlin.keystore.type=jks</p>
<p>org.apache.ws.security.crypto.merlin.keystore.password=changeit</p>
<p>org.apache.ws.security.crypto.merlin.keystore.alias=xws-security-client</p>
<p>org.apache.ws.security.crypto.merlin.file=client-keystore.jks</p>
<p>Step 12:  Create saml2.properties file under WEB-INF\classes folder. To give public keystore file details.</p>
<p>org.apache.ws.security.saml.issuerClass=org.apache.ws.security.saml.SAMLIssuerImpl</p>
<p>org.apache.ws.security.saml.issuer.cryptoProp.file=client_sign.properties</p>
<p>org.apache.ws.security.saml.issuer=www.example.com</p>
<p>org.apache.ws.security.saml.subjectNameId.name=xws-security-client</p>
<p>org.apache.ws.security.saml.subjectNameId.qualifier=www.example.com</p>
<p>org.apache.ws.security.saml.authenticationMethod=password</p>
<p>org.apache.ws.security.saml.confirmationMethod=senderVouches</p>
<p>org.apache.ws.security.saml.issuer.key.name=xws-security-client</p>
<p>org.apache.ws.security.saml.issuer.key.password=changeit</p>
<p>Step 13:  Copy keystore and certificates in WEB-INF\classes folder. (Or set it in classpath)</p>
<p>Step 14:  Run Client.java</p>
<p>You will get response like as follows.</p>
<p>Response: You SaidHello</p>
<p><em><span style="text-decoration:underline;"> </span></em></p>
<p><em><span style="text-decoration:underline;"> </span></em></p>
<p><em><span style="text-decoration:underline;">Note:</span></em></p>
<p><em> </em></p>
<p><em><span style="text-decoration:underline;">Client Side:</span></em></p>
<p><em> </em></p>
<p><em>We Set User name in client cxfClient.xml file. That is public alias name.  (We can set the same through program also and we can read it xml/properties files. We can pass the same in runtime also)</em></p>
<p><em> </em></p>
<p>&lt;entry key=&#8221;user&#8221; value=&#8221;xws-security-client&#8221; /&gt;</p>
<p><em> </em></p>
<p><em>We Set password in ClientSecurityEnvironmentHandler.java class (We can pass same in runtime also)</em></p>
<p><em> </em></p>
<p><em> // set the password for our message.</em></p>
<p><em> pc.setPassword(&#8220;changeit&#8221;);</em></p>
<p><em> </em></p>
<p><em>You can see the In &amp; Outbound Messages in Client Side. As like as follows. This will go with signature.</em></p>
<p><em> </em></p>
<p>INFO: Outbound Message</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p>Encoding: UTF-8</p>
<p>Headers: {SOAPAction=[""], Accept=[*]}</p>
<p>Messages:</p>
<p>Payload: &lt;soap:Envelope xmlns:soap=&#8221;http://schemas.xmlsoap.org/soap/envelope/&#8221;&gt;</p>
<p>&lt;soap:Header&gt;</p>
<p>&lt;wsse:Security xmlns:wsse=&#8221;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd&#8221; soap:mustUnderstand=&#8221;1&#8243;&gt;&lt;Assertion xmlns=&#8221;urn:oasis:names:tc:SAML:1.0:assertion&#8221; xmlns:saml=&#8221;urn:oasis:names:tc:SAML:1.0:assertion&#8221; xmlns:samlp=&#8221;urn:oasis:names:tc:SAML:1.0:protocol&#8221; AssertionID=&#8221;b58cef8ed07e7a8c1be2d099e73ba075&#8243; IssueInstant=&#8221;2008-04-04T05:13:59.068Z&#8221; Issuer=&#8221;www.example.com&#8221; MajorVersion=&#8221;1&#8243; MinorVersion=&#8221;1&#8243;&gt;&lt;AuthenticationStatement AuthenticationInstant=&#8221;2008-04-04T05:13:58.896Z&#8221; AuthenticationMethod=&#8221;urn:oasis:names:tc:SAML:1.0:am:password&#8221;&gt;&lt;Subject&gt;&lt;NameIdentifier NameQualifier=&#8221;www.example.com&#8221;&gt;xws-security-client&lt;/NameIdentifier&gt;&lt;SubjectConfirmation&gt;&lt;ConfirmationMethod&gt;urn:oasis:names:tc:SAML:1.0:cm:sender-vouches&lt;/ConfirmationMethod&gt;&lt;/SubjectConfirmation&gt;&lt;/Subject&gt;&lt;/AuthenticationStatement&gt;&lt;/Assertion&gt;&lt;wsse:UsernameToken xmlns:wsu=&#8221;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd&#8221; wsu:Id=&#8221;UsernameToken-24451742&#8243; xmlns:wsse=&#8221;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd&#8221;&gt;&lt;wsse:Username xmlns:wsse=&#8221;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd&#8221;&gt;xws-security-client&lt;/wsse:Username&gt;&lt;wsse:Password Type=&#8221;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText&#8221; xmlns:wsse=&#8221;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd&#8221;&gt;changeit&lt;/wsse:Password&gt;&lt;/wsse:UsernameToken&gt;&lt;/wsse:Security&gt;&lt;/soap:Header&gt;&lt;soap:Body&gt;&lt;ns1:sayHello xmlns:ns1=&#8221;http://server.example.cxf.sungard.com/&#8221;&gt;&lt;arg0&gt;Hello&lt;/arg0&gt;&lt;/ns1:sayHello&gt;&lt;/soap:Body&gt;&lt;/soap:Envelope&gt;</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p>
<p>Apr 4, 2008 10:44:10 AM org.apache.cxf.interceptor.LoggingInInterceptor logging</p>
<p>INFO: Inbound Message</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</p>
<p>Encoding: UTF-8</p>
<p>Headers: {Content-Length=[230], Date=[Fri, 04 Apr 2008 05:14:10 GMT], SOAPAction=[""], Server=[Apache-Coyote/1.1], content-type=[text/xml;charset=UTF-8]}</p>
<p>Messages:</p>
<p>Message:</p>
<p>Payload: &lt;soap:Envelope xmlns:soap=&#8221;http://schemas.xmlsoap.org/soap/envelope/&#8221;&gt;&lt;soap:Body&gt;&lt;ns1:sayHelloResponse xmlns:ns1=&#8221;http://server.example.cxf.sungard.com/&#8221;&gt;&lt;return&gt;You SaidHello&lt;/return&gt;&lt;/ns1:sayHelloResponse&gt;&lt;/soap:Body&gt;&lt;/soap:Envelope&gt;</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<em> </em></p>
<p><em><span style="text-decoration:underline;"> </span></em></p>
<p><em><span style="text-decoration:underline;"> </span></em></p>
<br />Posted in Web Services  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/peterarockiaraj.wordpress.com/63/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/peterarockiaraj.wordpress.com/63/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/peterarockiaraj.wordpress.com/63/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/peterarockiaraj.wordpress.com/63/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/peterarockiaraj.wordpress.com/63/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/peterarockiaraj.wordpress.com/63/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/peterarockiaraj.wordpress.com/63/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/peterarockiaraj.wordpress.com/63/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/peterarockiaraj.wordpress.com/63/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/peterarockiaraj.wordpress.com/63/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/peterarockiaraj.wordpress.com/63/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/peterarockiaraj.wordpress.com/63/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/peterarockiaraj.wordpress.com/63/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/peterarockiaraj.wordpress.com/63/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=peterarockiaraj.wordpress.com&amp;blog=9287010&amp;post=63&amp;subd=peterarockiaraj&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://peterarockiaraj.wordpress.com/2009/09/04/developing-cxf-ws-security-with-saml/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f6e3d599f1ab85a63c80822d5e870f6a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">peterarockiaraj</media:title>
		</media:content>
	</item>
		<item>
		<title>Developing CXF WS-Security with Signature(Certificates)</title>
		<link>http://peterarockiaraj.wordpress.com/2009/09/04/developing-cxf-ws-security-with-signaturecertificates/</link>
		<comments>http://peterarockiaraj.wordpress.com/2009/09/04/developing-cxf-ws-security-with-signaturecertificates/#comments</comments>
		<pubDate>Fri, 04 Sep 2009 09:36:32 +0000</pubDate>
		<dc:creator>Peter Arockiaraj</dc:creator>
				<category><![CDATA[Web Services]]></category>

		<guid isPermaLink="false">http://peterarockiaraj.wordpress.com/?p=59</guid>
		<description><![CDATA[Creating Server and Client Certificates For the Signature and Encryption actions, you&#8217;ll need to create a public &#38; private key for the entities involved. You can generate a key pair for the development environment via the following steps. Keep in mind these will not be signed by an external authority like Verisign Keytool is inbuild [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=peterarockiaraj.wordpress.com&amp;blog=9287010&amp;post=59&amp;subd=peterarockiaraj&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<h2>Creating Server and Client Certificates</h2>
<p>For the Signature and Encryption actions, you&#8217;ll need to create a public &amp; private key for the entities involved. You can generate a key pair for the development environment via the following steps. Keep in mind these will not be signed by an external authority like Verisign</p>
<p>Keytool is inbuild tool which is comes with jdk.</p>
<p>Step1 :  First Create private keystore by using Java Keytool.</p>
<p>keytool -genkey -alias satnewprivkey -keystore satnewprivkeystore -dname &#8220;cn=satnewprivkey&#8221; -keypass satsat -storepass satsat -keyalg RSA</p>
<p>Step 2: Create public keystore</p>
<p>keytool -genkey -alias satnewpubcert -keystore satnewpubcertkeystore -dname &#8220;cn=satnewpubcert&#8221; -keypass satsat -storepass satsat -keyalg RSA</p>
<p>Step 3: Print created private keystore by running following command.</p>
<p>keytool -list -keystore satnewprivkeystore</p>
<p>Above command will ask password. Type “satsat” (This is keystore password which we are given while creating private keystore.)</p>
<p>This will give output like as follows after giving password.</p>
<p>Enter keystore password:</p>
<p>Keystore type: JKS</p>
<p>Keystore provider: SUN</p>
<p>Your keystore contains 1 entry</p>
<p>satnewprivkey, Mar 26, 2008, PrivateKeyEntry,</p>
<p>Certificate fingerprint (MD5): 46:BB:AF:49:1B:13:45:13:DB:E8:DF:96:96:D7:F3:CD</p>
<p>Step 4: Print created public keystore by running following command.</p>
<p>keytool -list -keystore satnewpubcertkeystore</p>
<p>Above command will ask password. Type “satsat” (This is keystore password which we are given while creating public keystore.)</p>
<p>This will give output like as follows after giving password.</p>
<p>Enter keystore password:</p>
<p>Keystore type: JKS</p>
<p>Keystore provider: SUN</p>
<p>Your keystore contains 1 entry</p>
<p>satnewpubcert, Mar 26, 2008, PrivateKeyEntry,</p>
<p>Certificate fingerprint (MD5): 62:50:10:D8:3A:E8:17:56:88:8E:14:C7:86:A6:4B:4F</p>
<p>Step 5: Export private keystore file by using following command.</p>
<p>keytool -export -keystore satnewprivkeystore -alias satnewprivkey -storepass satsat &#8211;rfc</p>
<p>This will give output like as follows.</p>
<p>&#8212;&#8211;BEGIN CERTIFICATE&#8212;&#8211;</p>
<p>MIIBpzCCARCgAwIBAgIER+o+UDANBgkqhkiG9w0BAQUFADAYMRYwFAYDVQQDEw1zYXRuZXdwcml2</p>
<p>a2V5MB4XDTA4MDMyNjEyMTUxMloXDTA4MDYyNDEyMTUxMlowGDEWMBQGA1UEAxMNc2F0bmV3cHJp</p>
<p>dmtleTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAhVpc7/Zw+vxfFFmuP18/4rHP5goeKgIt</p>
<p>jP7uAyMmd4gF8cP0vjUehWOYjVOPEGyoP3K6TXS0/RKA1uUVV5Hjk3A5fFWwjSZ/SVIpKDj1ob29</p>
<p>sfojEY4aEAdLI0dqe2jy+bYpg/hU0j1R3VpYlCip39VnYfZHViC8hZj4FoLqjJMCAwEAATANBgkq</p>
<p>hkiG9w0BAQUFAAOBgQABIFTiJp5XzPpNhS/tVx4nS7X33BzaYI90hY8ZZubuj8SCybhV2fFKC+MS</p>
<p>ZtM1gvPTLEdBLVvM2yixfIRA/2yHPAX0O4Y4t0/I59eUYknI9GgNAIaDbZMGE7NqqPr8ilJBAeKq</p>
<p>P4v+IQEmI7VaX8SSpOA0wUZqs76LfhKQ1GLL9A==</p>
<p>&#8212;&#8211;END CERTIFICATE&#8212;&#8211;</p>
<p>Step 6: Make private keystore file certified by using following command.</p>
<p>keytool -selfcert -alias satnewprivkey -keystore satnewprivkeystore -keypass satsat -storepass satsat</p>
<p>Step 7: Make public keystore file certified by using following command.</p>
<p>keytool -selfcert -alias satnewpubcert -keystore satnewpubcertkeystore -keypass satsat -storepass satsat</p>
<p>Step 8: Export public keytore into private keystore file. After running following command public keystore will be exported into private keystore file.</p>
<p>keytool -export -keystore satnewpubcertkeystore -alias satnewpubcert -storepass satsat -file satnewpubcert</p>
<p>This will give output as like as follows</p>
<p>Certificate stored in file &lt;satnewpubcert&gt;</p>
<p>Step 9: Print public certificate by using following command.</p>
<p>keytool -printcert -file satnewpubcert</p>
<p>This will give output as like as follows</p>
<p>Owner: CN=satnewpubcert</p>
<p>Issuer: CN=satnewpubcert</p>
<p>Serial number: 47ea3e8e</p>
<p>Valid from: Wed Mar 26 17:46:14 GMT+05:30 2008 until: Tue Jun 24 17:46:14 GMT+05:30 2008</p>
<p>Certificate fingerprints:</p>
<p>MD5:  D6:24:38:53:47:96:C6:D6:D3:D3:6B:3E:B6:74:CD:8E</p>
<p>SHA1: C7:61:E9:6A:6E:FB:F6:B0:8B:52:C3:0F:C2:03:49:D3:1D:41:36:58</p>
<p>Signature algorithm name: SHA1withRSA</p>
<p>Version: 3</p>
<p>Step 10: Make public certificate as trusted by using following command.</p>
<p>keytool -import -alias satnewpubcert -trustcacerts -file satnewpubcert -keystore satnewprivkeystore -storepass satsat</p>
<p>This command will ask question to trust certificate give yes.</p>
<p>You will get output as like as follows.</p>
<p>Owner: CN=satnewpubcert</p>
<p>Issuer: CN=satnewpubcert</p>
<p>Serial number: 47ea3e8e</p>
<p>Valid from: Wed Mar 26 17:46:14 GMT+05:30 2008 until: Tue Jun 24 17:46:14 GMT+05:30 2008</p>
<p>Certificate fingerprints:</p>
<p>MD5:  D6:24:38:53:47:96:C6:D6:D3:D3:6B:3E:B6:74:CD:8E</p>
<p>SHA1: C7:61:E9:6A:6E:FB:F6:B0:8B:52:C3:0F:C2:03:49:D3:1D:41:36:58</p>
<p>Signature algorithm name: SHA1withRSA</p>
<p>Version: 3</p>
<p>Trust this certificate? [no]:  yes</p>
<p>Certificate was added to keystore</p>
<p>Step 11: Print created private keystore by running following command.</p>
<p>keytool -list -keystore satnewprivkeystore</p>
<p>Above command will ask password. Type “satsat” (This is keystore password which we are given while creating private keystore.)</p>
<p>This will give output like as follows after giving password. Now you can private keystore has public certificate entry also.</p>
<p>Enter keystore password:</p>
<p>Keystore type: JKS</p>
<p>Keystore provider: SUN</p>
<p>Your keystore contains 2 entries</p>
<p>satnewprivkey, Mar 26, 2008, PrivateKeyEntry,</p>
<p>Certificate fingerprint (MD5): 00:86:1C:32:26:01:00:C2:FB:15:FE:EC:B5:17:03:E2</p>
<p>satnewpubcert, Mar 26, 2008, trustedCertEntry,</p>
<p>Certificate fingerprint (MD5): D6:24:38:53:47:96:C6:D6:D3:D3:6B:3E:B6:74:CD:8E</p>
<p>Step 12: Change store type JKS by using following command.</p>
<p>keytool -list -v -keystore satnewprivkeystore -storepass satsat -storetype JKS</p>
<p>This will give output like as follows.</p>
<p>Keystore type: JKS</p>
<p>Keystore provider: SUN</p>
<p>Your keystore contains 2 entries</p>
<p>Alias name: satnewprivkey</p>
<p>Creation date: Mar 26, 2008</p>
<p>Entry type: PrivateKeyEntry</p>
<p>Certificate chain length: 1</p>
<p>Certificate[1]:</p>
<p>Owner: CN=satnewprivkey</p>
<p>Issuer: CN=satnewprivkey</p>
<p>Serial number: 47ea3e86</p>
<p>Valid from: Wed Mar 26 17:46:06 GMT+05:30 2008 until: Tue Jun 24 17:46:06 GMT+05:30 2008</p>
<p>Certificate fingerprints:</p>
<p>MD5:  00:86:1C:32:26:01:00:C2:FB:15:FE:EC:B5:17:03:E2</p>
<p>SHA1: 45:33:11:1A:5E:9D:66:C9:55:7A:73:08:64:DE:63:BD:1C:C0:F9:41</p>
<p>Signature algorithm name: SHA1withRSA</p>
<p>Version: 3</p>
<p>*******************************************</p>
<p>*******************************************</p>
<p>Alias name: satnewpubcert</p>
<p>Creation date: Mar 26, 2008</p>
<p>Entry type: trustedCertEntry</p>
<p>Owner: CN=satnewpubcert</p>
<p>Issuer: CN=satnewpubcert</p>
<p>Serial number: 47ea3e8e</p>
<p>Valid from: Wed Mar 26 17:46:14 GMT+05:30 2008 until: Tue Jun 24 17:46:14 GMT+05:30 2008</p>
<p>Certificate fingerprints:</p>
<p>MD5:  D6:24:38:53:47:96:C6:D6:D3:D3:6B:3E:B6:74:CD:8E</p>
<p>SHA1: C7:61:E9:6A:6E:FB:F6:B0:8B:52:C3:0F:C2:03:49:D3:1D:41:36:58</p>
<p>Signature algorithm name: SHA1withRSA</p>
<p>Version: 3</p>
<p>*******************************************</p>
<p>*******************************************</p>
<p><strong>Creating Server Application</strong></p>
<p>Step 1:   Download Following Jar files.</p>
<p>activation.jar</p>
<p>aopalliance-1.0.jar</p>
<p>commons-collections-3.2.jar</p>
<p>commons-lang-2.1.jar</p>
<p>commons-logging-1.1.jar</p>
<p>geronimo-activation-2.0.1.jar</p>
<p>geronimo-annotation_1.0_spec-1.1.jar</p>
<p>geronimo-javamail_1.4_mail-1.2.jar</p>
<p>geronimo-servlet_2.5_spec-1.1.jar</p>
<p>geronimo-ws-metadata_2.0_spec-1.1.1.jar</p>
<p>jaxb-api.jar</p>
<p>jaxb-api-2.0.jar</p>
<p>jaxb-impl-2.0.5.jar</p>
<p>jaxb-xjc.jar</p>
<p>jaxws-api.jar</p>
<p>mail.jar</p>
<p>neethi-2.0.jar</p>
<p>opensaml-1.0.1.jar</p>
<p>saaj-api.jar</p>
<p>saaj-impl.jar</p>
<p>spring-beans-2.0.6.jar</p>
<p>spring-context-2.0.6.jar</p>
<p>spring-core-2.0.6.jar</p>
<p>spring-web-2.0.6.jar</p>
<p>stax-api-1.0.1.jar</p>
<p>velocity-1.5.jar</p>
<p>wsdl4j-1.6.1.jar</p>
<p>wstx-asl-3.2.1.jar</p>
<p>xalan-2[1].6.0.jar</p>
<p>xalan-2[1].7.0.jar</p>
<p>xml-resolver-1.2.jar</p>
<p>xmlsec-1.2.1.jar</p>
<p>cxf-bundle-2.0.4-incubator.jar</p>
<p>XmlSchema-1.3.2.jar</p>
<p>wss4j-1.5.1.jar</p>
<p>Step 2: Create New Java project in eclipse (CXFServerSecurity).</p>
<p>Step 3: Create WEB-INF folder inside project folder.</p>
<p>Step 4: Create classes folder inside WEB-INF folder.</p>
<p>Step 5: Create lib folder inside WEB-INF folder.</p>
<p>Step 6: Copy all the jar file into lib folder.</p>
<p>Step 7: Add all jar files into classpath (In Eclipse set java build path-&gt;Libraries). Add set Default output folder into CXFServerSecurity/WEB-INF/classes</p>
<p>Step 8: Create Remote Interface IHello.java</p>
<p>package com.sungard.cxf.example.server;</p>
<p>import javax.jws.WebService;</p>
<p>@WebService</p>
<p>public interface IHello {</p>
<p>public String sayHello(String value);</p>
<p>}</p>
<p>Step 9: Create Implementation Class IHello_Impl.java</p>
<p>package com.sungard.cxf.example.server;</p>
<p>import javax.jws.WebService;</p>
<p>@WebService(endpointInterface = &#8220;com.sungard.cxf.example.server.IHello&#8221;)</p>
<p>public class IHello_Impl implements IHello {</p>
<p>public String sayHello(String value) {</p>
<p>return &#8220;You Said&#8221; + value;</p>
<p>}</p>
<p>}</p>
<p>Step 10:  Create PasswordHandler.java file to handle usernames and passwords. Here you have to give public certificate alias name for checking. Password is alias password.</p>
<p>if (pc.getIdentifer().equals(&#8220;satnewpubcert&#8221;)) {</p>
<p>pc.setPassword(&#8220;satsat&#8221;);</p>
<p>}</p>
<p>package com.sungard.cxf.example.server;</p>
<p>import java.io.IOException;</p>
<p>import javax.security.auth.callback.Callback;</p>
<p>import javax.security.auth.callback.CallbackHandler;</p>
<p>import javax.security.auth.callback.UnsupportedCallbackException;</p>
<p>import org.apache.ws.security.WSPasswordCallback;</p>
<p>public class PasswordHandler implements CallbackHandler {</p>
<p>public void handle(Callback[] callbacks) throws IOException,</p>
<p>UnsupportedCallbackException {</p>
<p>System.out.println(&#8220;Enterd PasswordHandler::handle&#8221;);</p>
<p>WSPasswordCallback pc = (WSPasswordCallback) callbacks[0];</p>
<p>if (pc.getIdentifer().equals(&#8220;satnewpubcert&#8221;)) {</p>
<p>pc.setPassword(&#8220;satsat&#8221;);</p>
<p>}</p>
<p>System.out.println(&#8220;Leaving PasswordHandler::handle&#8221;);</p>
<p>}</p>
<p>}</p>
<p>Step 11: Create Interceptor class to handle soap requests ValidateUserTokenInterceptor.java.</p>
<p>package com.sungard.cxf.example.server;</p>
<p>import java.util.Vector;</p>
<p>import org.apache.cxf.message.Message;</p>
<p>import org.apache.cxf.phase.AbstractPhaseInterceptor;</p>
<p>import org.apache.cxf.phase.Phase;</p>
<p>import org.apache.ws.security.WSSecurityEngineResult;</p>
<p>import org.apache.ws.security.WSUsernameTokenPrincipal;</p>
<p>import org.apache.ws.security.handler.WSHandlerConstants;</p>
<p>import org.apache.ws.security.handler.WSHandlerResult;</p>
<p>public class ValidateUserTokenInterceptor extends AbstractPhaseInterceptor {</p>
<p>public ValidateUserTokenInterceptor(String s) {</p>
<p>super(s);</p>
<p>}</p>
<p>public ValidateUserTokenInterceptor() {</p>
<p>super(Phase.UNMARSHAL);</p>
<p>}</p>
<p>public void handleMessage(Message message) {</p>
<p>System.out</p>
<p>.println(&#8220;Enterd ValidateUserTokenInterceptor::handleMessage&#8221;);</p>
<p>boolean userTokenValidated = false;</p>
<p>Vector result = (Vector) message</p>
<p>.getContextualProperty(WSHandlerConstants.RECV_RESULTS);</p>
<p>for (int i = 0; i &lt; result.size(); i++) {</p>
<p>WSHandlerResult res = (WSHandlerResult) result.get(i);</p>
<p>for (int j = 0; j &lt; res.getResults().size(); j++) {</p>
<p>WSSecurityEngineResult secRes = (WSSecurityEngineResult) res</p>
<p>.getResults().get(j);</p>
<p>System.out</p>
<p>.println(&#8220;ValidateUserTokenInterceptor::handleMessage::Class&#8221;</p>
<p>+ secRes.getPrincipal().getClass());</p>
<p>System.out</p>
<p>.println(&#8220;ValidateUserTokenInterceptor::handleMessage::ClassName&#8221;</p>
<p>+ secRes.getPrincipal().getClass().getName());</p>
<p>System.out</p>
<p>.println(&#8220;ValidateUserTokenInterceptor::handleMessage::Name&#8221;</p>
<p>+ secRes.getPrincipal().getName());</p>
<p>if (secRes.getPrincipal().getClass().getName().equals(</p>
<p>&#8220;org.apache.ws.security.WSUsernameTokenPrincipal&#8221;)) {</p>
<p>System.out</p>
<p>.println(&#8220;ValidateUserTokenInterceptor::handleMessage::WSUsernameTokenPrincipal&#8221;</p>
<p>+ secRes.getPrincipal().getName());</p>
<p>WSUsernameTokenPrincipal principal = (WSUsernameTokenPrincipal) secRes</p>
<p>.getPrincipal();</p>
<p>if (!principal.isPasswordDigest()</p>
<p>|| principal.getNonce() == null</p>
<p>|| principal.getPassword() == null</p>
<p>|| principal.getCreatedTime() == null) {</p>
<p>throw new RuntimeException(&#8220;Invalid Security Header&#8221;);</p>
<p>} else {</p>
<p>System.out</p>
<p>.println(&#8220;ValidateUserTokenInterceptor::handleMessage::userTokenValidated = true&#8221;);</p>
<p>userTokenValidated = true;</p>
<p>}</p>
<p>}</p>
<p>}</p>
<p>}</p>
<p>if (!userTokenValidated) {</p>
<p>throw new RuntimeException(&#8220;Security processing failed&#8221;);</p>
<p>}</p>
<p>System.out</p>
<p>.println(&#8220;Leaving ValidateUserTokenInterceptor::handleMessage&#8221;);</p>
<p>}</p>
<p>}</p>
<p>Step 12: Create beans.xml file to setup the application context for the server.</p>
<p>&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;UTF-8&#8243;?&gt;</p>
<p>&lt;beans xmlns=&#8221;http://www.springframework.org/schema/beans&#8221;</p>
<p>xmlns:xsi=&#8221;http://www.w3.org/2001/XMLSchema-instance&#8221;</p>
<p>xmlns:jaxws=&#8221;http://cxf.apache.org/jaxws&#8221;</p>
<p>xsi:schemaLocation=&#8221;</p>
<p>http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd</p>
<p>http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd&#8221;&gt;</p>
<p>&lt;import resource=&#8221;classpath:META-INF/cxf/cxf.xml&#8221; /&gt;</p>
<p>&lt;import resource=&#8221;classpath:META-INF/cxf/cxf-extension-soap.xml&#8221; /&gt;</p>
<p>&lt;import resource=&#8221;classpath:META-INF/cxf/cxf-servlet.xml&#8221; /&gt;</p>
<p>&lt;jaxws:endpoint id=&#8221;helloWorld&#8221;</p>
<p>implementor=&#8221;com.sungard.cxf.example.server.IHello_Impl&#8221;</p>
<p>address=&#8221;/HelloService&#8221;&gt;</p>
<p>&lt;jaxws:inInterceptors&gt;</p>
<p>&lt;bean id=&#8221;logIn&#8221;</p>
<p>/&gt;</p>
<p>&lt;bean id=&#8221;logOut&#8221;</p>
<p>/&gt;</p>
<p>&lt;bean</p>
<p>/&gt;</p>
<p>&lt;bean</p>
<p>&gt;</p>
<p>&lt;property name=&#8221;properties&#8221;&gt;</p>
<p>&lt;map&gt;</p>
<p>&lt;entry key=&#8221;action&#8221;</p>
<p>value=&#8221;UsernameToken Signature&#8221; /&gt;</p>
<p>&lt;entry key=&#8221;passwordType&#8221; value=&#8221;PasswordText&#8221; /&gt;</p>
<p>&lt;entry key=&#8221;passwordCallbackClass&#8221;</p>
<p>value=&#8221;com.sungard.cxf.example.server.PasswordHandler&#8221; /&gt;</p>
<p>&lt;entry key=&#8221;signaturePropFile&#8221;</p>
<p>value=&#8221;server_sign.properties&#8221;&gt;</p>
<p>&lt;/entry&gt;</p>
<p>&lt;/map&gt;</p>
<p>&lt;/property&gt;</p>
<p>&lt;/bean&gt;</p>
<p>&lt;bean</p>
<p>/&gt;</p>
<p>&lt;/jaxws:inInterceptors&gt;</p>
<p>&lt;/jaxws:endpoint&gt;</p>
<p>&lt;/beans&gt;</p>
<p>Step 13: Create server_sign.properties under WEB-INF\classes folder to mention private keystore file details.</p>
<p>org.apache.ws.security.crypto.provider=org.apache.ws.security.components.crypto.Merlin</p>
<p>org.apache.ws.security.crypto.merlin.keystore.type=jks</p>
<p>org.apache.ws.security.crypto.merlin.keystore.password=satsat</p>
<p>org.apache.ws.security.crypto.merlin.file=satnewprivkeystore</p>
<p>Step 14: Copy all keystore and certificate files under WEB-INF\classes folder.</p>
<p>Step 15: Create web.xml file</p>
<p>&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;ISO-8859-1&#8243;?&gt;</p>
<p>&lt;!DOCTYPE web-app</p>
<p>PUBLIC &#8220;-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN&#8221;</p>
<p>&#8220;http://java.sun.com/dtd/web-app_2_3.dtd&#8221;&gt;</p>
<p>&lt;web-app&gt;</p>
<p>&lt;context-param&gt;</p>
<p>&lt;param-name&gt;contextConfigLocation&lt;/param-name&gt;</p>
<p>&lt;param-value&gt;WEB-INF/beans.xml&lt;/param-value&gt;</p>
<p>&lt;/context-param&gt;</p>
<p>&lt;listener&gt;</p>
<p>&lt;listener-class&gt;</p>
<p>org.springframework.web.context.ContextLoaderListener</p>
<p>&lt;/listener-class&gt;</p>
<p>&lt;/listener&gt;</p>
<p>&lt;servlet&gt;</p>
<p>&lt;servlet-name&gt;CXFServlet&lt;/servlet-name&gt;</p>
<p>&lt;display-name&gt;CXF Servlet&lt;/display-name&gt;</p>
<p>&lt;servlet-class&gt;</p>
<p>org.apache.cxf.transport.servlet.CXFServlet</p>
<p>&lt;/servlet-class&gt;</p>
<p>&lt;load-on-startup&gt;1&lt;/load-on-startup&gt;</p>
<p>&lt;/servlet&gt;</p>
<p>&lt;servlet-mapping&gt;</p>
<p>&lt;servlet-name&gt;CXFServlet&lt;/servlet-name&gt;</p>
<p>&lt;url-pattern&gt;/*&lt;/url-pattern&gt;</p>
<p>&lt;/servlet-mapping&gt;</p>
<p>&lt;/web-app&gt;</p>
<p>Step 16: Create ant folder inside project. And Create build.xml file inside ant folder.</p>
<p>&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;UTF-8&#8243;?&gt;</p>
<p>&lt;project basedir=&#8221;../&#8221; default=&#8221;archive&#8221;&gt;</p>
<p>&lt;target name=&#8221;archive&#8221;&gt;</p>
<p>&lt;jar destfile=&#8221;securityservice.war&#8221;&gt;</p>
<p>&lt;fileset dir=&#8221;${basedir}&#8221;&gt;</p>
<p>&lt;include name=&#8221;**/*.class&#8221; /&gt;</p>
<p>&lt;include name=&#8221;**/*sat*&#8221; /&gt;</p>
<p>&lt;include name=&#8221;**/*.properties*&#8221; /&gt;</p>
<p>&lt;/fileset&gt;</p>
<p>&lt;fileset dir=&#8221;${basedir}&#8221;&gt;</p>
<p>&lt;include name=&#8221;**/*.jar&#8221; /&gt;</p>
<p>&lt;/fileset&gt;</p>
<p>&lt;fileset dir=&#8221;${basedir}&#8221;&gt;</p>
<p>&lt;include name=&#8221;**/*.xml&#8221; /&gt;</p>
<p>&lt;exclude name=&#8221;**/*build*&#8221; /&gt;</p>
<p>&lt;/fileset&gt;</p>
<p>&lt;/jar&gt;</p>
<p>&lt;/target&gt;</p>
<p>&lt;/project&gt;</p>
<p>Step 17: Run build.xml using Ant.</p>
<p>Step 18: Deploy securityservice.war into Web/Application Server (Tomcat/JBoss).</p>
<p>Step 19: Verify application deployed successfully or by using following url.<br />
<a href="http://localhost:8080/securityservice/HelloService?wsdl">http://localhost:8080/securityservice/HelloService?wsdl</a></p>
<p>Step 20: Browser will show wsdl file our web service.</p>
<p><img class="alignleft size-full wp-image-60" title="WSDL file" src="http://peterarockiaraj.files.wordpress.com/2009/09/wsdl-file4.jpg" alt="WSDL file" width="1024" height="768" /></p>
<h2>Creating Client Application.</h2>
<p>Step 1: Create New Java project in Eclipse</p>
<p>Step 2: Create folder Structure as like above application</p>
<p>Step 3: Use same jar files used for Server application.</p>
<p>Step 4: Set all the jars files into classpath.</p>
<p>Step 5: Create Remote Interface in client (IHello.java) (You can use wsdl2java for creating same)</p>
<p>package com.sungard.cxf.example.server;</p>
<p>import javax.jws.WebService;</p>
<p>@WebService</p>
<p>public interface IHello {</p>
<p>public String sayHello(String value);</p>
<p>}</p>
<p>Step 6: Create ClientPasswordCallback.java for handling soap request in client side. Here you have set the password what you are given public alias.</p>
<p align="center">pc.setPassword(&#8220;satsat&#8221;);</p>
<p>package com.sungard.cxf.example.server;</p>
<p>import java.io.IOException;</p>
<p>import javax.security.auth.callback.Callback;</p>
<p>import javax.security.auth.callback.CallbackHandler;</p>
<p>import javax.security.auth.callback.UnsupportedCallbackException;</p>
<p>import org.apache.ws.security.WSPasswordCallback;</p>
<p>public class ClientPasswordCallback implements CallbackHandler {</p>
<p>public void handle(Callback[] callbacks) throws IOException,</p>
<p>UnsupportedCallbackException {</p>
<p>WSPasswordCallback pc = (WSPasswordCallback) callbacks[0];</p>
<p>// set the password for our message.</p>
<p>pc.setPassword(&#8220;satsat&#8221;);</p>
<p>}</p>
<p>}</p>
<p>Step 7: Create the service factory (AuthServiceFactory.java), which is extremely easy since all the work was done in the Spring file:</p>
<p>package com.sungard.cxf.example.server;</p>
<p>import org.springframework.context.support.ClassPathXmlApplicationContext;</p>
<p>public final class AuthServiceFactory {</p>
<p>private static final ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(</p>
<p>new String[] { &#8220;cxfClient.xml&#8221; });</p>
<p>public AuthServiceFactory() {</p>
<p>}</p>
<p>public IHello getService() {</p>
<p>return (IHello) context.getBean(&#8220;client&#8221;);</p>
<p>}</p>
<p>}</p>
<p>Step 8: Create Client.java to invoke the service.</p>
<p>package com.sungard.cxf.example.server;</p>
<p>public final class Client {</p>
<p>private Client() {</p>
<p>}</p>
<p>public static void main(String args[]) throws Exception {</p>
<p>AuthServiceFactory af = new AuthServiceFactory();</p>
<p>IHello client1 = af.getService();</p>
<p>String response1 = client1.sayHello(&#8220;Hello&#8221;);</p>
<p>System.out.println(&#8220;Response: &#8221; + response1);</p>
<p>}</p>
<p>}</p>
<p>Step 9: Create cxfClient.xml to setup the application context for the client.</p>
<p>&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;UTF-8&#8243;?&gt;</p>
<p>&lt;beans xmlns=&#8221;http://www.springframework.org/schema/beans&#8221;</p>
<p>xmlns:xsi=&#8221;http://www.w3.org/2001/XMLSchema-instance&#8221;</p>
<p>xmlns:jaxws=&#8221;http://cxf.apache.org/jaxws&#8221;</p>
<p>xsi:schemaLocation=&#8221;http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd</p>
<p>http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd&#8221;&gt;</p>
<p>&lt;bean id=&#8221;proxyFactory&#8221;</p>
<p>&gt;</p>
<p>&lt;property name=&#8221;serviceClass&#8221;</p>
<p>value=&#8221;com.sungard.cxf.example.server.IHello&#8221; /&gt;</p>
<p>&lt;property name=&#8221;address&#8221;</p>
<p>value=&#8221;http://localhost:8080/securityservice/HelloService&#8221; /&gt;</p>
<p>&lt;property name=&#8221;inInterceptors&#8221;&gt;</p>
<p>&lt;list&gt;</p>
<p>&lt;ref bean=&#8221;logIn&#8221; /&gt;</p>
<p>&lt;/list&gt;</p>
<p>&lt;/property&gt;</p>
<p>&lt;property name=&#8221;outInterceptors&#8221;&gt;</p>
<p>&lt;list&gt;</p>
<p>&lt;ref bean=&#8221;logOut&#8221; /&gt;</p>
<p>&lt;ref bean=&#8221;saajOut&#8221; /&gt;</p>
<p>&lt;ref bean=&#8221;wss4jOut&#8221; /&gt;</p>
<p>&lt;/list&gt;</p>
<p>&lt;/property&gt;</p>
<p>&lt;/bean&gt;</p>
<p>&lt;bean id=&#8221;client&#8221;</p>
<p>factory-bean=&#8221;proxyFactory&#8221; factory-method=&#8221;create&#8221; /&gt;</p>
<p>&lt;bean id=&#8221;logIn&#8221;</p>
<p>/&gt;</p>
<p>&lt;bean id=&#8221;logOut&#8221;</p>
<p>/&gt;</p>
<p>&lt;bean id=&#8221;saajOut&#8221;</p>
<p>/&gt;</p>
<p>&lt;bean id=&#8221;wss4jOut&#8221;</p>
<p>&gt;</p>
<p>&lt;constructor-arg&gt;</p>
<p>&lt;map&gt;</p>
<p>&lt;entry key=&#8221;action&#8221; value=&#8221;UsernameToken Signature&#8221; /&gt;</p>
<p>&lt;entry key=&#8221;user&#8221; value=&#8221;satnewpubcert&#8221; /&gt;</p>
<p>&lt;entry key=&#8221;passwordType&#8221; value=&#8221;PasswordDigest&#8221; /&gt;</p>
<p>&lt;entry key=&#8221;signaturePropFile&#8221;</p>
<p>value=&#8221;client_sign.properties&#8221; /&gt;</p>
<p>&lt;entry key=&#8221;passwordCallbackClass&#8221;</p>
<p>value=&#8221;com.sungard.cxf.example.server.ClientPasswordCallback&#8221; /&gt;</p>
<p>&lt;/map&gt;</p>
<p>&lt;/constructor-arg&gt;</p>
<p>&lt;/bean&gt;</p>
<p>&lt;/beans&gt;</p>
<p>Step 11:  Create client_sign.properties file under WEB-INF\classes folder. To give public keystore file details.</p>
<p>org.apache.ws.security.crypto.provider=org.apache.ws.security.components.crypto.Merlin</p>
<p>org.apache.ws.security.crypto.merlin.keystore.type=jks</p>
<p>org.apache.ws.security.crypto.merlin.keystore.password=satsat</p>
<p>org.apache.ws.security.crypto.merlin.keystore.alias=satnewpubcert</p>
<p>org.apache.ws.security.crypto.merlin.file=satnewpubcertkeystore</p>
<p>Step 12:  Copy keystore and certificates in WEB-INF\classes folder. (Or set it in classpath)</p>
<p>Step 13:  Run Client.java</p>
<p>You will get response like as follows.</p>
<p>Response: You SaidHello</p>
<p><em><span style="text-decoration:underline;">Note:</span></em></p>
<p><em> </em></p>
<p><em><span style="text-decoration:underline;">Client Side:</span></em></p>
<p><em> </em></p>
<p><em>We Set User name in client cxfClient.xml file. That is public alias name.  (We can set the same through program also and we can read it xml/properties files. We can pass the same in runtime also)</em></p>
<p><em> </em></p>
<p><em>&lt;</em><em>entry </em><em>key</em><em>=</em><em>&#8220;user&#8221; </em><em>value</em><em>=</em><em>&#8220;satnewpubcert&#8221;</em><em>/&gt;</em><em> </em></p>
<p><em> </em></p>
<p><em>We Set password in ClientPasswordCallback.java class (We can pass same in runtime also)</em></p>
<p><em> </em></p>
<p><em> // set the password for our message.</em></p>
<p><em> pc.setPassword(&#8220;satsat&#8221;);</em></p>
<p><em> </em></p>
<p><em>You can see the In &amp; Outbound Messages in Client Side. As like as follows. This will go with signature.</em></p>
<p><em> </em></p>
<p>INFO: Outbound Message</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p>Encoding: UTF-8</p>
<p>Headers: {SOAPAction=[""], Accept=[*]}</p>
<p>Messages:</p>
<p>Payload: &lt;soap:Envelope xmlns:soap=&#8221;http://schemas.xmlsoap.org/soap/envelope/&#8221;&gt;</p>
<p>&lt;soap:Header&gt;</p>
<p>&lt;wsse:Security xmlns:wsse=&#8221;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd&#8221; soap:mustUnderstand=&#8221;1&#8243;&gt;&lt;ds:Signature xmlns:ds=&#8221;http://www.w3.org/2000/09/xmldsig#&#8221; Id=&#8221;Signature-7859095&#8243;&gt;</p>
<p>&lt;ds:SignedInfo xmlns:ds=&#8221;http://www.w3.org/2000/09/xmldsig#&#8221;&gt;</p>
<p>&lt;ds:CanonicalizationMethod Algorithm=&#8221;http://www.w3.org/2001/10/xml-exc-c14n#&#8221; xmlns:ds=&#8221;http://www.w3.org/2000/09/xmldsig#&#8221;/&gt;</p>
<p>&lt;ds:SignatureMethod Algorithm=&#8221;http://www.w3.org/2000/09/xmldsig#rsa-sha1&#8243; xmlns:ds=&#8221;http://www.w3.org/2000/09/xmldsig#&#8221;/&gt;</p>
<p>&lt;ds:Reference URI=&#8221;#id-26564976&#8243; xmlns:ds=&#8221;http://www.w3.org/2000/09/xmldsig#&#8221;&gt;</p>
<p>&lt;ds:Transforms xmlns:ds=&#8221;http://www.w3.org/2000/09/xmldsig#&#8221;&gt;</p>
<p>&lt;ds:Transform Algorithm=&#8221;http://www.w3.org/2001/10/xml-exc-c14n#&#8221; xmlns:ds=&#8221;http://www.w3.org/2000/09/xmldsig#&#8221;/&gt;</p>
<p>&lt;/ds:Transforms&gt;</p>
<p>&lt;ds:DigestMethod Algorithm=&#8221;http://www.w3.org/2000/09/xmldsig#sha1&#8243; xmlns:ds=&#8221;http://www.w3.org/2000/09/xmldsig#&#8221;/&gt;</p>
<p>&lt;ds:DigestValue xmlns:ds=&#8221;http://www.w3.org/2000/09/xmldsig#&#8221;&gt;rU2PYdKHS7wdWvzrSl4fiH90AQc=&lt;/ds:DigestValue&gt;</p>
<p>&lt;/ds:Reference&gt;</p>
<p>&lt;/ds:SignedInfo&gt;</p>
<p>&lt;ds:SignatureValue xmlns:ds=&#8221;http://www.w3.org/2000/09/xmldsig#&#8221;&gt;</p>
<p>UU0q/hQFWYrOMt+iPHiuuc0ffb6iqbJu1A115gGO4DHlt850pRQVMJGxn1f+XQaxjLjJRqzYa1lC</p>
<p>HQdZyavkLwpMWK1M/VLCn/2M9sS/c64wEIrLhE8vq9jO31O1Ms17KamgdvV9ThpR3sD4BUg3Q3Q1</p>
<p>vyi5+YVroHBBgqtVmFg=</p>
<p>&lt;/ds:SignatureValue&gt;</p>
<p>&lt;ds:KeyInfo xmlns:ds=&#8221;http://www.w3.org/2000/09/xmldsig#&#8221;&gt;</p>
<p>&lt;wsse:SecurityTokenReference xmlns:wsu=&#8221;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd&#8221; wsu:Id=&#8221;STRId-29118152&#8243; xmlns:wsse=&#8221;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd&#8221;&gt;&lt;ds:X509Data xmlns:ds=&#8221;http://www.w3.org/2000/09/xmldsig#&#8221;&gt;</p>
<p>&lt;ds:X509IssuerSerial xmlns:ds=&#8221;http://www.w3.org/2000/09/xmldsig#&#8221;&gt;</p>
<p>&lt;ds:X509IssuerName xmlns:ds=&#8221;http://www.w3.org/2000/09/xmldsig#&#8221;&gt;CN=satnewpubcert&lt;/ds:X509IssuerName&gt;</p>
<p>&lt;ds:X509SerialNumber xmlns:ds=&#8221;http://www.w3.org/2000/09/xmldsig#&#8221;&gt;1206533774&lt;/ds:X509SerialNumber&gt;</p>
<p>&lt;/ds:X509IssuerSerial&gt;</p>
<p>&lt;/ds:X509Data&gt;&lt;/wsse:SecurityTokenReference&gt;</p>
<p>&lt;/ds:KeyInfo&gt;</p>
<p>&lt;/ds:Signature&gt;&lt;wsse:UsernameToken xmlns:wsu=&#8221;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd&#8221; wsu:Id=&#8221;UsernameToken-7189308&#8243; xmlns:wsse=&#8221;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd&#8221;&gt;&lt;wsse:Username xmlns:wsse=&#8221;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd&#8221;&gt;satnewpubcert&lt;/wsse:Username&gt;&lt;wsse:Password Type=&#8221;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest&#8221; xmlns:wsse=&#8221;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd&#8221;&gt;MSsmgsLBGcV+gKRTWBRsKKTrpQw=&lt;/wsse:Password&gt;&lt;wsse:Nonce xmlns:wsse=&#8221;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd&#8221;&gt;q/4pOweIQLxL+VWqik5Pag==&lt;/wsse:Nonce&gt;&lt;wsu:Created xmlns:wsu=&#8221;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd&#8221;&gt;2008-03-26T13:26:12.813Z&lt;/wsu:Created&gt;&lt;/wsse:UsernameToken&gt;&lt;/wsse:Security&gt;&lt;/soap:Header&gt;&lt;soap:Body xmlns:wsu=&#8221;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd&#8221; wsu:Id=&#8221;id-26564976&#8243;&gt;&lt;ns1:sayHello xmlns:ns1=&#8221;http://server.example.cxf.sungard.com/&#8221;&gt;&lt;arg0&gt;Hello&lt;/arg0&gt;&lt;/ns1:sayHello&gt;&lt;/soap:Body&gt;&lt;/soap:Envelope&gt;</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p>
<p>Mar 26, 2008 6:56:14 PM org.apache.cxf.interceptor.LoggingInInterceptor logging</p>
<p>INFO: Inbound Message</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</p>
<p>Encoding: UTF-8</p>
<p>Headers: {content-type=[text/xml;charset=UTF-8], Date=[Wed, 26 Mar 2008 13:26:14 GMT], Content-Length=[230], SOAPAction=[""], Server=[Apache-Coyote/1.1]}</p>
<p>Messages:</p>
<p>Message:</p>
<p>Payload: &lt;soap:Envelope xmlns:soap=&#8221;http://schemas.xmlsoap.org/soap/envelope/&#8221;&gt;&lt;soap:Body&gt;&lt;ns1:sayHelloResponse xmlns:ns1=&#8221;http://server.example.cxf.sungard.com/&#8221;&gt;&lt;return&gt;You SaidHello&lt;/return&gt;&lt;/ns1:sayHelloResponse&gt;&lt;/soap:Body&gt;&lt;/soap:Envelope&gt;</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<em> </em></p>
<p><em> </em></p>
<p><em><span style="text-decoration:underline;">Server Side:</span></em></p>
<p><em> </em></p>
<p><em>User Name and password are got validated in PasswordHandler.java file. These values we can read it from xml/properties or from configuration files. Identifier value is public alias name and password is public alias password.</em></p>
<p><em> </em></p>
<p><em>if (pc.getIdentifer().equals(&#8220;satnewpubcert&#8221;)) {</em></p>
<p><em> pc.setPassword(&#8220;satsat&#8221;);</em></p>
<p><em> }</em></p>
<p><em> </em></p>
<p><em> </em></p>
<br />Posted in Web Services  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/peterarockiaraj.wordpress.com/59/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/peterarockiaraj.wordpress.com/59/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/peterarockiaraj.wordpress.com/59/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/peterarockiaraj.wordpress.com/59/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/peterarockiaraj.wordpress.com/59/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/peterarockiaraj.wordpress.com/59/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/peterarockiaraj.wordpress.com/59/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/peterarockiaraj.wordpress.com/59/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/peterarockiaraj.wordpress.com/59/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/peterarockiaraj.wordpress.com/59/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/peterarockiaraj.wordpress.com/59/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/peterarockiaraj.wordpress.com/59/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/peterarockiaraj.wordpress.com/59/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/peterarockiaraj.wordpress.com/59/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=peterarockiaraj.wordpress.com&amp;blog=9287010&amp;post=59&amp;subd=peterarockiaraj&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://peterarockiaraj.wordpress.com/2009/09/04/developing-cxf-ws-security-with-signaturecertificates/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f6e3d599f1ab85a63c80822d5e870f6a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">peterarockiaraj</media:title>
		</media:content>

		<media:content url="http://peterarockiaraj.files.wordpress.com/2009/09/wsdl-file4.jpg" medium="image">
			<media:title type="html">WSDL file</media:title>
		</media:content>
	</item>
		<item>
		<title>Developing CXF Web services with WS-Security</title>
		<link>http://peterarockiaraj.wordpress.com/2009/09/04/developing-cxf-with-ws-security/</link>
		<comments>http://peterarockiaraj.wordpress.com/2009/09/04/developing-cxf-with-ws-security/#comments</comments>
		<pubDate>Fri, 04 Sep 2009 09:22:32 +0000</pubDate>
		<dc:creator>Peter Arockiaraj</dc:creator>
				<category><![CDATA[Web Services]]></category>

		<guid isPermaLink="false">http://peterarockiaraj.wordpress.com/?p=52</guid>
		<description><![CDATA[Creating Server Application Step 1:   Download Following Jar files. activation.jar aopalliance-1.0.jar commons-collections-3.2.jar commons-lang-2.1.jar commons-logging-1.1.jar geronimo-activation-2.0.1.jar geronimo-annotation_1.0_spec-1.1.jar geronimo-javamail_1.4_mail-1.2.jar geronimo-servlet_2.5_spec-1.1.jar geronimo-ws-metadata_2.0_spec-1.1.1.jar jaxb-api.jar jaxb-api-2.0.jar jaxb-impl-2.0.5.jar jaxb-xjc.jar jaxws-api.jar mail.jar neethi-2.0.jar opensaml-1.0.1.jar saaj-api.jar saaj-impl.jar spring-beans-2.0.6.jar spring-context-2.0.6.jar spring-core-2.0.6.jar spring-web-2.0.6.jar stax-api-1.0.1.jar velocity-1.5.jar wsdl4j-1.6.1.jar wstx-asl-3.2.1.jar xalan-2[1].6.0.jar xalan-2[1].7.0.jar xml-resolver-1.2.jar xmlsec-1.2.1.jar cxf-bundle-2.0.4-incubator.jar XmlSchema-1.3.2.jar wss4j-1.5.1.jar Step 2: Create New Java project in eclipse (CXFServer). Step 3: [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=peterarockiaraj.wordpress.com&amp;blog=9287010&amp;post=52&amp;subd=peterarockiaraj&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<h3 style="text-align:center;">Creating Server Application</h3>
<p>Step 1:   Download Following Jar files.</p>
<p>activation.jar</p>
<p>aopalliance-1.0.jar</p>
<p>commons-collections-3.2.jar</p>
<p>commons-lang-2.1.jar</p>
<p>commons-logging-1.1.jar</p>
<p>geronimo-activation-2.0.1.jar</p>
<p>geronimo-annotation_1.0_spec-1.1.jar</p>
<p>geronimo-javamail_1.4_mail-1.2.jar</p>
<p>geronimo-servlet_2.5_spec-1.1.jar</p>
<p>geronimo-ws-metadata_2.0_spec-1.1.1.jar</p>
<p>jaxb-api.jar</p>
<p>jaxb-api-2.0.jar</p>
<p>jaxb-impl-2.0.5.jar</p>
<p>jaxb-xjc.jar</p>
<p>jaxws-api.jar</p>
<p>mail.jar</p>
<p>neethi-2.0.jar</p>
<p>opensaml-1.0.1.jar</p>
<p>saaj-api.jar</p>
<p>saaj-impl.jar</p>
<p>spring-beans-2.0.6.jar</p>
<p>spring-context-2.0.6.jar</p>
<p>spring-core-2.0.6.jar</p>
<p>spring-web-2.0.6.jar</p>
<p>stax-api-1.0.1.jar</p>
<p>velocity-1.5.jar</p>
<p>wsdl4j-1.6.1.jar</p>
<p>wstx-asl-3.2.1.jar</p>
<p>xalan-2[1].6.0.jar</p>
<p>xalan-2[1].7.0.jar</p>
<p>xml-resolver-1.2.jar</p>
<p>xmlsec-1.2.1.jar</p>
<p>cxf-bundle-2.0.4-incubator.jar</p>
<p>XmlSchema-1.3.2.jar</p>
<p>wss4j-1.5.1.jar</p>
<p>Step 2: Create New Java project in eclipse (CXFServer).</p>
<p>Step 3: Create WEB-INF folder inside project folder.</p>
<p>Step 4: Create classes folder inside WEB-INF folder.</p>
<p>Step 5: Create lib folder inside WEB-INF folder.</p>
<p>Step 6: Copy all the jar file into lib folder.</p>
<p>Step 7: Add all jar files into classpath (In Eclipse set java build path-&gt;Libraries). Add set Default output folder into CXFServer/WEB-INF/classes</p>
<p>Step 8: Create Remote Interface IHello.java</p>
<p>package com.sungard.cxf.example.server;</p>
<p>import javax.jws.WebService;</p>
<p>@WebService</p>
<p>public interface IHello {</p>
<p>public String sayHello(String value);</p>
<p>}</p>
<p>Step 9: Create Implementation Class IHello_Impl.java</p>
<p>package com.sungard.cxf.example.server;</p>
<p>import javax.jws.WebService;</p>
<p>@WebService(endpointInterface = &#8220;com.sungard.cxf.example.server.IHello&#8221;)</p>
<p>public class IHello_Impl implements IHello {</p>
<p>public String sayHello(String value) {</p>
<p>return &#8220;You Said&#8221; + value;</p>
<p>}</p>
<p>}</p>
<p>Step 10:  Create PasswordHandler.java file to handle usernames and passwords.</p>
<p>package com.sungard.cxf.example.server;</p>
<p>import java.io.IOException;</p>
<p>import javax.security.auth.callback.Callback;</p>
<p>import javax.security.auth.callback.CallbackHandler;</p>
<p>import javax.security.auth.callback.UnsupportedCallbackException;</p>
<p>import org.apache.ws.security.WSPasswordCallback;</p>
<p>public class PasswordHandler implements CallbackHandler {</p>
<p>public void handle(Callback[] callbacks) throws IOException,</p>
<p>UnsupportedCallbackException {</p>
<p>System.out.println(&#8220;Enterd PasswordHandler::handle&#8221;);</p>
<p>WSPasswordCallback pc = (WSPasswordCallback) callbacks[0];</p>
<p>if (pc.getIdentifer().equals(&#8220;arsenal&#8221;)) {</p>
<p>pc.setPassword(&#8220;gunners&#8221;);</p>
<p>}</p>
<p>System.out.println(&#8220;Leaving PasswordHandler::handle&#8221;);</p>
<p>}</p>
<p>}</p>
<p>Step 11: Create Interceptor class to handle soap requests ValidateUserTokenInterceptor.java.</p>
<p>package com.sungard.cxf.example.server;</p>
<p>import java.util.Vector;</p>
<p>import org.apache.cxf.message.Message;</p>
<p>import org.apache.cxf.phase.AbstractPhaseInterceptor;</p>
<p>import org.apache.cxf.phase.Phase;</p>
<p>import org.apache.ws.security.WSSecurityEngineResult;</p>
<p>import org.apache.ws.security.WSUsernameTokenPrincipal;</p>
<p>import org.apache.ws.security.handler.WSHandlerConstants;</p>
<p>import org.apache.ws.security.handler.WSHandlerResult;</p>
<p>public class ValidateUserTokenInterceptor extends AbstractPhaseInterceptor {</p>
<p>public ValidateUserTokenInterceptor(String s) {</p>
<p>super(s);</p>
<p>}</p>
<p>public ValidateUserTokenInterceptor(){</p>
<p>super(Phase.UNMARSHAL);</p>
<p>}</p>
<p>public void handleMessage(Message message) {</p>
<p>System.out.println(&#8220;Enterd ValidateUserTokenInterceptor::handleMessage&#8221;);</p>
<p>boolean userTokenValidated = false;</p>
<p>Vector result = (Vector) message</p>
<p>.getContextualProperty(WSHandlerConstants.RECV_RESULTS);</p>
<p>for (int i = 0; i &lt; result.size(); i++) {</p>
<p>WSHandlerResult res = (WSHandlerResult) result.get(i);</p>
<p>for (int j = 0; j &lt; res.getResults().size(); j++) {</p>
<p>WSSecurityEngineResult secRes = (WSSecurityEngineResult) res</p>
<p>.getResults().get(j);</p>
<p>WSUsernameTokenPrincipal principal = (WSUsernameTokenPrincipal) secRes.getPrincipal();</p>
<p>if (!principal.isPasswordDigest()</p>
<p>|| principal.getNonce() == null</p>
<p>|| principal.getPassword() == null</p>
<p>|| principal.getCreatedTime() == null) {</p>
<p>throw new RuntimeException(&#8220;Invalid Security Header&#8221;);</p>
<p>} else {</p>
<p>userTokenValidated = true;</p>
<p>}</p>
<p>}</p>
<p>}</p>
<p>if (!userTokenValidated) {</p>
<p>throw new RuntimeException(&#8220;Security processing failed&#8221;);</p>
<p>}</p>
<p>System.out.println(&#8220;Leaving ValidateUserTokenInterceptor::handleMessage&#8221;);</p>
<p>}</p>
<p>}</p>
<p>Step 12: Create beans.xml file to setup the application context for the server.</p>
<p>&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;UTF-8&#8243;?&gt;</p>
<p>&lt;beans xmlns=&#8221;http://www.springframework.org/schema/beans&#8221;</p>
<p>xmlns:xsi=&#8221;http://www.w3.org/2001/XMLSchema-instance&#8221;</p>
<p>xmlns:jaxws=&#8221;http://cxf.apache.org/jaxws&#8221;</p>
<p>xsi:schemaLocation=&#8221;</p>
<p>http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd</p>
<p>http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd&#8221;&gt;</p>
<p>&lt;import resource=&#8221;classpath:META-INF/cxf/cxf.xml&#8221; /&gt;</p>
<p>&lt;import resource=&#8221;classpath:META-INF/cxf/cxf-extension-soap.xml&#8221; /&gt;</p>
<p>&lt;import resource=&#8221;classpath:META-INF/cxf/cxf-servlet.xml&#8221; /&gt;</p>
<p>&lt;jaxws:endpoint id=&#8221;helloWorld&#8221;</p>
<p>implementor=&#8221;com.sungard.cxf.example.server.IHello_Impl&#8221;</p>
<p>address=&#8221;/HelloService&#8221;&gt;</p>
<p>&lt;jaxws:inInterceptors&gt;</p>
<p>&lt;bean</p>
<p>/&gt;</p>
<p>&lt;bean</p>
<p>&gt;</p>
<p>&lt;property name=&#8221;properties&#8221;&gt;</p>
<p>&lt;map&gt;</p>
<p>&lt;entry key=&#8221;action&#8221; value=&#8221;UsernameToken&#8221; /&gt;</p>
<p>&lt;entry key=&#8221;passwordType&#8221; value=&#8221;PasswordText&#8221; /&gt;</p>
<p>&lt;entry key=&#8221;passwordCallbackClass&#8221;</p>
<p>value=&#8221;com.sungard.cxf.example.server.PasswordHandler&#8221; /&gt;</p>
<p>&lt;/map&gt;</p>
<p>&lt;/property&gt;</p>
<p>&lt;/bean&gt;</p>
<p>&lt;bean</p>
<p>/&gt;</p>
<p>&lt;/jaxws:inInterceptors&gt;</p>
<p>&lt;/jaxws:endpoint&gt;</p>
<p>&lt;/beans&gt;</p>
<p>Step 13: Create web.xml file</p>
<p>&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;ISO-8859-1&#8243;?&gt;</p>
<p>&lt;!DOCTYPE web-app</p>
<p>PUBLIC &#8220;-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN&#8221;</p>
<p>&#8220;http://java.sun.com/dtd/web-app_2_3.dtd&#8221;&gt;</p>
<p>&lt;web-app&gt;</p>
<p>&lt;context-param&gt;</p>
<p>&lt;param-name&gt;contextConfigLocation&lt;/param-name&gt;</p>
<p>&lt;param-value&gt;WEB-INF/beans.xml&lt;/param-value&gt;</p>
<p>&lt;/context-param&gt;</p>
<p>&lt;listener&gt;</p>
<p>&lt;listener-class&gt;</p>
<p>org.springframework.web.context.ContextLoaderListener</p>
<p>&lt;/listener-class&gt;</p>
<p>&lt;/listener&gt;</p>
<p>&lt;servlet&gt;</p>
<p>&lt;servlet-name&gt;CXFServlet&lt;/servlet-name&gt;</p>
<p>&lt;display-name&gt;CXF Servlet&lt;/display-name&gt;</p>
<p>&lt;servlet-class&gt;</p>
<p>org.apache.cxf.transport.servlet.CXFServlet</p>
<p>&lt;/servlet-class&gt;</p>
<p>&lt;load-on-startup&gt;1&lt;/load-on-startup&gt;</p>
<p>&lt;/servlet&gt;</p>
<p>&lt;servlet-mapping&gt;</p>
<p>&lt;servlet-name&gt;CXFServlet&lt;/servlet-name&gt;</p>
<p>&lt;url-pattern&gt;/*&lt;/url-pattern&gt;</p>
<p>&lt;/servlet-mapping&gt;</p>
<p>&lt;/web-app&gt;</p>
<p>Step 14: Create ant folder inside project. And Create build.xml file inside ant folder.</p>
<p>&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;UTF-8&#8243;?&gt;</p>
<p>&lt;project basedir=&#8221;../&#8221; default=&#8221;archive&#8221;&gt;</p>
<p>&lt;target name=&#8221;archive&#8221;&gt;</p>
<p>&lt;jar destfile=&#8221;helloservice.war&#8221;&gt;</p>
<p>&lt;fileset dir=&#8221;${basedir}&#8221;&gt;</p>
<p>&lt;include name=&#8221;**/*.class&#8221; /&gt;</p>
<p>&lt;/fileset&gt;</p>
<p>&lt;fileset dir=&#8221;${basedir}&#8221;&gt;</p>
<p>&lt;include name=&#8221;**/*.jar&#8221; /&gt;</p>
<p>&lt;/fileset&gt;</p>
<p>&lt;fileset dir=&#8221;${basedir}&#8221;&gt;</p>
<p>&lt;include name=&#8221;**/*.xml&#8221; /&gt;</p>
<p>&lt;exclude name=&#8221;**/*build*&#8221; /&gt;</p>
<p>&lt;/fileset&gt;</p>
<p>&lt;/jar&gt;</p>
<p>&lt;/target&gt;</p>
<p>&lt;/project&gt;</p>
<p>Step 15: Run build.xml using Ant.</p>
<p>Step 16: Deploy helloservice.war into Web/Application Server (Tomcat/JBoss).</p>
<p>Step 17: Verify application deployed successfully or by using following url.<br />
<a href="http://localhost:8080/helloservice/HelloService?wsdl">http://localhost:8080/helloservice/HelloService?wsdl</a></p>
<p>Step 18: Browser will show wsdl file our web service.</p>
<p><img class="alignleft size-full wp-image-53" title="WSDL file" src="http://peterarockiaraj.files.wordpress.com/2009/09/wsdl-file3.jpg" alt="WSDL file" width="1024" height="768" /></p>
<h2>Creating Client Application.</h2>
<p>Step 1: Create New Java project in Eclipse</p>
<p>Step 2: Create folder Structure as like above application</p>
<p>Step 3: Use same jar files used for Server application.</p>
<p>Step 4: Set all the jars files into classpath.</p>
<p>Step 5: Create Remote Interface in client (IHello.java) (You can use wsdl2java for creating same)</p>
<p>package com.sungard.cxf.example.server;</p>
<p>import javax.jws.WebService;</p>
<p>@WebService</p>
<p>public interface IHello {</p>
<p>public String sayHello(String value);</p>
<p>}</p>
<p>Step 6: Create ClientPasswordCallback.java for handling soap request in client side.</p>
<p>package com.sungard.cxf.example.server;</p>
<p>import java.io.IOException;</p>
<p>import javax.security.auth.callback.Callback;</p>
<p>import javax.security.auth.callback.CallbackHandler;</p>
<p>import javax.security.auth.callback.UnsupportedCallbackException;</p>
<p>import org.apache.ws.security.WSPasswordCallback;</p>
<p>public class ClientPasswordCallback implements CallbackHandler {</p>
<p>public void handle(Callback[] callbacks) throws IOException,</p>
<p>UnsupportedCallbackException {</p>
<p>WSPasswordCallback pc = (WSPasswordCallback) callbacks[0];</p>
<p>// set the password for our message.</p>
<p>pc.setPassword(&#8220;gunners&#8221;);</p>
<p>}</p>
<p>}</p>
<p>Step 7: Create the service factory (AuthServiceFactory.java), which is extremely easy since all the work was done in the Spring file:</p>
<p>package com.sungard.cxf.example.server;</p>
<p>import org.springframework.context.support.ClassPathXmlApplicationContext;</p>
<p>public final class AuthServiceFactory {</p>
<p>private static final ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(</p>
<p>new String[] { &#8220;cxfClient.xml&#8221; });</p>
<p>public AuthServiceFactory() {</p>
<p>}</p>
<p>public IHello getService() {</p>
<p>return (IHello) context.getBean(&#8220;client&#8221;);</p>
<p>}</p>
<p>}</p>
<p>Step 8: Create Client.java to invoke the service.</p>
<p>package com.sungard.cxf.example.server;</p>
<p>public final class Client {</p>
<p>private Client() {</p>
<p>}</p>
<p>public static void main(String args[]) throws Exception {</p>
<p>AuthServiceFactory af = new AuthServiceFactory();</p>
<p>IHello client1 = af.getService();</p>
<p>String response1 = client1.sayHello(&#8220;Hello&#8221;);</p>
<p>System.out.println(&#8220;Response: &#8221; + response1);</p>
<p>}</p>
<p>}</p>
<p>Step 9: Create cxfClient.xml to setup the application context for the client.</p>
<p>&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;UTF-8&#8243;?&gt;</p>
<p>&lt;beans xmlns=&#8221;http://www.springframework.org/schema/beans&#8221;</p>
<p>xmlns:xsi=&#8221;http://www.w3.org/2001/XMLSchema-instance&#8221;</p>
<p>xmlns:jaxws=&#8221;http://cxf.apache.org/jaxws&#8221;</p>
<p>xsi:schemaLocation=&#8221;http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd</p>
<p>http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd&#8221;&gt;</p>
<p>&lt;bean id=&#8221;proxyFactory&#8221;&gt;</p>
<p>&lt;property name=&#8221;serviceClass&#8221; value=&#8221;com.sungard.cxf.example.server.IHello&#8221;/&gt;</p>
<p>&lt;property name=&#8221;address&#8221; value=&#8221;http://localhost:8080/helloservice/HelloService&#8221;/&gt;</p>
<p>&lt;property name=&#8221;inInterceptors&#8221;&gt;</p>
<p>&lt;list&gt;</p>
<p>&lt;ref bean=&#8221;logIn&#8221; /&gt;</p>
<p>&lt;/list&gt;</p>
<p>&lt;/property&gt;</p>
<p>&lt;property name=&#8221;outInterceptors&#8221;&gt;</p>
<p>&lt;list&gt;</p>
<p>&lt;ref bean=&#8221;logOut&#8221; /&gt;</p>
<p>&lt;ref bean=&#8221;saajOut&#8221; /&gt;</p>
<p>&lt;ref bean=&#8221;wss4jOut&#8221; /&gt;</p>
<p>&lt;/list&gt;</p>
<p>&lt;/property&gt;</p>
<p>&lt;/bean&gt;</p>
<p>&lt;bean id=&#8221;client&#8221; factory-bean=&#8221;proxyFactory&#8221; factory-method=&#8221;create&#8221; /&gt;</p>
<p>&lt;bean id=&#8221;logIn&#8221; /&gt;</p>
<p>&lt;bean id=&#8221;logOut&#8221; /&gt;</p>
<p>&lt;bean id=&#8221;saajOut&#8221; /&gt;</p>
<p>&lt;bean id=&#8221;wss4jOut&#8221;&gt;</p>
<p>&lt;constructor-arg&gt;</p>
<p>&lt;map&gt;</p>
<p>&lt;entry key=&#8221;action&#8221; value=&#8221;UsernameToken&#8221; /&gt;</p>
<p>&lt;entry key=&#8221;user&#8221; value=&#8221;arsenal&#8221; /&gt;</p>
<p>&lt;entry key=&#8221;passwordType&#8221; value=&#8221;PasswordDigest&#8221; /&gt;</p>
<p>&lt;entry key=&#8221;passwordCallbackClass&#8221; value=&#8221;com.sungard.cxf.example.server.ClientPasswordCallback&#8221; /&gt;</p>
<p>&lt;/map&gt;</p>
<p>&lt;/constructor-arg&gt;</p>
<p>&lt;/bean&gt;</p>
<p>&lt;/beans&gt;</p>
<p>Step 10:  Run Client.java</p>
<p>You will get response like as follows.</p>
<p>Response: You SaidHello</p>
<p><em><span style="text-decoration:underline;">Note:</span></em></p>
<p><em> </em></p>
<p><em><span style="text-decoration:underline;">Client Side:</span></em></p>
<p><em> </em></p>
<p><em>We Set User name in client cxfClient.xml file. (We can set the same through program also and we can read it xml/properties files. We can pass the same in runtime also)</em></p>
<p><em> </em></p>
<p><em>&lt;</em><em>entry </em><em>key</em><em>=</em><em>&#8220;user&#8221; </em><em>value</em><em>=</em><em>&#8220;arsenal&#8221; </em><em>/&gt;</em><em> </em></p>
<p><em> </em></p>
<p><em>We Set password in ClientPasswordCallback.java class (We can pass same in runtime also)</em></p>
<p><em> </em></p>
<p><em> // set the password for our message.</em></p>
<p><em> pc.setPassword(&#8220;gunners&#8221;);</em></p>
<p><em> </em></p>
<p><em>You can see the In &amp; Outbound Messages in Client Side. As like as follows.</em></p>
<p><em> </em></p>
<p>INFO: Outbound Message</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p>Encoding: UTF-8</p>
<p>Headers: {SOAPAction=[""], Accept=[*]}</p>
<p>Messages:</p>
<p>Payload: &lt;soap:Envelope xmlns:soap=&#8221;http://schemas.xmlsoap.org/soap/envelope/&#8221;&gt;</p>
<p>&lt;soap:Header&gt;</p>
<p>&lt;wsse:Security xmlns:wsse=&#8221;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd&#8221; soap:mustUnderstand=&#8221;1&#8243;&gt;&lt;wsse:UsernameToken xmlns:wsu=&#8221;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd&#8221; wsu:Id=&#8221;UsernameToken-9702276&#8243; xmlns:wsse=&#8221;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd&#8221;&gt;&lt;wsse:Username xmlns:wsse=&#8221;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd&#8221;&gt;arsenal&lt;/wsse:Username&gt;&lt;wsse:Password Type=&#8221;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest&#8221; xmlns:wsse=&#8221;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd&#8221;&gt;3bQTW92CrAxUt9rgqvqyY4pfJi8=&lt;/wsse:Password&gt;&lt;wsse:Nonce xmlns:wsse=&#8221;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd&#8221;&gt;hxV58wDgiNTf4tcypfiN6Q==&lt;/wsse:Nonce&gt;&lt;wsu:Created xmlns:wsu=&#8221;http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd&#8221;&gt;2008-03-25T11:04:15.111Z&lt;/wsu:Created&gt;&lt;/wsse:UsernameToken&gt;&lt;/wsse:Security&gt;&lt;/soap:Header&gt;&lt;soap:Body&gt;&lt;ns1:sayHello xmlns:ns1=&#8221;http://server.example.cxf.sungard.com/&#8221;&gt;&lt;arg0&gt;Hello&lt;/arg0&gt;&lt;/ns1:sayHello&gt;&lt;/soap:Body&gt;&lt;/soap:Envelope&gt;</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;</p>
<p>Mar 25, 2008 4:34:15 PM org.apache.cxf.interceptor.LoggingInInterceptor logging</p>
<p>INFO: Inbound Message</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;-</p>
<p>Encoding: UTF-8</p>
<p>Headers: {content-type=[text/xml;charset=UTF-8], Date=[Tue, 25 Mar 2008 11:04:15 GMT], Content-Length=[230], SOAPAction=[""], Server=[Apache-Coyote/1.1]}</p>
<p>Messages:</p>
<p>Message:</p>
<p>Payload: &lt;soap:Envelope xmlns:soap=&#8221;http://schemas.xmlsoap.org/soap/envelope/&#8221;&gt;&lt;soap:Body&gt;&lt;ns1:sayHelloResponse xmlns:ns1=&#8221;http://server.example.cxf.sungard.com/&#8221;&gt;&lt;return&gt;You SaidHello&lt;/return&gt;&lt;/ns1:sayHelloResponse&gt;&lt;/soap:Body&gt;&lt;/soap:Envelope&gt;</p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8211;<em> </em></p>
<p><em> </em></p>
<p><em> </em></p>
<p><em><span style="text-decoration:underline;">Server Side:</span></em></p>
<p><em> </em></p>
<p><em>User Name and password are got validated in PasswordHandler.java file. These values we can read it from xml/properties or from configuration files.</em></p>
<p><em> </em></p>
<p><em>if (pc.getIdentifer().equals(&#8220;arsenal&#8221;)) {</em></p>
<p><em> pc.setPassword(&#8220;gunners&#8221;);</em></p>
<p><em> }</em></p>
<p><em> </em></p>
<p><em> </em></p>
<br />Posted in Web Services  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/peterarockiaraj.wordpress.com/52/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/peterarockiaraj.wordpress.com/52/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/peterarockiaraj.wordpress.com/52/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/peterarockiaraj.wordpress.com/52/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/peterarockiaraj.wordpress.com/52/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/peterarockiaraj.wordpress.com/52/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/peterarockiaraj.wordpress.com/52/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/peterarockiaraj.wordpress.com/52/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/peterarockiaraj.wordpress.com/52/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/peterarockiaraj.wordpress.com/52/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/peterarockiaraj.wordpress.com/52/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/peterarockiaraj.wordpress.com/52/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/peterarockiaraj.wordpress.com/52/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/peterarockiaraj.wordpress.com/52/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=peterarockiaraj.wordpress.com&amp;blog=9287010&amp;post=52&amp;subd=peterarockiaraj&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://peterarockiaraj.wordpress.com/2009/09/04/developing-cxf-with-ws-security/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f6e3d599f1ab85a63c80822d5e870f6a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">peterarockiaraj</media:title>
		</media:content>

		<media:content url="http://peterarockiaraj.files.wordpress.com/2009/09/wsdl-file3.jpg" medium="image">
			<media:title type="html">WSDL file</media:title>
		</media:content>
	</item>
		<item>
		<title>RESTful web services using the Jersey framework</title>
		<link>http://peterarockiaraj.wordpress.com/2009/09/03/restful-web-services-using-the-jersey-framework/</link>
		<comments>http://peterarockiaraj.wordpress.com/2009/09/03/restful-web-services-using-the-jersey-framework/#comments</comments>
		<pubDate>Thu, 03 Sep 2009 07:18:06 +0000</pubDate>
		<dc:creator>Peter Arockiaraj</dc:creator>
				<category><![CDATA[Web Services]]></category>

		<guid isPermaLink="false">http://peterarockiaraj.wordpress.com/?p=40</guid>
		<description><![CDATA[Brief Description This sample application provides the below services Displays the list of employees in the organization Append new employee to the system Get the specific employee information based on the employee id Restful Web Service: REpresentational State Transfer (REST) is a key design idiom that embraces a stateless client-server architecture in which the web [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=peterarockiaraj.wordpress.com&amp;blog=9287010&amp;post=40&amp;subd=peterarockiaraj&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong><span style="text-decoration:underline;">Brief Description </span></strong></p>
<p>This sample application provides the below services</p>
<ul>
<li>Displays the list of employees in the organization</li>
<li>Append new employee to the system</li>
<li>Get the specific employee information based on the employee id</li>
</ul>
<p><strong><span style="text-decoration:underline;">Restful Web Service:</span></strong></p>
<p><a href="http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm" target="_blank">REpresentational State Transfer (REST)</a> is a key design idiom that embraces a stateless client-server architecture in which the web services are viewed as resources and can be identified by their URLs. Web service clients that want to use these resources access a particular representation by transferring application content using a small globally defined set of remote methods that describe the action to be performed on the resource. REST is an analytical description of the existing web architecture, and thus the interplay between the style and the underlying HTTP protocol appears seamless.</p>
<p><strong><span style="text-decoration:underline;">Jersey Framework</span></strong><span style="text-decoration:underline;">:</span></p>
<p>Jersey is the open source (under the <a href="http://www.opensource.org/licenses/cddl1.php">CDDL license</a>) JAX-RS (JSR 311) Reference Implementation for building RESTful Web services. But, it is also more than the Reference Implementation. Jersey provides additional APIs and extension points (SPIs) so that developers may extend Jersey to suite their needs.</p>
<p>Jersey is currently available as an early access implementation. Jersey cannot go to version 1.0 until JAX-RS reaches the final release and is an approved JSR. Until that point Jersey will track the JSR 311 API and will regularly update according to 311 Expert Group agreed snapshots of the API.</p>
<p>Latest Jersey snapshot can be downloaded from <a href="https://jersey.dev.java.net/files/documents/7056/73619/jersey-0.4-ea.zip">https://jersey.dev.java.net/files/documents/7056/73619/jersey-0.4-ea.zip</a></p>
<p><strong><span style="text-decoration:underline;">Follow the below Steps to create a sample RESTful application </span></strong></p>
<p><span style="text-decoration:underline;">Step1:</span> Create a web project with the below directory structure</p>
<p><img class="aligncenter size-full wp-image-41" title="Folder Structure" src="http://peterarockiaraj.files.wordpress.com/2009/09/folder-structure3.jpg" alt="Folder Structure" width="222" height="149" /></p>
<p><span style="text-decoration:underline;">Step2:</span> Create a java file to make it as a RESTful web service</p>
<p>In this sample application we have taken the EmployeeService.java as the web service.<br />
Below is the code for the EmployeeService.java</p>
<p>package com.peter.sample;</p>
<p>import javax.ws.rs.ConsumeMime;<br />
import javax.ws.rs.HttpMethod;<br />
import javax.ws.rs.ProduceMime;<br />
import javax.ws.rs.UriParam;<br />
import javax.ws.rs.UriTemplate;<br />
import javax.ws.rs.WebApplicationException;<br />
import com.sun.ws.rest.api.representation.FormURLEncodedProperties;</p>
<p>/**<br />
*<br />
* @author Peter Arockiaraj Employee service<br />
*<br />
*/</p>
<p>@UriTemplate(&#8220;/employee&#8221;)<br />
public class EmployeeService {</p>
<p>@HttpMethod(&#8220;GET&#8221;)<br />
@ProduceMime(&#8220;text/html&#8221;)<br />
public String listEmployees() {<br />
String result = &#8220;Satyam Employee list&#8221;;</p>
<p>result += &#8220;<br />
&#8220;;<br />
for (Employee employee : Employee.EMPLOYEE_LIST) {<br />
result += &#8220;<br />
&#8220;;<br />
result += &#8220;</p>
<p>&#8220;;<br />
result += &#8220;</p>
<p>&#8220;;<br />
}<br />
result += &#8220;</p>
<table border="0">
<tbody>
<tr>
<td>&#8221; + employee.getId() + &#8220;</td>
<td>&#8221; + employee.getName() + &#8220;</td>
<td>&#8221; + employee.getDesignation() + &#8220;</td>
</tr>
</tbody>
</table>
<p>&#8220;;<br />
return result;<br />
}</p>
<p>@HttpMethod(&#8220;GET&#8221;)<br />
@UriTemplate(&#8220;/{id}&#8221;)<br />
@ProduceMime(&#8220;text/json&#8221;)<br />
public String listEmployee(@UriParam(&#8220;id&#8221;)<br />
String idString) {<br />
int id = 0;<br />
try {<br />
id = Integer.parseInt(idString);<br />
} catch (NumberFormatException e) {<br />
throw new WebApplicationException(405);<br />
}<br />
try {<br />
return Employee.getEmployee(id).toJson();<br />
} catch (IndexOutOfBoundsException e) {<br />
throw new WebApplicationException(404);<br />
}<br />
}</p>
<p>@HttpMethod(&#8220;GET&#8221;)<br />
@UriTemplate(&#8220;/new&#8221;)<br />
@ProduceMime(&#8220;text/html&#8221;)<br />
public String formForEmployee() {<br />
String result = &#8220;Create New Employee&#8221;;<br />
result += &#8220;&#8221;;<br />
result += &#8220;Name :<br />
&#8220;;<br />
result += &#8220;Designation :<br />
&#8220;;<br />
result += &#8220;&#8221;;<br />
return result;<br />
}</p>
<p>@UriTemplate(&#8220;/add&#8221;)<br />
@HttpMethod(&#8220;POST&#8221;)<br />
@ProduceMime(&#8220;text/plain&#8221;)<br />
@ConsumeMime(&#8220;text/html&#8221;)<br />
public String addEmployee(FormURLEncodedProperties formData) {<br />
String name = formData.get(&#8220;name&#8221;);<br />
String designation = formData.get(&#8220;designation&#8221;);<br />
if ((name == null) || (designation == null)) {<br />
throw new WebApplicationException(405);<br />
} else {<br />
Employee.addEmployee(name, designation);<br />
}<br />
return &#8220;Added OK&#8221;;<br />
}</p>
<p>}</p>
<p>EmployeeService uses Employee.java<br />
package com.peter.sample;</p>
<p>import java.util.ArrayList;<br />
import java.util.List;</p>
<p>/**<br />
*<br />
* @author Peter Arockiaraj<br />
* A model class for this very simple Jersey REST example.<br />
*<br />
*/<br />
public class Employee {</p>
<p>/**<br />
* In memory list. In a real world example this might<br />
* be backed by a database<br />
*/<br />
public static List  EMPLOYEE_LIST  = new ArrayList();</p>
<p>/**<br />
* Method to get the Employee Details based on the Employee ID<br />
* @param id<br />
* @return Employee<br />
*/<br />
public static Employee getEmployee(int id) {<br />
return   EMPLOYEE_LIST.get(id);<br />
}</p>
<p>/**<br />
* Method to add the new employee details to the Employee List<br />
* @param Name<br />
* @param Designation<br />
*/<br />
public static void addEmployee(String Name, String Designation) {<br />
EMPLOYEE_LIST.add(new Employee(EMPLOYEE_LIST.size(), Name, Designation));<br />
}</p>
<p>/**<br />
* Create some data<br />
*/<br />
static {<br />
EMPLOYEE_LIST.add(new Employee(71503,&#8221;Hari&#8221;,&#8221;Business Analyst&#8221;));<br />
EMPLOYEE_LIST.add(new Employee(14352,&#8221;Mathew&#8221;,&#8221;Business Analyst&#8221;));<br />
EMPLOYEE_LIST.add(new Employee(17689,&#8221;Vamsi&#8221;,&#8221;Business Analyst&#8221;));<br />
EMPLOYEE_LIST.add(new Employee(36157,&#8221;Naveen&#8221;,&#8221;Business Analyst&#8221;));<br />
}</p>
<p>private int id;<br />
private String name;<br />
private String designation;</p>
<p>/**<br />
* Creates an Employee Instance<br />
* @param id<br />
* @param name<br />
* @param designation<br />
*/<br />
public Employee(int id, String name, String designation) {<br />
super();<br />
this.id = id;<br />
this.name = name;<br />
this.designation = designation;<br />
}</p>
<p>/**<br />
* @return<br />
*/<br />
public String toJson() {<br />
String result = &#8220;{ &#8216;id&#8217; : &#8221; + this.id + &#8221; , &#8220;;<br />
result += &#8221; &#8216;Name&#8217; : &#8221; + this.name + &#8221; , &#8220;;<br />
result += &#8220;&#8216;Designation&#8217; : &#8221; + this.designation + &#8221; }&#8221;;<br />
return result;<br />
}</p>
<p>public int getId() {<br />
return id;<br />
}</p>
<p>public void setId(int id) {<br />
this.id = id;<br />
}</p>
<p>public String getName() {<br />
return name;<br />
}</p>
<p>public void setName(String name) {<br />
this.name = name;<br />
}</p>
<p>public String getDesignation() {<br />
return designation;<br />
}</p>
<p>public void setDesignation(String designation) {<br />
this.designation = designation;<br />
}</p>
<p>}</p>
<p>Step4: Create a webresouce class<br />
package com.peter.sample;<br />
import com.sun.ws.rest.api.core.DefaultResourceConfig;</p>
<p>/**<br />
*<br />
* @author Peter Arockiaraj<br />
* WebResource definition for the Employee Service example.<br />
*/<br />
public class WebResources extends DefaultResourceConfig {</p>
<p>public WebResources() {<br />
getResourceClasses().add(EmployeeService.class);<br />
// getResourceClasses().add(OtherService.class);<br />
// can add any number of Web services here.<br />
}<br />
}</p>
<p>Step3:  Make sure that the below jars files in the classpath<br />
•	jeesey.jar<br />
•	jsr311-api.jar<br />
•	jettison-1.0-RC1.jar</p>
<p>Step4: create the web.xml with the following code<br />
&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;UTF-8&#8243;?&gt;<br />
&lt;web-app version=&#8221;2.5&#8243; xmlns=&#8221;http://java.sun.com/xml/ns/javaee&#8221; xmlns:xsi=&#8221;http://www.w3.org/2001/XMLSchema-instance&#8221; xsi:schemaLocation=&#8221;http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd&#8221;&gt;</p>
<p>&lt;servlet&gt;<br />
&lt;servlet-name&gt;ServletAdaptor&lt;/servlet-name&gt;<br />
&lt;servlet-class&gt;com.sun.ws.rest.impl.container.servlet.ServletAdaptor&lt;/servlet-class&gt;<br />
&lt;init-param&gt;<br />
&lt;param-name&gt;webresourceclass&lt;/param-name&gt;<br />
&lt;param-value&gt;com.satyam.adms.WebResources&lt;/param-value&gt;<br />
&lt;/init-param&gt;<br />
&lt;load-on-startup&gt;1&lt;/load-on-startup&gt;<br />
&lt;/servlet&gt;</p>
<p>&lt;servlet-mapping&gt;<br />
&lt;servlet-name&gt;ServletAdaptor&lt;/servlet-name&gt;<br />
&lt;url-pattern&gt;/resources/*&lt;/url-pattern&gt;<br />
&lt;/servlet-mapping&gt;</p>
<p>&lt;session-config&gt;<br />
&lt;session-timeout&gt;<br />
30<br />
&lt;/session-timeout&gt;<br />
&lt;/session-config&gt;</p>
<p>&lt;/web-app&gt;</p>
<p>Step5: Build the war file and deploy in the web server.<br />
Step6:  Below are the URLs to access the application<br />
http://localhost:8080/EmployeeProject/resources/employee    : To view the list of employees<br />
http://localhost:8080/EmployeeProject/resources/employee/new : To append the new employee<br />
http://localhost:8080/EmployeeProject/resources/employee/1  :   To get the employee id =1  info</p>
<br />Posted in Web Services  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/peterarockiaraj.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/peterarockiaraj.wordpress.com/40/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/peterarockiaraj.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/peterarockiaraj.wordpress.com/40/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/peterarockiaraj.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/peterarockiaraj.wordpress.com/40/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/peterarockiaraj.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/peterarockiaraj.wordpress.com/40/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/peterarockiaraj.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/peterarockiaraj.wordpress.com/40/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/peterarockiaraj.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/peterarockiaraj.wordpress.com/40/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/peterarockiaraj.wordpress.com/40/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/peterarockiaraj.wordpress.com/40/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=peterarockiaraj.wordpress.com&amp;blog=9287010&amp;post=40&amp;subd=peterarockiaraj&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://peterarockiaraj.wordpress.com/2009/09/03/restful-web-services-using-the-jersey-framework/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f6e3d599f1ab85a63c80822d5e870f6a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">peterarockiaraj</media:title>
		</media:content>

		<media:content url="http://peterarockiaraj.files.wordpress.com/2009/09/folder-structure3.jpg" medium="image">
			<media:title type="html">Folder Structure</media:title>
		</media:content>
	</item>
		<item>
		<title>Developing Web Services By Using Spring and CXF</title>
		<link>http://peterarockiaraj.wordpress.com/2009/09/02/developing-web-services-by-using-spring-and-cxf/</link>
		<comments>http://peterarockiaraj.wordpress.com/2009/09/02/developing-web-services-by-using-spring-and-cxf/#comments</comments>
		<pubDate>Wed, 02 Sep 2009 10:25:08 +0000</pubDate>
		<dc:creator>Peter Arockiaraj</dc:creator>
				<category><![CDATA[Web Services]]></category>

		<guid isPermaLink="false">http://peterarockiaraj.wordpress.com/?p=29</guid>
		<description><![CDATA[Step 1:  Download Following Jar files. Open up your favorite IDE and create a new project. The first thing we need to do is add the necessary CXF dependencies to the project. You can find these dependencies in the CXF distribution in the lib directory. commons-logging-1.1.jar geronimo-activation_1.1_spec-1.0-M1.jar (or Sun&#8217;s Activation jar) geronimo-annotation_1.0_spec-1.1.jar (JSR 250) geronimo-javamail_1.4_spec-1.0-M1.jar [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=peterarockiaraj.wordpress.com&amp;blog=9287010&amp;post=29&amp;subd=peterarockiaraj&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p><strong>Step 1:  Download Following Jar files.</strong></p>
<p>Open up your favorite IDE and create a new project. The first thing we need to do is add the necessary CXF dependencies to the project. You can find these dependencies in the CXF distribution in the lib directory.</p>
<p>commons-logging-1.1.jar</p>
<p>geronimo-activation_1.1_spec-1.0-M1.jar (or Sun&#8217;s Activation jar)</p>
<p>geronimo-annotation_1.0_spec-1.1.jar (JSR 250)</p>
<p>geronimo-javamail_1.4_spec-1.0-M1.jar (or Sun&#8217;s JavaMail jar)</p>
<p>geronimo-servlet_2.5_spec-1.1-M1.jar (or Sun&#8217;s Servlet jar)</p>
<p>geronimo-ws-metadata_2.0_spec-1.1.1.jar (JSR 181)</p>
<p>jaxb-api-2.0.jar</p>
<p>jaxb-impl-2.0.5.jar</p>
<p>jaxws-api-2.0.jar</p>
<p>neethi-2.0.jar</p>
<p>saaj-api-1.3.jar</p>
<p>saaj-impl-1.3.jar</p>
<p>stax-api-1.0.1.jar</p>
<p>wsdl4j-1.6.1.jar</p>
<p>wstx-asl-3.2.1.jar</p>
<p>XmlSchema-1.2.jar</p>
<p>xml-resolver-1.2.jar</p>
<p><strong>The Spring jars:</strong></p>
<p>aopalliance-1.0.jar</p>
<p>spring-core-2.0.4.jar</p>
<p>spring-beans-2.0.4.jar</p>
<p>spring-context-2.0.4.jar</p>
<p>spring-web-2.0.4.jar</p>
<p><strong>And the CXF jar:</strong></p>
<p>cxf-2.0-incubator.jar</p>
<p><strong>Step 2:  Create Following Folder Structure</strong></p>
<p><strong><span style="font-weight:normal;"><img class="aligncenter size-full wp-image-30" title="Folder Structure" src="http://peterarockiaraj.files.wordpress.com/2009/09/folder-structure2.jpg" alt="Folder Structure" width="110" height="56" /> </span></strong></p>
<p><strong> </strong></p>
<p><strong>Step 3:  Create Following classes</strong></p>
<ol>
<li>Address</li>
<li>AddressType</li>
<li>IAddressService</li>
<li>AddressService</li>
</ol>
<p align="center"><strong>Address.java</strong></p>
<p><strong> </strong></p>
<p><strong>package</strong> com.sungard.adms.address.ws;</p>
<p><strong> </strong></p>
<p><strong>public</strong> <strong>class</strong> Address {</p>
<p><strong>private</strong> String name;</p>
<p><strong>private</strong> String doorno;</p>
<p><strong>private</strong> String road;</p>
<p><strong>private</strong> String buildingName;</p>
<p><strong>public</strong> String getName() {</p>
<p><strong>return</strong> name;</p>
<p>}</p>
<p><strong>public</strong> <strong>void</strong> setName(String name) {</p>
<p><strong>this</strong>.name = name;</p>
<p>}</p>
<p><strong>public</strong> String getRoad() {</p>
<p><strong>return</strong> road;</p>
<p>}</p>
<p><strong>public</strong> <strong>void</strong> setRoad(String road) {</p>
<p><strong>this</strong>.road = road;</p>
<p>}</p>
<p><strong>public</strong> String getBuildingName() {</p>
<p><strong>return</strong> buildingName;</p>
<p>}</p>
<p><strong>public</strong> <strong>void</strong> setBuildingName(String buildingName) {</p>
<p><strong>this</strong>.buildingName = buildingName;</p>
<p>}</p>
<p><strong>public</strong> String getDoorno() {</p>
<p><strong>return</strong> doorno;</p>
<p>}</p>
<p><strong>public</strong> <strong>void</strong> setDoorno(String doorno) {</p>
<p><strong>this</strong>.doorno = doorno;</p>
<p>}</p>
<p>}</p>
<p align="center"><strong>AddressType.java</strong></p>
<p><strong>package</strong> com.sungard.adms.address.ws;</p>
<p><strong>public</strong> <strong>enum</strong> AddressType {</p>
<p><em>HEBBALOFFICE</em>,</p>
<p><em>ELECTRONIC_CITY</em>,</p>
<p><em>ESTEEM_TOWERS</em>,</p>
<p><em>LANGFORD_ROAD</em></p>
<p>}</p>
<p align="center"><strong>IAddressService.java</strong></p>
<p align="center"><strong> </strong></p>
<p><strong>package</strong> com.sungard.adms.address.ws;</p>
<p>/**</p>
<p>* CXF sample interface.</p>
<p>*</p>
<p>*/</p>
<p>@WebService</p>
<p><strong>public</strong> <strong>interface</strong> IAddressService {</p>
<p><strong>public</strong> Address getAddress(AddressType adsType);</p>
<p>}</p>
<p align="center"><strong>AddressService.java</strong></p>
<p><strong>package</strong> com.sungard.adms.address.ws;</p>
<p><strong>import</strong> java.util.HashMap;</p>
<p>/**</p>
<p>* This is the Implementation Class for IAddressService. Our Business Logic will</p>
<p>* be present here.</p>
<p>*</p>
<p>* <strong>@author</strong> PA71448</p>
<p>*</p>
<p>*/</p>
<p>@WebService(endpointInterface = &#8220;com.sungard.adms.address.ws.IAddressService&#8221;)</p>
<p><strong>public</strong> <strong>class</strong> AddressService <strong>implements</strong> IAddressService {</p>
<p><strong>private</strong> HashMap&lt;AddressType, Address&gt; addressList = <strong>new</strong> HashMap&lt;AddressType, Address&gt;();</p>
<p>/**</p>
<p>* Default Constructor for this service.</p>
<p>*/</p>
<p><strong>public</strong> AddressService() {</p>
<p>Address bhr = <strong>new</strong> Address();</p>
<p>bhr.setBuildingName(&#8220;Kirloskar Business Park&#8221;);</p>
<p>bhr.setName(&#8220;Sungard&#8221;);</p>
<p>bhr.setRoad(&#8220;Hyderabad Road&#8221;);</p>
<p>bhr.setDoorno(&#8220;338&#8243;);</p>
<p>addressList.put(AddressType.<em>HEBBALOFFICE</em>, bhr);</p>
<p>Address bsd = <strong>new</strong> Address();</p>
<p>bsd.setBuildingName(&#8220;Electronic City&#8221;);</p>
<p>bsd.setName(&#8220;Sungard&#8221;);</p>
<p>bsd.setRoad(&#8220;Hosur Road&#8221;);</p>
<p>bsd.setDoorno(&#8220;143&#8243;);</p>
<p>addressList.put(AddressType.<em>ELECTRONIC_CITY</em>, bsd);</p>
<p>Address bet = <strong>new</strong> Address();</p>
<p>bet.setBuildingName(&#8220;Esteem Towers&#8221;);</p>
<p>bet.setName(&#8220;Sungard&#8221;);</p>
<p>bet.setRoad(&#8220;Railway Parallel Road&#8221;);</p>
<p>bet.setDoorno(&#8220;6&#8243;);</p>
<p>addressList.put(AddressType.<em>ESTEEM_TOWERS</em>, bet);</p>
<p>Address bla = <strong>new</strong> Address();</p>
<p>bla.setBuildingName(&#8220;LangFord Avenue&#8221;);</p>
<p>bla.setName(&#8220;Sungard&#8221;);</p>
<p>bla.setRoad(&#8220;LangFord Road&#8221;);</p>
<p>bla.setDoorno(&#8220;653&#8243;);</p>
<p>addressList.put(AddressType.<em>LANGFORD_ROAD</em>, bla);</p>
<p>}</p>
<p>@Override</p>
<p><strong>public</strong> Address getAddress(AddressType adsType) {</p>
<p><strong>return</strong> addressList.get(adsType);</p>
<p>}</p>
<p>}</p>
<p><strong>Step 4:  Create beans.xml file in WEB-INF folder</strong></p>
<p align="center"><strong>beans.xml</strong></p>
<p>&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;UTF-8&#8243;?&gt;</p>
<p>&lt;beans xmlns=&#8221;http://www.springframework.org/schema/beans&#8221;</p>
<p>xmlns:xsi=&#8221;http://www.w3.org/2001/XMLSchema-instance&#8221;</p>
<p>xmlns:jaxws=&#8221;http://cxf.apache.org/jaxws&#8221;</p>
<p>xsi:schemaLocation=&#8221;</p>
<p>http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd</p>
<p>http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd&#8221;&gt;</p>
<p>&lt;import resource=&#8221;classpath:META-INF/cxf/cxf.xml&#8221; /&gt;</p>
<p>&lt;import resource=&#8221;classpath:META-INF/cxf/cxf-extension-soap.xml&#8221; /&gt;</p>
<p>&lt;import resource=&#8221;classpath:META-INF/cxf/cxf-servlet.xml&#8221; /&gt;</p>
<p>&lt;jaxws:endpoint</p>
<p>id=&#8221;helloWorld&#8221;</p>
<p>implementor=&#8221;com.sungard.adms.address.ws.AddressService&#8221;</p>
<p>address=&#8221;/AddressService&#8221; /&gt;</p>
<p>&lt;/beans&gt;<strong> </strong></p>
<p><strong>Step 5:  Create web.xml file in WEB-INF folder</strong></p>
<p align="center"><strong>web.xml</strong></p>
<p>&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;ISO-8859-1&#8243;?&gt;</p>
<p>&lt;!DOCTYPE web-app</p>
<p>PUBLIC &#8220;-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN&#8221;</p>
<p>&#8220;http://java.sun.com/dtd/web-app_2_3.dtd&#8221;&gt;</p>
<p>&lt;web-app&gt;</p>
<p>&lt;context-param&gt;</p>
<p>&lt;param-name&gt;contextConfigLocation&lt;/param-name&gt;</p>
<p>&lt;param-value&gt;WEB-INF/beans.xml&lt;/param-value&gt;</p>
<p>&lt;/context-param&gt;</p>
<p>&lt;listener&gt;</p>
<p>&lt;listener-class&gt;</p>
<p>org.springframework.web.context.ContextLoaderListener</p>
<p>&lt;/listener-class&gt;</p>
<p>&lt;/listener&gt;</p>
<p>&lt;servlet&gt;</p>
<p>&lt;servlet-name&gt;CXFServlet&lt;/servlet-name&gt;</p>
<p>&lt;display-name&gt;CXF Servlet&lt;/display-name&gt;</p>
<p>&lt;servlet-class&gt;</p>
<p>org.apache.cxf.transport.servlet.CXFServlet</p>
<p>&lt;/servlet-class&gt;</p>
<p>&lt;load-on-startup&gt;1&lt;/load-on-startup&gt;</p>
<p>&lt;/servlet&gt;</p>
<p>&lt;servlet-mapping&gt;</p>
<p>&lt;servlet-name&gt;CXFServlet&lt;/servlet-name&gt;</p>
<p>&lt;url-pattern&gt;/*&lt;/url-pattern&gt;</p>
<p>&lt;/servlet-mapping&gt;</p>
<p>&lt;/web-app&gt;</p>
<p><strong>Step 6:  Copy All class files with folder structure in WEB-INF classes Folder</strong></p>
<p><strong>Step 7:</strong></p>
<p>Create ant directory in project root folder</p>
<p>Create build.xml file</p>
<p align="center"><strong>build.xml</strong></p>
<p>&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;UTF-8&#8243;?&gt;</p>
<p>&lt;project name=&#8221;ws&#8221; basedir=&#8221;../&#8221; default=&#8221;archive&#8221;&gt;</p>
<p>&lt;target name=&#8221;archive&#8221;&gt;</p>
<p>&lt;jar destfile=&#8221;cxfaddressservice.war&#8221;  &gt;</p>
<p>&lt;fileset dir=&#8221;${basedir}&#8221;&gt;</p>
<p>&lt;include name=&#8221;**/*.class&#8221;/&gt;</p>
<p>&lt;/fileset&gt;</p>
<p>&lt;fileset dir=&#8221;${basedir}&#8221;&gt;</p>
<p>&lt;include name=&#8221;**/*.jar&#8221;/&gt;</p>
<p>&lt;/fileset&gt;</p>
<p>&lt;fileset dir=&#8221;${basedir}&#8221;&gt;</p>
<p>&lt;include name=&#8221;**/*.xml&#8221;/&gt;</p>
<p>&lt;exclude name=&#8221;**/*build*&#8221;/&gt;</p>
<p>&lt;/fileset&gt;</p>
<p>&lt;/jar&gt;</p>
<p>&lt;/target&gt;</p>
<p>&lt;/project&gt;</p>
<p><strong>Step 8: </strong>Run ant build</p>
<p><strong>Step 9: </strong>Deploy the war file in application server/web server<strong> </strong></p>
<p><strong>Step 10: </strong>Check application deployed properly or not by using following url. This url will show the wsdl file for this web service application.</p>
<p><a href="http://localhost:8080/cxfaddressservice/AddressService?wsdl">http://localhost:8080/cxfaddressservice/AddressService?wsdl</a></p>
<p><img class="aligncenter size-full wp-image-31" title="WSDL file" src="http://peterarockiaraj.files.wordpress.com/2009/09/wsdl-file2.jpg" alt="WSDL file" width="1024" height="768" /></p>
<h2>Developing Web Services Client by Using JWSDP</h2>
<p><strong>Step 1:</strong> Download Following Jar files.<strong> </strong></p>
<p>jaxrpc-impl.jar</p>
<p>jaxrpc-spi.jar</p>
<p>activation.jar</p>
<p>mail.jar</p>
<p>dom.jar</p>
<p>sax.jar</p>
<p>xalan.jar</p>
<p>xercesImpl.jar</p>
<p>saaj-impl.jar</p>
<p>FastInfoset.jar</p>
<p>saajImpl.jar</p>
<p>jsr173_api.jar</p>
<p><strong>Step 2:</strong> Create a j2EE project AddressWSClient</p>
<p><strong>Step 3: </strong>Create<strong> </strong>folders src, classes, lib ,wsdl under project root folder.</p>
<p><strong>Step 4:</strong> Create file config.xml inside the project root as</p>
<p align="center"><strong>config.xml</strong></p>
<p>&lt;?xml version=&#8221;1.0&#8243; encoding=</p>
<p>&#8220;UTF-8&#8243;?&gt;</p>
<p>&lt;configuration xmlns=&#8221;http://java.sun.com/xml/ns/jax-rpc/ri/config&#8221;&gt;</p>
<p>&lt;wsdl location=</p>
<p>&#8220;wsdl\AddressService.wsdl&#8221;</p>
<p>packageName=</p>
<p>&#8220;com.sungard.adms.address.client.gen&#8221; /&gt;</p>
<p>&lt;/configuration&gt;</p>
<p><strong>Step 5:</strong> Copy the .wsdl from <a href="http://localhost:8080/cxfaddressservice/AddressService?wsdl">http://localhost:8080/cxfaddressservice/AddressService?wsdl</a> into AddressWSClient/wsdl</p>
<p><strong>Step 6: </strong>Generate client side stubs by executing&#8230;</p>
<p>wscompile -verbose -gen -d classes -s src -keep config.xml</p>
<p><strong>Step 7: </strong>Copy all jar file into lib (Add them to build path)</p>
<p><strong>Step 8:</strong> Create class AddressClient.java as</p>
<p align="center"><strong> </strong></p>
<p align="center"><strong> </strong></p>
<p align="center"><strong>AddressClient.java</strong></p>
<p>package com.sungard.adms.address.client.gen;</p>
<p>import java.net.MalformedURLException;</p>
<p>import java.net.URL;</p>
<p>import java.rmi.RemoteException;</p>
<p>import javax.xml.namespace.QName;</p>
<p>import javax.xml.rpc.Service;</p>
<p>import javax.xml.rpc.ServiceException;</p>
<p>import javax.xml.rpc.ServiceFactory;</p>
<p>/**</p>
<p>* @author Peter Arockiaraj</p>
<p>*</p>
<p>* TODO To change the template for this generated type comment go to</p>
<p>* Window &#8211; Preferences &#8211; Java &#8211; Code Style &#8211; Code Templates</p>
<p>*/</p>
<p>public class AddressClient {</p>
<p>public static void main(String[] args) throws ServiceException,RemoteException,MalformedURLException{</p>
<p>try{</p>
<p>System.setProperty(&#8220;javax.xml.soap.MessageFactory&#8221;, &#8220;com.sun.xml.messaging.saaj.soap.ver1_1.SOAPMessageFactory1_1Impl&#8221;);</p>
<p>//System.setProperty(&#8220;javax.xml.soap.SOAPFactory&#8221;,&#8221;com.sun.xml.messaging.saaj.soap.ver1_1.SOAPFactory1_1Impl&#8221;);</p>
<p>//System.setProperty(&#8220;javax.xml.rpc.ServiceFactory&#8221;,&#8221;com.sun.xml.rpc.client.ServiceFactoryImpl&#8221;);</p>
<p>//System.setProperty(&#8220;javax.xml.soap.SOAPConnectionFactory&#8221;,&#8221;javax.xml.soap.SOAPConnectionFactory&#8221;);</p>
<p>//System.setProperty(&#8220;javax.xml.parsers.DocumentBuilderFactory&#8221;,&#8221;com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderFactoryImpl&#8221;);</p>
<p>AddressServiceService_Impl impl =</p>
<p>new AddressServiceService_Impl();</p>
<p>IAddressService ws = impl.getAddressServicePort();</p>
<p>Address result = ws.getAddress(AddressType.HEBBALOFFICE);</p>
<p>System.out.println(&#8220;Direct Call Output\n&#8221;);</p>
<p>System.out.println(&#8220;Company Name:\t&#8221;+result.getName());</p>
<p>System.out.println(&#8220;Door No:\t&#8221;+result.getDoorno());</p>
<p>System.out.println(&#8220;Building Name:\t&#8221;+result.getBuildingName());</p>
<p>System.out.println(&#8220;Road Name:\t&#8221;+result.getRoad());</p>
<p>System.out.println(&#8220;Dynamic WS call&#8221;);</p>
<p>URL url = new URL(&#8220;http://localhost:8080/cxfaddressservice/AddressService?wsdl&#8221;);</p>
<p>QName qname = new QName(&#8220;http://ws.address.adms.sungard.com/&#8221;,&#8221;AddressServiceService&#8221;);</p>
<p>ServiceFactory factory = ServiceFactory.newInstance();</p>
<p>Service service = factory.createService(url,qname);</p>
<p>IAddressService hello = (IAddressService) service.getPort(IAddressService.class);</p>
<p>Address dynaddress=ws.getAddress(AddressType.ESTEEM_TOWERS);</p>
<p>System.out.println(&#8220;\nDynamic Call Output\n&#8221;);</p>
<p>System.out.println(&#8220;Company Name:\t&#8221;+dynaddress.getName());</p>
<p>System.out.println(&#8220;Door No:\t&#8221;+dynaddress.getDoorno());</p>
<p>System.out.println(&#8220;Building Name:\t&#8221;+dynaddress.getBuildingName());</p>
<p>System.out.println(&#8220;Road Name:\t&#8221;+dynaddress.getRoad());</p>
<p>}catch(Exception se){</p>
<p>System.out.println(&#8220;ServiceException &#8221; + se.getMessage());</p>
<p>}</p>
<p>}</p>
<p>}</p>
<p><strong>Step 9:</strong> Run AddressClient.java as a normal java application.</p>
<p><img class="aligncenter size-full wp-image-33" title="Client Output" src="http://peterarockiaraj.files.wordpress.com/2009/09/client-output3.jpg" alt="Client Output" width="1024" height="768" /></p>
<p align="center">
<h2 style="text-align:center;">Developing Simple Web Services Client by Using Flex</h2>
<p>Step 1: Create New Flex Project in Flex Builder.</p>
<p>Step 2:  Open Main Application MXML.</p>
<p>Step 3: Copy &amp; Paste Following Code.</p>
<p>&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;utf-8&#8243;?&gt;</p>
<p>&lt;mx:Application xmlns:mx=&#8221;http://www.adobe.com/2006/mxml&#8221; xmlns=&#8221;*&#8221; layout=&#8221;absolute&#8221;</p>
<p>creationComplete=&#8221;userRequest.returnRecords()&#8221; height=&#8221;249&#8243; width=&#8221;538&#8243;&gt;</p>
<p>&lt;mx:Form x=&#8221;22&#8243; y=&#8221;10&#8243; width=&#8221;493&#8243;&gt;</p>
<p>&lt;mx:HBox&gt;</p>
<p>&lt;mx:Label text=&#8221;Address Code&#8221;/&gt;</p>
<p>&lt;mx:TextInputfont-size:10.0pt;font-family:&#8221;Courier New&#8221;;mso-fareast-font-family:&#8221;Times New Roman&#8221;; color:#990000&#8243;&gt;addresscode&#8221;/&gt;</p>
<p>&lt;/mx:HBox&gt;</p>
<p>&lt;mx:HBox&gt;</p>
<p>&lt;mx:DataGridfont-size:10.0pt;font-family:&#8221;Courier New&#8221;; mso-fareast-font-family:&#8221;Times New Roman&#8221;;color:#990000&#8243;&gt;dgUserRequest&#8221; x=&#8221;22&#8243; y=&#8221;128&#8243;&gt;</p>
<p>&lt;mx:columns&gt;</p>
<p>&lt;mx:DataGridColumn headerText=&#8221;Building Name&#8221; dataField=&#8221;buildingName&#8221;/&gt;</p>
<p>&lt;mx:DataGridColumn headerText=&#8221;Door Number&#8221; dataField=&#8221;doorno&#8221;/&gt;</p>
<p>&lt;mx:DataGridColumn headerText=&#8221;Name&#8221; dataField=&#8221;name&#8221;/&gt;</p>
<p>&lt;mx:DataGridColumn headerText=&#8221;Road Name&#8221; dataField=&#8221;road&#8221;/&gt;</p>
<p>&lt;/mx:columns&gt;</p>
<p>&lt;/mx:DataGrid&gt;</p>
<p>&lt;/mx:HBox&gt;</p>
<p>&lt;mx:Button label=&#8221;Submit&#8221; click=&#8221;clickHandler()&#8221;/&gt;</p>
<p>&lt;/mx:Form&gt;</p>
<p>&lt;mx:WebService</p>
<p>id=&#8221;userRequest&#8221;</p>
<p>wsdl=&#8221;http://localhost:8080/cxfaddressservice/AddressService?wsdl&#8221;&gt;</p>
<p>&lt;mx:operation name=&#8221;getAddress&#8221; resultFormat=&#8221;object&#8221; result=&#8221;insertCFCHandler(event)&#8221;</p>
<p>fault=&#8221;mx.controls.Alert.show(event.fault.faultString)&#8221;/&gt;</p>
<p>&lt;/mx:WebService&gt;</p>
<p>&lt;mx:Script&gt;</p>
<p>&lt;![CDATA[</p>
<p><strong>import</strong> mx.rpc.events.ResultEvent;</p>
<p><strong>private</strong> <strong>function</strong> insertCFCHandler(e:ResultEvent):<strong>void</strong></p>
<p>{</p>
<p>dgUserRequest.dataProvider = e.result;</p>
<p>}</p>
<p><strong>private</strong> <strong>function</strong> clickHandler():<strong>void</strong></p>
<p>{</p>
<p>userRequest.getAddress(addresscode.text);</p>
<p>}</p>
<p>]]&gt;</p>
<p>&lt;/mx:Script&gt;</p>
<p>&lt;/mx:Application&gt;</p>
<p>Step 4:  Run Application.</p>
<p><img class="aligncenter size-full wp-image-34" title="FlexOutput" src="http://peterarockiaraj.files.wordpress.com/2009/09/flexoutput.jpg" alt="FlexOutput" width="1024" height="768" /></p>
<br />Posted in Web Services  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/peterarockiaraj.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/peterarockiaraj.wordpress.com/29/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/peterarockiaraj.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/peterarockiaraj.wordpress.com/29/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/peterarockiaraj.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/peterarockiaraj.wordpress.com/29/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/peterarockiaraj.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/peterarockiaraj.wordpress.com/29/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/peterarockiaraj.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/peterarockiaraj.wordpress.com/29/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/peterarockiaraj.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/peterarockiaraj.wordpress.com/29/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/peterarockiaraj.wordpress.com/29/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/peterarockiaraj.wordpress.com/29/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=peterarockiaraj.wordpress.com&amp;blog=9287010&amp;post=29&amp;subd=peterarockiaraj&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://peterarockiaraj.wordpress.com/2009/09/02/developing-web-services-by-using-spring-and-cxf/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f6e3d599f1ab85a63c80822d5e870f6a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">peterarockiaraj</media:title>
		</media:content>

		<media:content url="http://peterarockiaraj.files.wordpress.com/2009/09/folder-structure2.jpg" medium="image">
			<media:title type="html">Folder Structure</media:title>
		</media:content>

		<media:content url="http://peterarockiaraj.files.wordpress.com/2009/09/wsdl-file2.jpg" medium="image">
			<media:title type="html">WSDL file</media:title>
		</media:content>

		<media:content url="http://peterarockiaraj.files.wordpress.com/2009/09/client-output3.jpg" medium="image">
			<media:title type="html">Client Output</media:title>
		</media:content>

		<media:content url="http://peterarockiaraj.files.wordpress.com/2009/09/flexoutput.jpg" medium="image">
			<media:title type="html">FlexOutput</media:title>
		</media:content>
	</item>
		<item>
		<title>Developing Web Services by Using Spring and XFire</title>
		<link>http://peterarockiaraj.wordpress.com/2009/09/02/developing-web-services-by-using-spring-and-xfire/</link>
		<comments>http://peterarockiaraj.wordpress.com/2009/09/02/developing-web-services-by-using-spring-and-xfire/#comments</comments>
		<pubDate>Wed, 02 Sep 2009 10:17:03 +0000</pubDate>
		<dc:creator>Peter Arockiaraj</dc:creator>
				<category><![CDATA[Web Services]]></category>

		<guid isPermaLink="false">http://peterarockiaraj.wordpress.com/?p=20</guid>
		<description><![CDATA[Step 1:  Download Following Jar files. Step 2:  Create Following Folder Structure Step 3:  Create Following classes Address AddressType IAddressService AddressService Address.java package com.sungard.adms.address.ws; public class Address { private String name; private String doorno; private String road; private String buildingName; public String getName() { return name; } public void setName(String name) { this.name = name; [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=peterarockiaraj.wordpress.com&amp;blog=9287010&amp;post=20&amp;subd=peterarockiaraj&amp;ref=&amp;feed=1" width="1" height="1" />]]></description>
			<content:encoded><![CDATA[<p>Step 1:  Download Following Jar files.</p>
<p><img class="aligncenter size-full wp-image-21" title="required jars" src="http://peterarockiaraj.files.wordpress.com/2009/09/required-jars.jpg" alt="required jars" width="178" height="312" /></p>
<p>Step 2:  Create Following Folder Structure</p>
<p><img class="aligncenter size-full wp-image-22" title="Folder Structure" src="http://peterarockiaraj.files.wordpress.com/2009/09/folder-structure.jpg" alt="Folder Structure" width="110" height="57" /></p>
<p>Step 3:  Create Following classes</p>
<ol>
<li>Address</li>
<li>AddressType</li>
<li>IAddressService</li>
<li>AddressService</li>
</ol>
<p align="center"><strong>Address.java</strong></p>
<p><strong> </strong></p>
<p><strong>package</strong> com.sungard.adms.address.ws;</p>
<p><strong> </strong></p>
<p><strong>public</strong> <strong>class</strong> Address {</p>
<p><strong>private</strong> String name;</p>
<p><strong>private</strong> String doorno;</p>
<p><strong>private</strong> String road;</p>
<p><strong>private</strong> String buildingName;</p>
<p><strong>public</strong> String getName() {</p>
<p><strong>return</strong> name;</p>
<p>}</p>
<p><strong>public</strong> <strong>void</strong> setName(String name) {</p>
<p><strong>this</strong>.name = name;</p>
<p>}</p>
<p><strong>public</strong> String getRoad() {</p>
<p><strong>return</strong> road;</p>
<p>}</p>
<p><strong>public</strong> <strong>void</strong> setRoad(String road) {</p>
<p><strong>this</strong>.road = road;</p>
<p>}</p>
<p><strong>public</strong> String getBuildingName() {</p>
<p><strong>return</strong> buildingName;</p>
<p>}</p>
<p><strong>public</strong> <strong>void</strong> setBuildingName(String buildingName) {</p>
<p><strong>this</strong>.buildingName = buildingName;</p>
<p>}</p>
<p><strong>public</strong> String getDoorno() {</p>
<p><strong>return</strong> doorno;</p>
<p>}</p>
<p><strong>public</strong> <strong>void</strong> setDoorno(String doorno) {</p>
<p><strong>this</strong>.doorno = doorno;</p>
<p>}</p>
<p>}</p>
<p align="center"><strong>AddressType.java</strong></p>
<p><strong>package</strong> com.sungard.adms.address.ws;</p>
<p><strong>public</strong> <strong>enum</strong> AddressType {</p>
<p><em>HEBBALOFFICE</em>,</p>
<p><em>ELECTRONIC_CITY</em>,</p>
<p><em>ESTEEM_TOWERS</em>,</p>
<p><em>LANGFORD_ROAD</em></p>
<p>}</p>
<p align="center"><strong> </strong></p>
<p align="center"><strong>IAddressService.java</strong></p>
<p align="center"><strong> </strong></p>
<p><strong>package</strong> com.sungard.adms.address.ws;</p>
<p>/** XFire sample interface.</p>
<p>*</p>
<p>*/</p>
<p><strong>public</strong> <strong>interface</strong> IAddressService {</p>
<p><strong>public</strong> Address getAddress(AddressType adsType);</p>
<p>}</p>
<p align="center"><strong>AddressService.java</strong></p>
<p><strong>package</strong> com.sungard.adms.address.ws;</p>
<p><strong>import</strong> java.util.HashMap;</p>
<p>/**</p>
<p>* This is the Implementation Class for IAddressService. Our Business Logic will</p>
<p>* be present here.</p>
<p>*</p>
<p>* <strong>@author</strong> PA71448</p>
<p>*</p>
<p>*/</p>
<p><strong>public</strong> <strong>class</strong> AddressService <strong>implements</strong> IAddressService {</p>
<p><strong>private</strong> HashMap&lt;AddressType, Address&gt; addressList = <strong>new</strong> HashMap&lt;AddressType, Address&gt;();</p>
<p>/**</p>
<p>* Default Constructor for this service.</p>
<p>*/</p>
<p><strong>public</strong> AddressService() {</p>
<p>Address bhr = <strong>new</strong> Address();</p>
<p>bhr.setBuildingName(&#8220;Kirloskar Business Park&#8221;);</p>
<p>bhr.setName(&#8220;Sungard&#8221;);</p>
<p>bhr.setRoad(&#8220;Hyderabad Road&#8221;);</p>
<p>bhr.setDoorno(&#8220;338&#8243;);</p>
<p>addressList.put(AddressType.<em>HEBBALOFFICE</em>, bhr);</p>
<p>Address bsd = <strong>new</strong> Address();</p>
<p>bsd.setBuildingName(&#8220;Electronic City&#8221;);</p>
<p>bsd.setName(&#8220;Sungard&#8221;);</p>
<p>bsd.setRoad(&#8220;Hosur Road&#8221;);</p>
<p>bsd.setDoorno(&#8220;143&#8243;);</p>
<p>addressList.put(AddressType.<em>ELECTRONIC_CITY</em>, bsd);</p>
<p>Address bet = <strong>new</strong> Address();</p>
<p>bet.setBuildingName(&#8220;Esteem Towers&#8221;);</p>
<p>bet.setName(&#8220;Sungard&#8221;);</p>
<p>bet.setRoad(&#8220;Railway Parallel Road&#8221;);</p>
<p>bet.setDoorno(&#8220;6&#8243;);</p>
<p>addressList.put(AddressType.<em>ESTEEM_TOWERS</em>, bet);</p>
<p>Address bla = <strong>new</strong> Address();</p>
<p>bla.setBuildingName(&#8220;LangFord Avenue&#8221;);</p>
<p>bla.setName(&#8220;Sungard&#8221;);</p>
<p>bla.setRoad(&#8220;LangFord Road&#8221;);</p>
<p>bla.setDoorno(&#8220;653&#8243;);</p>
<p>addressList.put(AddressType.<em>LANGFORD_ROAD</em>, bla);</p>
<p>}</p>
<p>@Override</p>
<p><strong>public</strong> Address getAddress(AddressType adsType) {</p>
<p><strong>return</strong> addressList.get(adsType);</p>
<p>}</p>
<p>}</p>
<p>Step 4:  Create applicationContext.xml file in WEB-INF folder</p>
<p align="center"><strong>applicationContext.xml</strong></p>
<p>&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;UTF-8&#8243;?&gt;</p>
<p>&lt;!DOCTYPE beans PUBLIC &#8220;-//SPRING//DTD BEAN//EN&#8221; &#8220;http://www.springframework.org/dtd/spring-beans.dtd&#8221;&gt;</p>
<p>&lt;beans&gt;</p>
<p>&lt;bean/&gt;</p>
<p>&lt;/beans&gt;</p>
<p>Step 5: Create xfire-servlet.xml file in WEB-INF folder</p>
<p align="center"><strong>xfire-servlet.xml</strong></p>
<p>&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;UTF-8&#8243;?&gt;</p>
<p>&lt;!DOCTYPE beans PUBLIC &#8220;-//SPRING//DTD BEAN//EN&#8221; &#8220;http://www.springframework.org/dtd/spring-beans.dtd&#8221;&gt;</p>
<p>&lt;beans&gt;</p>
<p>&lt;bean class=&#8221;org.springframework.web.servlet.handler.SimpleUrlHandlerMapping&#8221;&gt;</p>
<p>&lt;property&gt;</p>
<p>&lt;map&gt;</p>
<p>&lt;entry key=&#8221;/AddressService&#8221;&gt;</p>
<p>&lt;ref bean=&#8221;getAddress&#8221;/&gt;</p>
<p>&lt;/entry&gt;</p>
<p>&lt;/map&gt;</p>
<p>&lt;/property&gt;</p>
<p>&lt;/bean&gt;</p>
<p>&lt;!&#8211; Declare a parent bean with all properties common to both services &#8211;&gt;</p>
<p>&lt;bean class=&#8221;org.codehaus.xfire.spring.remoting.XFireExporter&#8221;&gt;</p>
<p>&lt;property&gt;</p>
<p>&lt;ref bean=&#8221;xfire.serviceFactory&#8221;/&gt;</p>
<p>&lt;/property&gt;</p>
<p>&lt;property&gt;</p>
<p>&lt;ref bean=&#8221;xfire&#8221;/&gt;</p>
<p>&lt;/property&gt;</p>
<p>&lt;property&gt;</p>
<p>&lt;ref bean=&#8221;addressService&#8221;/&gt;</p>
<p>&lt;/property&gt;</p>
<p>&lt;property&gt;</p>
<p>&lt;value&gt;com.sungard.adms.address.ws.IAddressService&lt;/value&gt;</p>
<p>&lt;/property&gt;</p>
<p>&lt;/bean&gt;</p>
<p>&lt;/beans&gt;</p>
<p>Step 6:  Create web.xml file in WEB-INF folder</p>
<p align="center"><strong>web.xml</strong></p>
<p>&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;ISO-8859-1&#8243;?&gt;</p>
<p>&lt;!DOCTYPE web-app</p>
<p>PUBLIC &#8220;-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN&#8221;</p>
<p>&#8220;http://java.sun.com/dtd/web-app_2_3.dtd&#8221;&gt;</p>
<p>&lt;web-app&gt;</p>
<p>&lt;context-param&gt;</p>
<p>&lt;param-name&gt;contextConfigLocation&lt;/param-name&gt;</p>
<p>&lt;param-value&gt;/WEB-INF/applicationContext.xml</p>
<p>classpath:org/codehaus/xfire/spring/xfire.xml&lt;/param-value&gt;</p>
<p>&lt;/context-param&gt;</p>
<p>&lt;listener&gt;</p>
<p>&lt;listener-class&gt;org.springframework.web.context.ContextLoaderListener&lt;/listener-class&gt;</p>
<p>&lt;/listener&gt;</p>
<p>&lt;servlet&gt;</p>
<p>&lt;servlet-name&gt;xfire&lt;/servlet-name&gt;</p>
<p>&lt;servlet-class&gt;org.springframework.web.servlet.DispatcherServlet&lt;/servlet-class&gt;</p>
<p>&lt;/servlet&gt;</p>
<p>&lt;servlet-mapping&gt;</p>
<p>&lt;servlet-name&gt;xfire&lt;/servlet-name&gt;</p>
<p>&lt;url-pattern&gt;/*&lt;/url-pattern&gt;</p>
<p>&lt;/servlet-mapping&gt;</p>
<p>&lt;/web-app&gt;</p>
<p>Step 7:  Copy All class files with folder structure in WEB-INF classes Folder</p>
<p>Step 8:</p>
<p>Create ant directory in project root folder</p>
<p>Create build.xml file</p>
<p align="center"><strong> </strong></p>
<p align="center"><strong> </strong></p>
<p align="center"><strong>build.xml</strong></p>
<p>&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;UTF-8&#8243;?&gt;</p>
<p>&lt;project name=&#8221;ws&#8221; basedir=&#8221;../&#8221; default=&#8221;archive&#8221;&gt;</p>
<p>&lt;target name=&#8221;archive&#8221;&gt;</p>
<p>&lt;jar destfile=&#8221;address.war&#8221;  &gt;</p>
<p>&lt;fileset dir=&#8221;${basedir}&#8221;&gt;</p>
<p>&lt;include name=&#8221;**/*.class&#8221;/&gt;</p>
<p>&lt;/fileset&gt;</p>
<p>&lt;fileset dir=&#8221;${basedir}&#8221;&gt;</p>
<p>&lt;include name=&#8221;**/*.jar&#8221;/&gt;</p>
<p>&lt;/fileset&gt;</p>
<p>&lt;fileset dir=&#8221;${basedir}&#8221;&gt;</p>
<p>&lt;include name=&#8221;**/*.xml&#8221;/&gt;</p>
<p>&lt;exclude name=&#8221;**/*build*&#8221;/&gt;</p>
<p>&lt;/fileset&gt;</p>
<p>&lt;/jar&gt;</p>
<p>&lt;/target&gt;</p>
<p>&lt;/project&gt;</p>
<p>Step 9: Run ant build</p>
<p>Step 10: Deploy the war file in application server/web server</p>
<p>Step 11: Check application deployed properly or not by using following url. This url will show the wsdl file for this web service application.</p>
<p><a href="http://localhost:8080/address/AddressService?wsdl">http://localhost:8080/address/AddressService?wsdl</a></p>
<p><img class="aligncenter size-full wp-image-23" title="WSDL file" src="http://peterarockiaraj.files.wordpress.com/2009/09/wsdl-file1.jpg" alt="WSDL file" width="1024" height="768" /></p>
<h2>Developing Web Services Client By Using Spring and XFire</h2>
<p>Step 1: Download Following Jar files.</p>
<p><img class="aligncenter size-full wp-image-24" title="required jars" src="http://peterarockiaraj.files.wordpress.com/2009/09/required-jars1.jpg" alt="required jars" width="165" height="312" /></p>
<p>Step 2:  Create Following Folder Structure</p>
<p><img class="aligncenter size-full wp-image-25" title="Folder Structure" src="http://peterarockiaraj.files.wordpress.com/2009/09/folder-structure1.jpg" alt="Folder Structure" width="110" height="56" /></p>
<p>Step 3: Create following classes</p>
<ol>
<li>Address</li>
<li>AddressType</li>
<li>IAddressService</li>
<li>WSClient</li>
<li>MyApplicationClient       (This is normal Java Application      client. Not a web Client)</li>
</ol>
<p align="center"><strong>WsClient.java</strong></p>
<p>package com.sungard.adms.address.ws.client;</p>
<p>import java.io.IOException;</p>
<p>import java.net.MalformedURLException;</p>
<p>import javax.servlet.ServletException;</p>
<p>import javax.servlet.http.HttpServlet;</p>
<p>import javax.servlet.http.HttpServletRequest;</p>
<p>import javax.servlet.http.HttpServletResponse;</p>
<p>import org.apache.log4j.Logger;</p>
<p>import org.codehaus.xfire.XFire;</p>
<p>import org.codehaus.xfire.XFireFactory;</p>
<p>import org.codehaus.xfire.client.XFireProxyFactory;</p>
<p>import org.codehaus.xfire.service.Service;</p>
<p>import org.codehaus.xfire.service.binding.ObjectServiceFactory;</p>
<p>import com.sungard.adms.address.ws.Address;</p>
<p>import com.sungard.adms.address.ws.AddressType;</p>
<p>import com.sungard.adms.address.ws.IAddressService;</p>
<p>/**</p>
<p>* Servlet working as a Web services client.</p>
<p>*</p>
<p>*/</p>
<p>public class WsClient extends HttpServlet {</p>
<p>private static Logger log = Logger.getLogger(WsClient.class);</p>
<p>/*</p>
<p>* doGet():</p>
<p>*/</p>
<p>protected void doGet(HttpServletRequest req, HttpServletResponse resp)</p>
<p>throws ServletException, IOException {</p>
<p>// get request parameters</p>
<p>String addType = req.getParameter(&#8220;addressType&#8221;);</p>
<p>// use default values wherever needed</p>
<p>AddressType addrType;</p>
<p>if (addType == null)</p>
<p>addrType = AddressType.HEBBALOFFICE;</p>
<p>else</p>
<p>addrType = AddressType.valueOf(addType);</p>
<p>// invoke callWebService()</p>
<p>log.debug(&#8220;doGet(): call web service now. &#8220;);</p>
<p>Address responseGot = null;</p>
<p>try {</p>
<p>responseGot = callWebService(AddressType.HEBBALOFFICE);</p>
<p>} catch (Exception e) {</p>
<p>e.printStackTrace();</p>
<p>}</p>
<p>// prepare the response page</p>
<p>resp.setContentType(&#8220;text/html&#8221;);</p>
<p>java.io.PrintWriter out = resp.getWriter();</p>
<p>out.println(&#8220;&lt;html&gt;&#8221;);</p>
<p>out</p>
<p>.println(&#8220;&lt;head&gt;&lt;title&gt;Sungard Bangalore &#8211; Address Service&lt;/title&gt;&lt;/head&gt;&lt;body&gt;&#8221;);</p>
<p>out.println(&#8220;&lt;h2&gt;Sungard Bangalore &#8211; Address Service &lt;/h2&gt;&#8221;);</p>
<p>out.println(&#8220;&lt;B&gt;Service Request&lt;/B&gt;&#8221; + &#8220;&lt;br&gt;&#8221; + &#8220;Address &#8211; &#8221; + addType</p>
<p>+ &#8220;&lt;TABLE&gt;&#8221; + &#8220;&lt;TR&gt;&lt;TD&gt;Name: &lt;/TD&gt;&lt;TD&gt;&#8221; + responseGot.getName()</p>
<p>+ &#8220;&lt;/TD&gt;&lt;/TR&gt;&#8221; + &#8220;&lt;TR&gt;&lt;TD&gt;Door Number: &lt;/TD&gt;&lt;TD&gt;&#8221;</p>
<p>+ responseGot.getDoorno() + &#8220;&lt;/TD&gt;&lt;/TR&gt;&#8221;</p>
<p>+ &#8220;&lt;TR&gt;&lt;TD&gt;Building Name: &lt;/TD&gt;&lt;TD&gt;&#8221;</p>
<p>+ responseGot.getBuildingName() + &#8220;&lt;br&gt;&#8221; + &#8220;&lt;/TD&gt;&lt;/TR&gt;&#8221;</p>
<p>+ &#8220;&lt;TR&gt;&lt;TD&gt;Road: &lt;/TD&gt;&lt;TD&gt;&#8221; + responseGot.getRoad()</p>
<p>+ &#8220;&lt;/TD&gt;&lt;/TR&gt;&#8221; + &#8220;&lt;/TABLE&gt;&#8221;);</p>
<p>}</p>
<p>/*</p>
<p>* call the web service</p>
<p>*</p>
<p>*/</p>
<p>public static Address callWebService(AddressType addtype)</p>
<p>throws MalformedURLException, Exception {</p>
<p>// create a metadata of the service</p>
<p>Service serviceModel = new ObjectServiceFactory()</p>
<p>.create(IAddressService.class);</p>
<p>System.out.println(&#8220;callSoapServiceLocal(): got service model.&#8221;);</p>
<p>// create a proxy for the deployed service</p>
<p>XFire xfire = XFireFactory.newInstance().getXFire();</p>
<p>XFireProxyFactory factory = new XFireProxyFactory(xfire);</p>
<p>String serviceUrl = &#8220;http://localhost:8080/address/AddressService&#8221;;</p>
<p>IAddressService client = null;</p>
<p>try {</p>
<p>client = (IAddressService) factory.create(serviceModel, serviceUrl);</p>
<p>} catch (MalformedURLException e) {</p>
<p>e.printStackTrace();</p>
<p>}</p>
<p>// invoke the service</p>
<p>Address address = null;</p>
<p>try {</p>
<p>address = client.getAddress(addtype);</p>
<p>} catch (Exception e) {</p>
<p>e.printStackTrace();</p>
<p>}</p>
<p>// return the response</p>
<p>return address;</p>
<p>}</p>
<p>/*</p>
<p>* doPost():</p>
<p>*/</p>
<p>protected void doPost(HttpServletRequest req, HttpServletResponse resp)</p>
<p>throws ServletException, IOException {</p>
<p>doGet(req, resp);</p>
<p>}</p>
<p>static String SPACE = &#8220;&amp;nbsp; &amp;nbsp;&#8221;;</p>
<p>}</p>
<p align="center"><strong>MyApplicationClient.java</strong></p>
<p>package com.sungard.adms.address.ws.client;</p>
<p>import java.net.MalformedURLException;</p>
<p>import org.codehaus.xfire.XFire;</p>
<p>import org.codehaus.xfire.XFireFactory;</p>
<p>import org.codehaus.xfire.client.XFireProxyFactory;</p>
<p>import org.codehaus.xfire.service.Service;</p>
<p>import org.codehaus.xfire.service.binding.ObjectServiceFactory;</p>
<p>import com.sungard.adms.address.ws.Address;</p>
<p>import com.sungard.adms.address.ws.AddressType;</p>
<p>import com.sungard.adms.address.ws.IAddressService;</p>
<p>public class MyApplicationClient {</p>
<p>public static void main(String[] args) {</p>
<p>try{</p>
<p>Address address=MyApplicationClient.callWebService(AddressType.LANGFORD_ROAD);</p>
<p>System.out.println(address.getName());</p>
<p>System.out.println(address.getDoorno());</p>
<p>System.out.println(address.getBuildingName());</p>
<p>System.out.println(address.getRoad());</p>
<p>}catch(Exception e){</p>
<p>e.printStackTrace();</p>
<p>}</p>
<p>}</p>
<p>public static Address callWebService(AddressType addtype)</p>
<p>throws MalformedURLException, Exception{</p>
<p>//create a metadata of the service</p>
<p>Service serviceModel = new ObjectServiceFactory().create(IAddressService.class);</p>
<p>//create a proxy for the deployed service</p>
<p>XFire xfire = XFireFactory.newInstance().getXFire();</p>
<p>XFireProxyFactory factory = new XFireProxyFactory(xfire);</p>
<p>String serviceUrl = &#8220;http://localhost:8080/address/AddressService&#8221;;</p>
<p>IAddressService client = null;</p>
<p>try {</p>
<p>client = (IAddressService) factory.create(serviceModel, serviceUrl);</p>
<p>} catch (MalformedURLException e) {</p>
<p>e.printStackTrace();</p>
<p>}</p>
<p>//invoke the service</p>
<p>Address address = null;</p>
<p>try {</p>
<p>address = client.getAddress(addtype);</p>
<p>} catch (Exception e){</p>
<p>e.printStackTrace();</p>
<p>}</p>
<p>//return the response</p>
<p>return address;</p>
<p>}</p>
<p>}</p>
<p>Step 4: Copy all the class files in WEB-INF/classes folder with package folder structure.</p>
<p>Step 5: Create web.xml file in WEB-INF folder</p>
<p align="center"><strong>web.xml</strong></p>
<p>&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;UTF-8&#8243;?&gt;</p>
<p>&lt;!DOCTYPE web-app PUBLIC &#8220;-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN&#8221; &#8220;http://java.sun.com/dtd/web-app_2_3.dtd&#8221;&gt;</p>
<p>&lt;web-app id=&#8221;WebApp_ID&#8221;&gt;</p>
<p>&lt;display-name&gt;WebServices using XFire&lt;/display-name&gt;</p>
<p>&lt;servlet&gt;</p>
<p>&lt;servlet-name&gt;WsClient&lt;/servlet-name&gt;</p>
<p>&lt;display-name&gt;WsClientServlet&lt;/display-name&gt;</p>
<p>&lt;description&gt;&lt;/description&gt;</p>
<p>&lt;servlet-class&gt;com.sungard.adms.address.ws.client.WsClient&lt;/servlet-class&gt;</p>
<p>&lt;/servlet&gt;</p>
<p>&lt;servlet&gt;</p>
<p>&lt;servlet-name&gt;XFireServlet&lt;/servlet-name&gt;</p>
<p>&lt;display-name&gt;XFire Servlet&lt;/display-name&gt;</p>
<p>&lt;servlet-class&gt;org.codehaus.xfire.transport.http.XFireConfigurableServlet&lt;/servlet-class&gt;</p>
<p>&lt;/servlet&gt;</p>
<p>&lt;servlet-mapping&gt;</p>
<p>&lt;servlet-name&gt;XFireServlet&lt;/servlet-name&gt;</p>
<p>&lt;url-pattern&gt;/servlet/XFireServlet/*&lt;/url-pattern&gt;</p>
<p>&lt;/servlet-mapping&gt;</p>
<p>&lt;servlet-mapping&gt;</p>
<p>&lt;servlet-name&gt;XFireServlet&lt;/servlet-name&gt;</p>
<p>&lt;url-pattern&gt;/services/*&lt;/url-pattern&gt;</p>
<p>&lt;/servlet-mapping&gt;</p>
<p>&lt;servlet-mapping&gt;</p>
<p>&lt;servlet-name&gt;WsClient&lt;/servlet-name&gt;</p>
<p>&lt;url-pattern&gt;/ws&lt;/url-pattern&gt;</p>
<p>&lt;/servlet-mapping&gt;</p>
<p>&lt;/web-app&gt;</p>
<p>Step 6: Create addressclient.war file by using ant script.</p>
<p>Step 7: deploy the client application in AppServer/WebServer.</p>
<p>Step 8: Run the client by using following url</p>
<p><a href="http://localhost:8080/addressclient/ws?addressType=HEBBALOFFICE">http://localhost:8080/addressclient/ws?addressType=HEBBALOFFICE</a></p>
<p>addressType value you can give any one of the Enumerator value(AddressType)</p>
<p><img class="aligncenter size-full wp-image-26" title="Client Output" src="http://peterarockiaraj.files.wordpress.com/2009/09/client-output1.jpg" alt="Client Output" width="1024" height="768" /></p>
<p>Step 9: Or Run MyApplicationClient as a normal java application.</p>
<br />Posted in Web Services  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/peterarockiaraj.wordpress.com/20/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/peterarockiaraj.wordpress.com/20/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/peterarockiaraj.wordpress.com/20/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/peterarockiaraj.wordpress.com/20/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gofacebook/peterarockiaraj.wordpress.com/20/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/facebook/peterarockiaraj.wordpress.com/20/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gotwitter/peterarockiaraj.wordpress.com/20/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/twitter/peterarockiaraj.wordpress.com/20/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/peterarockiaraj.wordpress.com/20/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/peterarockiaraj.wordpress.com/20/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/peterarockiaraj.wordpress.com/20/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/peterarockiaraj.wordpress.com/20/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/peterarockiaraj.wordpress.com/20/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/peterarockiaraj.wordpress.com/20/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=peterarockiaraj.wordpress.com&amp;blog=9287010&amp;post=20&amp;subd=peterarockiaraj&amp;ref=&amp;feed=1" width="1" height="1" />]]></content:encoded>
			<wfw:commentRss>http://peterarockiaraj.wordpress.com/2009/09/02/developing-web-services-by-using-spring-and-xfire/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/f6e3d599f1ab85a63c80822d5e870f6a?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">peterarockiaraj</media:title>
		</media:content>

		<media:content url="http://peterarockiaraj.files.wordpress.com/2009/09/required-jars.jpg" medium="image">
			<media:title type="html">required jars</media:title>
		</media:content>

		<media:content url="http://peterarockiaraj.files.wordpress.com/2009/09/folder-structure.jpg" medium="image">
			<media:title type="html">Folder Structure</media:title>
		</media:content>

		<media:content url="http://peterarockiaraj.files.wordpress.com/2009/09/wsdl-file1.jpg" medium="image">
			<media:title type="html">WSDL file</media:title>
		</media:content>

		<media:content url="http://peterarockiaraj.files.wordpress.com/2009/09/required-jars1.jpg" medium="image">
			<media:title type="html">required jars</media:title>
		</media:content>

		<media:content url="http://peterarockiaraj.files.wordpress.com/2009/09/folder-structure1.jpg" medium="image">
			<media:title type="html">Folder Structure</media:title>
		</media:content>

		<media:content url="http://peterarockiaraj.files.wordpress.com/2009/09/client-output1.jpg" medium="image">
			<media:title type="html">Client Output</media:title>
		</media:content>
	</item>
	</channel>
</rss>
