<?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/"
	>

<channel>
	<title>Radek's Tech Blog &#187; web service</title>
	<atom:link href="http://urbas.tk/index.php/tag/web-service/feed/" rel="self" type="application/rss+xml" />
	<link>http://urbas.tk</link>
	<description>Radoslaw H. Urbas homepage / blog</description>
	<lastBuildDate>Tue, 01 Jun 2010 20:31:19 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Spring remoting quickstart</title>
		<link>http://urbas.tk/index.php/2007/09/25/spring-remoting-quickstart/</link>
		<comments>http://urbas.tk/index.php/2007/09/25/spring-remoting-quickstart/#comments</comments>
		<pubDate>Tue, 25 Sep 2007 08:17:00 +0000</pubDate>
		<dc:creator>Radoslaw Urbas</dc:creator>
				<category><![CDATA[IT]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[java]]></category>
		<category><![CDATA[remoting]]></category>
		<category><![CDATA[spring]]></category>
		<category><![CDATA[web service]]></category>

		<guid isPermaLink="false">http://urbas.tk/?p=14</guid>
		<description><![CDATA[I have spent a lot of time on configuring Spring remoting properly (mostly because of problems with DTD). To expose business logic via for example XFire Web Services we have to define context and listeners in web.xml, example: &#60;?xml version=&#8221;1.0&#8243; encoding=&#8221;ISO-8859-1&#8243;?&#62; &#60;!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;&#62; &#60;web-app&#62; &#60;context-param&#62; &#60;param-name&#62;contextConfigLocation&#60;/param-name&#62; &#60;param-value&#62;/WEB-INF/applicationContext.xml&#60;/param-value&#62; [...]]]></description>
			<content:encoded><![CDATA[<p>I have spent a lot of time on configuring Spring remoting properly (mostly because of problems with DTD).<br />
To expose business logic via for example XFire Web Services we have to define context and listeners in web.xml, example:</p>
<p><span style="font-size: 85%"><span style="font-family: courier new">&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;ISO-8859-1&#8243;?&gt;<br />
</span><span style="color: #ff0000; font-family: courier new">&lt;!DOCTYPE web-app<br />
PUBLIC &#8220;-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN&#8221;</span><br />
<span style="font-family: courier new"><span style="color: #ff0000">&#8220;http://java.sun.com/dtd/web-app_2_3.dtd&#8221;&gt;</span><br />
</span><span style="font-family: courier new">&lt;web-app&gt;<br />
</span><span style="font-family: courier new">&lt;context-param&gt;<br />
</span><span style="color: #ff0000; font-family: courier new">&lt;param-name&gt;contextConfigLocation&lt;/param-name&gt;</span><br />
<span style="color: #ff0000; font-family: courier new">        &lt;param-value&gt;/WEB-INF/applicationContext.xml&lt;/param-value&gt;<br />
</span><span style="font-family: courier new"><span style="color: #ff0000">&lt;/context-param&gt;</span><br />
</span><span style="font-family: courier new">&lt;context-param&gt;<br />
</span><span style="font-family: courier new">&lt;param-name&gt;log4jConfigLocation&lt;/param-name&gt;</span><br />
<span style="font-family: courier new">        &lt;param-value&gt;/WEB-INF/log4j.properties&lt;/param-value&gt;<br />
</span><span style="font-family: courier new">&lt;/context-param&gt;<br />
</span><span style="font-family: courier new">&lt;listener&gt;<br />
</span><span style="font-family: courier new">&lt;listener-class&gt;</span><br />
<span style="font-family: courier new">            org.springframework.web.util.Log4jConfigListener</span><br />
<span style="font-family: courier new">        &lt;/listener-class&gt;<br />
</span><span style="color: #ff0000; font-family: courier new"><span style="color: #000000">&lt;/listener&gt;</span><br />
&lt;listener&gt;<br />
&lt;listener-class&gt;org.springframework.web.context.ContextLoaderListener&lt;/listener-class&gt;</span><br />
<span style="color: #ff0000; font-family: courier new">&lt;/listener&gt;</span><br />
<span style="font-family: courier new">&lt;servlet&gt;</span><br />
<span style="font-family: courier new">&lt;servlet-name&gt;XFireServlet&lt;/servlet-name&gt;</span><br />
<span style="font-family: courier new">&lt;servlet-class&gt;org.codehaus.xfire.spring.XFireSpringServlet&lt;/servlet-class&gt;</span><br />
<span style="font-family: courier new">&lt;/servlet&gt;</span><br />
<span style="font-family: courier new">&lt;servlet-mapping&gt;</span><br />
<span style="font-family: courier new">&lt;servlet-name&gt;XFireServlet&lt;/servlet-name&gt;</span><br />
<span style="font-family: courier new">&lt;url-pattern&gt;/servlet/XFireServlet/*&lt;/url-pattern&gt;</span><br />
<span style="font-family: courier new">&lt;/servlet-mapping&gt;</span><br />
<span style="font-family: courier new"><span style="color: #ff0000">&lt;servlet-mapping&gt;</span></span><br />
<span style="color: #ff0000; font-family: courier new">&lt;servlet-name&gt;XFireServlet&lt;/servlet-name&gt;</span><br />
<span style="color: #ff0000; font-family: courier new">&lt;url-pattern&gt;/services/*&lt;/url-pattern&gt;</span><br />
<span style="color: #ff0000; font-family: courier new">&lt;/servlet-mapping&gt;</span><br />
<span style="font-family: courier new">&lt;/web-app&gt;</span><br />
</span><br />
Configuration of beans that are going to be exposed via WS is stored in separate file, in this case in applicationContext.xml. Example of  the content of the file:</p>
<p><span style="font-size: 85%"><span style="font-family: courier new">&lt;?xml version=&#8221;1.0&#8243; encoding=&#8221;UTF-8&#8243;?&gt;<br />
</span><span style="color: #ff0000; font-family: courier new">&lt;!DOCTYPE beans PUBLIC &#8220;-//SPRING//DTD BEAN//EN&#8221; &#8220;http://www.springframework.org/dtd/spring-beans-2.0.dtd&#8221;&gt;</span><br />
<span style="font-family: courier new">&lt;beans&gt;</span><br />
<span style="font-family: courier new">&lt;bean class=&#8221;org.springframework.web.servlet.handler.SimpleUrlHandlerMapping&#8221;&gt;</span><br />
<span style="font-family: courier new">        &lt;property name=&#8221;urlMap&#8221;&gt;</span><br />
<span style="font-family: courier new">&lt;map&gt;<br />
</span><span style="color: #ff0000; font-family: courier new">&lt;entry key=&#8221;/WorkflowRegister&#8221;&gt;</span><br />
<span style="color: #ff0000; font-family: courier new">                    &lt;ref bean=&#8221;workflowRegister&#8221;/&gt;</span><br />
<span style="font-family: courier new"><span style="color: #ff0000">                &lt;/entry&gt;</span><br />
</span><span style="font-family: courier new">            &lt;/map&gt;<br />
</span><span style="font-family: courier new">&lt;/property&gt;<br />
</span><span style="font-family: courier new">&lt;/bean&gt;</span><br />
<span style="color: #ff0000; font-family: courier new">&lt;bean id=&#8221;workflowRegister&#8221; <span style="color: #000000">class=&#8221;org.codehaus.xfire.spring.remoting.XFireExporter&#8221;&gt;</span></span><br />
<span style="font-family: courier new">&lt;property name=&#8221;serviceFactory&#8221;&gt;</span><br />
<span style="font-family: courier new">            &lt;ref bean=&#8221;xfire.serviceFactory&#8221;/&gt;</span><br />
<span style="font-family: courier new">        &lt;/property&gt;</span><br />
<span style="font-family: courier new">&lt;property name=&#8221;xfire&#8221;&gt;</span><br />
<span style="font-family: courier new">            &lt;ref bean=&#8221;xfire&#8221;/&gt;</span><br />
<span style="font-family: courier new">        &lt;/property&gt;</span><br />
<span style="font-family: courier new"><span style="color: #ff0000">&lt;property name=&#8221;serviceBean&#8221;&gt;</span></span><br />
<span style="color: #ff0000; font-family: courier new">            &lt;ref bean=&#8221;worklfowRegisterBean&#8221;/&gt;</span><br />
<span style="color: #ff0000; font-family: courier new">        &lt;/property&gt;</span><br />
<span style="color: #000000; font-family: courier new">&lt;property name=&#8221;serviceClass&#8221;&gt;</span><br />
<span style="color: #000000; font-family: courier new">            &lt;value&gt;pl.edu.agh.gemini.adds.core.IWorkflowRegister&lt;/value&gt;</span><br />
<span style="color: #000000; font-family: courier new">        &lt;/property&gt;</span><br />
<span style="font-family: courier new">&lt;/bean&gt;</span><br />
<span style="font-family: courier new"><span style="color: #ff0000">&lt;bean id=&#8221;worklfowRegisterBean&#8221; class=&#8221;pl.edu.agh.gemini.adds.core.WorkflowRegister&#8221; factory-method=&#8221;getInstance&#8221; /&gt;</span></span><br />
<span style="font-family: courier new">&lt;import resource=&#8221;classpath:org/codehaus/xfire/spring/xfire.xml&#8221;/&gt; </span><br />
<span style="font-family: courier new">&lt;/beans&gt;</span><br />
</span><br />
As you can see defining new WS which is based on already implemented bean requires just few lines of XML. Business logic is totally separated from the way of exposing it. No changes are required in logic to expose it as Web Service! Also changing transport layer from XFire to e.g. Burlap/Hessian/RMI is just a matter of configuration in those two files.</p>
<p>Dependencies for Spring remoting (part of Maven pom.xml):<br />
<span style="font-size: 85%"><span style="font-family: courier new"><br />
&lt;dependencies&gt;<br />
&lt;dependency&gt;<br />
&lt;groupId&gt;pl.edu.agh.gemini.adss&lt;/groupId&gt;<br />
&lt;artifactId&gt;adsscore&lt;/artifactId&gt;<br />
&lt;version&gt;1.0-SNAPSHOT&lt;/version&gt;<br />
&lt;/dependency&gt;<br />
&lt;dependency&gt;<br />
&lt;groupId&gt;pl.edu.agh.gemini.adss&lt;/groupId&gt;<br />
&lt;artifactId&gt;adsscoreapi&lt;/artifactId&gt;<br />
&lt;version&gt;1.0-SNAPSHOT&lt;/version&gt;<br />
&lt;/dependency&gt;<br />
&lt;dependency&gt;<br />
&lt;groupId&gt;org.springframework&lt;/groupId&gt;<br />
&lt;artifactId&gt;spring-remoting&lt;/artifactId&gt;<br />
&lt;version&gt;2.0.6&lt;/version&gt;<br />
&lt;/dependency&gt;<br />
&lt;dependency&gt;<br />
&lt;groupId&gt;org.codehaus.xfire&lt;/groupId&gt;<br />
&lt;artifactId&gt;xfire-jaxb2&lt;/artifactId&gt;<br />
&lt;version&gt;1.2-RC&lt;/version&gt;<br />
&lt;/dependency&gt;<br />
&lt;dependency&gt;<br />
&lt;groupId&gt;org.codehaus.xfire&lt;/groupId&gt;<br />
&lt;artifactId&gt;xfire-spring&lt;/artifactId&gt;<br />
&lt;version&gt;1.2-RC&lt;/version&gt;<br />
&lt;/dependency&gt;<br />
&lt;dependency&gt;<br />
&lt;groupId&gt;org.codehaus.xfire&lt;/groupId&gt;<br />
&lt;artifactId&gt;xfire-java5&lt;/artifactId&gt;<br />
&lt;version&gt;1.2-RC&lt;/version&gt;<br />
&lt;/dependency&gt;<br />
&lt;/dependencies&gt;</span></span></p>
<p>Application can be simply deployed as war file in servlet container (e.g. Tomcat), no J2EE application server is required.</p>
<p>Have fun with Spring remoting!</p>
]]></content:encoded>
			<wfw:commentRss>http://urbas.tk/index.php/2007/09/25/spring-remoting-quickstart/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

