Archive for the ‘Downloads’ Category
How-to: Write web services using Axis2
This is a very basic post on writing a web service provider and consumer using Axis2. You can find such posts anywhere in the web. Here I’ve tried to make it as simple as I can.
Set up: What all we need to do?
1. Axis2 runtime.
I tried with WAR distribution from http://ws.apache.org/axis2/download/1_5/download.cgi
2. A web/app server. I am using Tomcat.
Using the Axis2 runtime & setting it up
Extract the Axis2 WAR distribution and keep it in the deploy directory of the server. In case of Tomcat keep it in webapps. This is how my directory structure look like.
The WEB-INF is the most important directory. Tell you why. Unlike our normal WEB-INF in archives, this directory hold some special sub-directories. Here goes which contains what.
classes – compiled Java classes. We can find some Axis specific classes here.
conf – axis.xml (Axis configuration file)
lib – All necessary Axis2 libraries (JARs)
modules – Don’t ask me. Even I’m not sure. Did I mention that I’m also a beginner? ![]()
services – All web service archives & services.list
Coding: What we need to write?
1. The service provider. A Java class.
2. service.xml. The web services descriptor.
3. build.xml. To build and deploy the web services archive.
4. The service consumer. Another Java class to consume the services offered
And we are good to go now. Let’s make our hands dirty with some Java code. This is very simple and kudos to Axis2.
The service provider: SampleService.java
package subin.rnd.ws;
public class SampleService
{
public WsOutput doSomething(WsInput anInput)
{
System.out.println("doSomething()");
WsOutput anOutput = new WsOutput();
anOutput.setResponseString("I did some thing to " + anInput.getName());
return (anOutput);
}
}
WsInput is a sample input class to demonstrate that we can have more complex IO is possible. Similarly WsOutput is the output class. Instead of using WsInput / WsOutput for IO, we can use normal data types like integer, float, string etc too.
WsInput.java
package subin.rnd.ws;
import java.io.Serializable;
public class WsInput implements Serializable
{
private String name;
public void setName(String name)
{
this.name = name;
}
public String getName()
{
return (this.name);
}
}
WsOutput.java
package subin.rnd.ws;
import java.io.Serializable;
public class WsOutput implements Serializable
{
private String responseString;
public void setResponseString(String response)
{
this.responseString = response;
}
public String getResponseString()
{
return (this.responseString);
}
}
We have the Java part of the web-service ready. But that’s not enough. We need to deploy the web-service as an AAR – Axis Archive – file. An AAR is just another zip file (like a JAR) with a funky extension
. The AAR should contain the class files along with the services.xml – web service descriptor.
Web service descriptor: services.xml
<service name="SampleWs" scope="application"> <description>Subin's sample webs service</description> <messagereceivers> <messagereceiver mep="http://www.w3.org/2004/08/wsdl/in-only" class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"/> <messagereceiver mep="http://www.w3.org/2004/08/wsdl/in-out" class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/> </messagereceivers> <operation name="doSomething" /> <parameter name="ServiceClass">subin.rnd.ws.SampleService</parameter> </service>
The services.xml is the place where we define the details of the services being offered.
Build file: build.xml
<project name="my.webservice.test" default="build.aar">
<property name="deploy.dir" value=".../webapps/axis2.war/WEB-INF/services" />
<property name="file.name" value="subinws.aar" />
<target name="build.aar">
<javac srcdir="src" destdir="bin" />
<echo>Copying services.xml to bin</echo>
<copy file="META-INF/services.xml"
tofile="bin/META-INF/services.xml" overwrite="true"/>
<jar basedir="bin" destfile="${file.name}" />
<echo>Deleting services.xml from bin</echo>
<delete dir="bin/META-INF" />
<copy file="${file.name}" tofile="${deploy.dir}/${file.name}" />
</target>
</project>
So I hope we have an AAR ready, which is copied to the services directory. But we’ve not done yet. Now we have to make an entry in services/services.list file. Just insert the name of the ARR file at the end of it – in this case “subinws.aar”.
Please wait for part 2.
Todays read: BBC Glow
“Ouh, shiny! BBC’s Glow is finally out”
I found this article in ajaxian.com. Read the article here.
This article is about a new JavaScript framework recently open sourced by BBC. BBC Glow. BBC uses this framework in their websites. It’s too early for me to say whether this is a cool stuff to work with. Anyways you can try to make your hands dirty with “Glow”. Have a nice “Glow” time.
What is BBC Glow?
Glow is a JavaScript library which aims to make working with JavaScript and the DOM easier. It tries to do this by abstracting common tasks, hiding cross-browser issues, and providing a set of user interface widgets.
Source: http://www.bbc.co.uk/glow/
BBC Glow is free and open source.
Related links
What is Glow?
Getting started
More documentation
Firefox 3.5
And we now have Firefox 3.5, which they claims to the better, faster, safer & smarter one yet, with lot of new features like private browsing, improved awesome bar, cross site XHR.
java.lang.RuntimeException: NYI
If we are using PGP based or similar encryption in our email application/module, we may get the following exception.
java.lang.RuntimeException: NYI
at cryptix.jce.provider.elgamal.ElGamalCipher.engineGetParameters(ElGamalCipher.java:120)
…
Here NYI is Not Yet Implemented ! The default policy setting of Java is not capable of handling encryption/decryption with higher strength keys. To add that support we need to download the Java(TM) Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files.
Download JCE: http://java.sun.com/javase/technologies/security/
Extract the downloaded archive and copy the JAR files (US_export_policy.jar & local_policy.jar) to Java_home/jre/lib/security. If those JAR files are already present in that directory, replace them with the newly downloaded archives.
Hope this helps.
Today’s tool: Gnome Blog
Gnome Blog is a nice tool using which we can publish to our blogs – currently they support Blogger.com / Blogspot.com, Advogato.org, Movable Type, WordPress, LiveJournal.com, Pyblosxom & Any other blog using bloggerAPI or MetaWeblog.
There is post in Ankur’s blog about this tool. I am yet to try it.
What is Gnome ? – Wikipedia/Gnome
Links
Home page: http://www.gnome.org/~seth/gnome-blog/
Download page: http://www.gnome.org/~seth/gnome-blog/download.html



