Java and XML – Tutorial

1. XML Introduction

1.1. XML Overview

XML stands for Extensible Markup Language and was defined 1998 by the World Wide Web Consortium (W3C).

A XML document consists out of elements, each element has a start tag, content and an end tag. A XML document must have exactly one root element, e.g. one tag which encloses the remaining tags. XML makes a difference between capital and non-capital letters.

A XML file is required to be well-formated.

Well-formated XML must apply to the following conditions:

  • A XML document always starts with a prolog (see below for an explanation of what a prolog is)
  • Every tag has a closing tag.
  • All tags are completely nested.


A XML file is valid if it is well-formated and if it is contains a link to a XML schema and is valid according to the schema.

In general the following is considered as advantages in using XML for data processing / representation.

  • XML is Plain text
  • XML allows the data identification without any display information
  • Style can be defined via XSL
  • Easily processed due to it regular and consistent notation
  • XML files are hierarchical


1.2. XML Example

The following is a valid, well-formated XML file.


<?xml version="1.0"?>
<!-- This is a comment -->
	<name>Lars </name>
	<street> Test </street>
	<telephon number= "0123"/>


1.3. XML Elements

1.3.1. Prolog

A XML document always starts with a prolog which describes XML file. This prolog can be minimal, e.g. <?xml version=”1.0″?> or can contain other information, e.g. the encoding, e.g. <?xml version=”1.0″ encoding=”UTF-8″ standalone=”yes” ?>

1.3.2. Empty Tag

A tag which doesn’t enclose any content is know as an “empty tag”. For example: <flag/>

1.3.3. Commends

Comments in XML are defined as: <! COMMENT>

2. Java XML Overview

Java contains several methods to access XML. The following is a short overview of the available methods.

Java provides the DOM API (Document Object Model). In DOM your access the XML document over an object tree. DOM can be used to read and write XML files.

SAX (Simple API for XML) is an Java API to sequential reading of XML files. SAX can only read XML documents. SAX provides an Event-Driven XML Processing following the Push-Parsing Model. What this model means is that in SAX, Applications will register Listeners in the form of Handlers to the Parser and will get notified through Call-back methods. Here the SAX Parser takes the control over Application thread by Pushing Events to the Application. Both DOM and Sax are older API’s and I recommend not to use them anymore.

Stax (Streaming API for XML) is an API for reading and writing XML Documents. Introduced in Java 6.0 and considered as superior to SAX and DOM.

Java Architecture for XML Binding ( JAXB ) is a Java standard that defines how Java objects are converted to/from XML (specified using a standard set of mappings. JAXB defines a programmer API for reading and writing Java objects to / from XML documents and a service provider which / from from XML documents allows the selection of the JAXB implementation JAXB applies a lot of defaults thus making reading and writing of XML via Java very easy.

The following will explain the Stax interface, for an introduction into JAXB please see JAXB tutorial.

3. Streaming API for XML (StaX)

3.1. Overview

Streaming API for XML, called StaX, is an API for reading and writing XML Documents.

StaX is a Pull-Parsing model. Application can take the control over parsing the XML documents by pulling (taking) the events from the parser.

The core StaX API falls into two categories and they are listed below. They are

  • Cursor API
  • Event Iterator API


Applications can any of these two API for parsing XML documents. The following will focus on the event iterator API as I consider it more convenient to use.

3.2. Event Iterator API

The event iterator API has two main interfaces: XMLEventReader for parsing XML and XMLEventWriter for generating XML.

3.3. XMLEventReader – Read XML Example

This example is stored in project “de.vogella.xml.stax.reader”.

Applications loop over the entire document requesting for the Next Event. The Event Iterator API is implemented on top of Cursor API.

In this example we will read the following XML document and create objects from it. file.


<?xml version="1.0" encoding="UTF-8"?>
	<item date="January 2009">
	<item date="February 2009">
	<item date="December 2009">


Define therefore the following class to store the individual entries of the XML file.


package de.vogella.xml.stax.model;

public class Item {
	private String date; 
	private String mode;
	private String unit;
	private String current;
	private String interactive;

	public String getDate() {
		return date;

	public void setDate(String date) { = date;
	public String getMode() {
		return mode;
	public void setMode(String mode) {
		this.mode = mode;
	public String getUnit() {
		return unit;
	public void setUnit(String unit) {
		this.unit = unit;
	public String getCurrent() {
		return current;
	public void setCurrent(String current) {
		this.current = current;
	public String getInteractive() {
		return interactive;
	public void setInteractive(String interactive) {
		this.interactive = interactive;

	public String toString() {
		return "Item [current=" + current + ", date=" + date + ", interactive="
				+ interactive + ", mode=" + mode + ", unit=" + unit + "]";


The following reads the XML file and creates a List of object Items from the entries in the XML file.



import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;


import de.vogella.xml.stax.model.Item;

public class StaXParser {
	static final String DATE = "date";
	static final String ITEM = "item";
	static final String MODE = "mode";
	static final String UNIT = "unit";
	static final String CURRENT = "current";
	static final String INTERACTIVE = "interactive";

	@SuppressWarnings({ "unchecked", "null" })
	public List<Item> readConfig(String configFile) {
		List<Item> items = new ArrayList<Item>();
		try {
			// First create a new XMLInputFactory
			XMLInputFactory inputFactory = XMLInputFactory.newInstance();
			// Setup a new eventReader
			InputStream in = new FileInputStream(configFile);
			XMLEventReader eventReader = inputFactory.createXMLEventReader(in);
			// Read the XML document
			Item item = null;

			while (eventReader.hasNext()) {
				XMLEvent event = eventReader.nextEvent();

				if (event.isStartElement()) {
					StartElement startElement = event.asStartElement();
					// If we have a item element we create a new item
					if (startElement.getName().getLocalPart() == (ITEM)) {
						item = new Item();
						// We read the attributes from this tag and add the date
						// attribute to our object
						Iterator<Attribute> attributes = startElement
						while (attributes.hasNext()) {
							Attribute attribute =;
							if (attribute.getName().toString().equals(DATE)) {


					if (event.isStartElement()) {
						if (event.asStartElement().getName().getLocalPart()
								.equals(MODE)) {
							event = eventReader.nextEvent();
					if (event.asStartElement().getName().getLocalPart()
							.equals(UNIT)) {
						event = eventReader.nextEvent();

					if (event.asStartElement().getName().getLocalPart()
							.equals(CURRENT)) {
						event = eventReader.nextEvent();

					if (event.asStartElement().getName().getLocalPart()
							.equals(INTERACTIVE)) {
						event = eventReader.nextEvent();
				// If we reach the end of an item element we add it to the list
				if (event.isEndElement()) {
					EndElement endElement = event.asEndElement();
					if (endElement.getName().getLocalPart() == (ITEM)) {

		} catch (FileNotFoundException e) {
		} catch (XMLStreamException e) {
		return items;



You can test the parser via the following test program. Please note that the file config.xml must exist in the Java project folder.



import java.util.List;

import de.vogella.xml.stax.model.Item;

public class TestRead {
	public static void main(String args[]) {
		StaXParser read = new StaXParser();
		List<Item> readConfig = read.readConfig("config.xml");
		for (Item item : readConfig) {


3.4. Write XML File- Example

This example is stored in project “de.vogella.xml.stax.writer”.

Lets assume you would like to write the following simple XML file.


<?xml version="1.0" encoding="UTF-8"?>


StaX does not provide functionality to format the XML file automatically. So you have to add end-of-lines and tab information to your XML file.


package de.vogella.xml.stax.writer;



public class StaxWriter {
	private String configFile;

	public void setFile(String configFile) {
		this.configFile = configFile;

	public void saveConfig() throws Exception {
		// Create a XMLOutputFactory
		XMLOutputFactory outputFactory = XMLOutputFactory.newInstance();
		// Create XMLEventWriter
		XMLEventWriter eventWriter = outputFactory
				.createXMLEventWriter(new FileOutputStream(configFile));
		// Create a EventFactory
		XMLEventFactory eventFactory = XMLEventFactory.newInstance();
		XMLEvent end = eventFactory.createDTD("\n");
		// Create and write Start Tag
		StartDocument startDocument = eventFactory.createStartDocument();

		// Create config open tag
		StartElement configStartElement = eventFactory.createStartElement("",
				"", "config");
		// Write the different nodes
		createNode(eventWriter, "mode", "1");
		createNode(eventWriter, "unit", "901");
		createNode(eventWriter, "current", "0");
		createNode(eventWriter, "interactive", "0");

		eventWriter.add(eventFactory.createEndElement("", "", "config"));

	private void createNode(XMLEventWriter eventWriter, String name,
			String value) throws XMLStreamException {

		XMLEventFactory eventFactory = XMLEventFactory.newInstance();
		XMLEvent end = eventFactory.createDTD("\n");
		XMLEvent tab = eventFactory.createDTD("\t");
		// Create Start node
		StartElement sElement = eventFactory.createStartElement("", "", name);
		// Create Content
		Characters characters = eventFactory.createCharacters(value);
		// Create End node
		EndElement eElement = eventFactory.createEndElement("", "", name);




And a little test.


package de.vogella.xml.stax.writer;

public class TestWrite {

	public static void main(String[] args) {
		StaxWriter configFile = new StaxWriter();
		try {
		} catch (Exception e) {


For another (more complex example of using Stax please see Reading and creating RSS feeds via Java (with Stax)

4. XPath

4.1. Overview

XPath (XML Path Language) is a language for selecting / searching nodes from an XML document. Java 5 introduced the javax.xml.xpath package which provides a XPath library.

The following explains how to use XPath to query an XML document via Java.

4.2. Using XPath

The following explains how to use XPath. Create a new Java project called “UsingXPath”.

Create the following xml file.


<?xml version="1.0" encoding="UTF-8"?>


Create a new package “myxml” and a new Java class “QueryXML”.


package myxml;


import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathConstants;
import javax.xml.xpath.XPathExpression;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;

import org.w3c.dom.Document;
import org.w3c.dom.NodeList;
import org.xml.sax.SAXException;

public class QueryXML {
	public void query() throws ParserConfigurationException, SAXException,
			IOException, XPathExpressionException {
		// Standard of reading a XML file
		DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
		DocumentBuilder builder;
		Document doc = null;
		XPathExpression expr = null;
		builder = factory.newDocumentBuilder();
		doc = builder.parse("person.xml");

		// Create a XPathFactory
		XPathFactory xFactory = XPathFactory.newInstance();

		// Create a XPath object
		XPath xpath = xFactory.newXPath();

		// Compile the XPath expression
		expr = xpath.compile("//person[firstname='Lars']/lastname/text()");
		// Run the query and get a nodeset
		Object result = expr.evaluate(doc, XPathConstants.NODESET);

		// Cast the result to a DOM NodeList
		NodeList nodes = (NodeList) result;
		for (int i=0; i<nodes.getLength();i++){

		// New XPath expression to get the number of people with name lars
		expr = xpath.compile("count(//person[firstname='Lars'])");
		// Run the query and get the number of nodes
		Double number = (Double) expr.evaluate(doc, XPathConstants.NUMBER);
		System.out.println("Number of objects " +number);

		// Do we have more then 2 people with name lars?
		expr = xpath.compile("count(//person[firstname='Lars']) >2");
		// Run the query and get the number of nodes
		Boolean check = (Boolean) expr.evaluate(doc, XPathConstants.BOOLEAN);


	public static void main(String[] args) throws XPathExpressionException, ParserConfigurationException, SAXException, IOException {
		QueryXML process = new QueryXML();


5. Thank you


Javascript Lover

Fantastic JavaScript 3D Libraries

Ever imagined if the tiny JavaScript code could render amazing out of the box 3D? Then be ready to enjoy wonderful 3D effects in simple JavaScript code. These JavaScript 3D Libraries let you render smooth yet attractive 3D effects with great ease.

JS3D – The 3d Javascript Graphics Layer

JS3D is a library which allows you to have interactive 3d objects on your website, such as the spinning cube at the top of the page. The 3d effect is created using actual text, try selecting the text on the cube.

JavaScript Raytracer

The JavaScript Raytracer is a 3D rendering engine written entirely in JavaScript. It implements the raytracing algorithm to create images of mathematically defined shapes such as spheres.

3d graphics in JavaScript

Just because I do not do enough silly things with JavaScript already and a raytracer, here are some 3d graphics done with just JavaScript. You should see a TIE fighter rotating, and moving left and right.

Realtime 3D Triangles in Javascript

A wonderful real time 3d triangle generated using javascript.

Javascript Wolfenstein 3D

This a Javascript implementation of id Software 1992 game, Wolfenstein 3D. Should work in all canvas-enabled browsers, that is it means no Internet Explorer.

JavaScript-Powered Web 3D

JavaScript is the standard scripting language of Web development, and a far larger number of people know JavaScript than Java. JavaScript is easy to learn and fun to experiment with. No compiler or development environment is required. So lets learn how to create awesome 3D in JacaScript.

Incredible JavaScript and Canvas 3D demos from Japan

Mr. Satoshi Ueyama hacked out the new era of JavaScript 3D tech by unveiling the real of Google Chrome s power. Satoshi is one of the great JavaScript hackers in Japan. He has introduced the brand new JavaScript technique using Canvas for 3D on his post.

C3DL – Canvas 3D JavaScript Library

The Canvas 3D JS Libary (C3DL) is a javascript library that will make it easier to write 3D applications using canvas 3d. It will provide a set of math, scene, and 3d object classes to make the canvas more accessible for developers that want to develop 3D content in browser but do not want to have to deal in depth with the 3D math needed to make it work.

3D Javascript Chess

This is a work-in-progress 3D Javascript chess game, rendered using the canvas element and this Javascript 3D renderer. Special chess moves are not implemented yet and the interface needs a bit of work.

SVG-VML-3D Javscript Libraries

SVG-VML-3D is a free JavaScript library which can be used to draw and manipulate 3D objects in html pages by using SVG or VML. The JavaScript code which has to be typed into the html page to define the Scene (3D Objects, Viewer Position, Light.) is the same for SVG and VML.

Share and Enjoy:

  • MisterWong
  • Y!GG
  • Webnews
  • Digg
  • StumbleUpon
  • Reddit

5 Examples of when to use silence ?

1. During arguments. One of the best times to use the power of silence is during  an argument is to stay silent. The ego will be trying to force its way out of you and finish the argument but you are the controller, not the ego. When someone is shouting at you, looking for an argument or just picking on you can literally take all the power away from them and keep all your energy by simply looking at them and saying absolutely nothing. This is extremely difficult to do but very powerful.

2. Gossiping. When there is a crowd of people in the workplace there are gossipers who speak about other people. The thing with gossiping is that it is contagious. When we don’t like someone and someone else starts speaking about them we naturally tend to voice our opinion, I’ve done it lots of times and have to stop myself.

Try and stop yourself from catching the virus of gossiping and use the power of silent whenever it occurs. If you are a gossiper yourself and people around start to notice that you are ‘not your usual self’, don’t give an explanation just leave saying you’ve got work to do or whatever, pretty soon you’ll be out of the gossiping loop.

3. When someone is talking. Silence is a great tool for counselors if used in the right way. It’s also great when listening to friends and family.

Just let people talk and listen to them and use your facial expressions and movements to acknowledge that you are listening. This can be a tough thing to do but extremely powerful for both you, as the listener, and the talker.

You will find that as you practice this, more people come to talk to you as you will be known as a listener. Obviously there are times to speak during the conversation, however when you do, make sure it is to paraphrase what the talker is saying or asking questions to get more information, don’t make it about yourself.

When people want to know more about you they will ask you questions, this is the time to talk about yourself but always have the listener be part of the conversation.

4. When the house is empty. The silence of the home can be quite disturbing to some people as there is a natural need to fill the void of silence. We turn on the radio, play some music, call friends or family, or turn on the TV to fill this void. Having a completely silent home when you are alone does not mean you are alone it simply means you are recharging your mind and giving it some downtime.

Silence helps us to work through, in our minds, the events of the day or project what we want to happen during the day ahead. I am a night owl and also a morning lark. I love the silence when I know everyone is safe and tucked up in bed and I can write or work on the computer. At the weekends I go to bed with my wife to talk about days events or our plans and just have a laugh or whatever. My wife, who loves her sleep, has gone to sleep I kiss her goodnight and get up for a few hours to write as this is the time I am most inspired. I am also the first person up in the morning which means I have another 2 hours to write or work on my online projects.

I know it’s harder when you are alone, however silent time can be used to think about the life you want and work out ways to get it.

5. Quiet reflection. This is a fantastic way to connect with world in a way that is not possible when you are surrounded by hubbub noise. 15 minutes in the morning, 15 minutes in the evening simply focusing on your breath can do wonders for both mind and body. I truly believe that with practice quiet reflection can help us reach a level of deep inner calm.

The state of silence is a way of reaching another part of your mind not possible when going about your daily routine. This other part of your mind is connected in every way to the world around you and with practice you can tap into this knowledge.

How do I pass Scriptlet in JSP to JavaScript values ?

JavaScript variable =”<%=   there is your java code     %>”;

like …….

var companyId:<%=request.getParameter();%>


Call Stored Procedure In Oracle And Pass In Out Parameters


import java.sql.CallableStatement;

import java.sql.Connection;

import java.sql.DriverManager;

public class Main {

  public static void main(String[] argsthrows Exception {

    Connection conn = getOracleConnection();

    // Step-2: identify the stored procedure

    String proc3StoredProcedure = “{ call proc3(?, ?, ?) }”;

    // Step-3: prepare the callable statement

    CallableStatement cs = conn.prepareCall(proc3StoredProcedure);

    // Step-4: set input parameters …

    // first input argument


    // third input argument


    // Step-5: register output parameters …

    cs.registerOutParameter(2, java.sql.Types.VARCHAR);

    cs.registerOutParameter(3, java.sql.Types.INTEGER);

    // Step-6: execute the stored procedures: proc3


    // Step-7: extract the output parameters

    // get parameter 2 as output

    String param2 = cs.getString(2);

    // get parameter 3 as output

    int param3 = cs.getInt(3);

    System.out.println(“param2=” + param2);

    System.out.println(“param3=” + param3);



  private static Connection getHSQLConnection() throws Exception {


    System.out.println(“Driver Loaded.”);

    String url = “jdbc:hsqldb:data/tutorial”;

    return DriverManager.getConnection(url, “sa”“”);


  public static Connection getMySqlConnection() throws Exception {

    String driver = “”;

    String url = “jdbc:mysql://localhost/demo2s”;

    String username = “oost”;

    String password = “oost”;


    Connection conn = DriverManager.getConnection(url, username, password);

    return conn;


  public static Connection getOracleConnection() throws Exception {

    String driver = “oracle.jdbc.driver.OracleDriver”;

    String url = “jdbc:oracle:thin:@localhost:1521:caspian”;

    String username = “mp”;

    String password = “mp2”;

    Class.forName(driver)// load Oracle driver

    Connection conn = DriverManager.getConnection(url, username, password);

    return conn;





 3,849 k)

Conversion PDF to Byte and Vice verse

Simple conversion easily enjoy the word of JAVA……………….

public static byte[] convertPDFToByteArray(String sourcePath) {
byte[] bytes=null;
InputStream inputStream;

File file = new File(sourcePath);

try {
inputStream = new FileInputStream(file);
bytes = new byte[(int)file.length()];
int read =;
} catch (IOException ex) {

DesktopApplication3View.class.getName()).log(Level.SEVERE, null, ex);
}return bytes;


public void convertByteArrayToPDF(String sourcePath,byte[] bytes) {
OutputStream out;
try {
out = new FileOutputStream(sourcePath);
try {
} catch (IOException ex) {
Logger.getLogger(DesktopApplication3View.class.getName()).log(Level.SEVERE, null, ex);
} catch (FileNotFoundException ex) {
Logger.getLogger(DesktopApplication3View.class.getName()).log(Level.SEVERE, null, ex);


Web Services – Web Services Tutorials

In this section of the Web Services tutorial you will be familiarized with the Web Services.


The next generation of distributed computing has arrived. A Web service is a unit of managed code that can be remotely invoked using HTTP, that is, it can be activated using HTTP requests.

Historically speaking, remote access to binary units required platform-specific and sometimes language-specific protocols. For example, DCOM clients access remote COM types using tightly coupled RPC calls. CORBA requires the use of tightly coupled protocol referred to as Internet Inter-ORB Protocol (IIOP), to activate remote types. Enterprise JavaBeans (EJBs) requires a Remote Method Invocation (RMI) Protocol and by and large a specific language (Java). Thus each of these remote invocation architectures needs proprietary protocols, which typically require a tight connection to the remote source.

One can access Web services using nothing but HTTP. Of all the protocols in existence today, HTTP is the one specific wire protocol that all platforms tend to agree on. Thus , using Web services, a Web service developer can use any language he wish and a Web service consumer can use standard HTTP to invoke methods a Web service provides. The bottom line is that we have true language and platform integration . Simple Object Access Protocol (SOAP) and XML are also two key pieces of the Web services architecture.

What is a Web Service

Web services constitute a distributed computer architecture made up of many different computers trying to communicate over the network to form one system. They consist of a set of standards that allow developers to implement distributed applications – using radically different tools provided by many different vendors – to create applications that use a combination of software modules called from systems in disparate departments or from other companies.

A Web service contains some number of classes, interfaces, enumerations and structures that provide black box functionality to remote clients. Web services typically define business objects that execute a unit of work (e.g., perform a calculation, read a data source, etc.) for the consumer and wait for the next request. Web service consumer does not necessarily need to be a browser-based client. Console-baed and Windows Forms-based clients can consume a Web service. In each case, the client indirectly interacts with the Web service through an intervening proxy. The proxy looks and feels like the real remote type and exposes the same set of methods. Under the hood, the proxy code really forwards the request to the Web service using standard HTTP or optionally SOAP messages.

Web Service Standards

Web services are registered and announced using the following services and protocols. Many of these and other standards are being worked out by the UDDI project, a group of industry leaders that is spearheading the early creation and design efforts.

Universal Description, Discovery, and Integration (UDDI) is a protocol for describing available Web services components. This standard allows businesses to register with an Internet directory that will help them advertise their services, so companies can find one another and conduct transactions over the Web. This registration and lookup task is done using XML and HTTP(S)-based mechanisms.

Simple Object Access Protocol (SOAP) is a protocol for initiating conversations with a UDDI Service. SOAP makes object access simple by allowing applications to invoke object methods or functions, residing on remote servers. A SOAP application creates a request block in XML, supplying the data needed by the remote method as well as the location of the remote object itself.

Web Service Description Language (WSDL), the proposed standard for how a Web service is described, is an XML-based service IDL (Interface Definitition Language) that defines the service interface and its implementation characteristics. WSDL is referenced by UDDI entries and describes the SOAP messages that define a particular Web service.

ebXML (e-business XML) defines core components, business processes, registry and repository, messaging services, trading partner agreements, and security.

Implementing Web Services

Here comes a brief step-by-step on how a Web service is implemented.

  • A service provider creates a Web service
  • The service provider uses WSDL to describe the service to a UDDI registry
  • The service provider registers the service in a UDDI registry and/or ebXML registry/repository.
  • Another service or consumer locates and requests the registered service by querying UDDI and/or ebXML registries.
  • The requesting service or user writes an application to bind the registered service using SOAP in the case of UDDI and/or ebXML
  • Data and messages are exchanged as XML over HTTP

Web Service Infrastructure

Even though Web services are being built using existing infrastructure, there exists a strong necessity for a number of innovative infrastructures. The core architectural foundation of Web services are XML, XML namespaces, and XML schema. UDDI, SOAP, WSDL, ebXML and security standards are being developed in parallel by different vendors

Web Services Technologies and Tools

There are a number of mechanisms for constructing Web services. Microsoft has come out with a new object-oriented language C# as the development language for Web services and .NET framework. Microsoft has an exciting tool called Visual Studio .NET in this regard. The back end database can be Microsoft SQL Server 2000 in Windows 2000 Professional.

Sun Microsystems has its own set of technologies and tools for facilitating Web services development. Java Servlets, Java Server Pages (JSPs), Enterprise JavaBeans (EJB) architecture and other Java 2 Enterprise Edition (J2EE) technologies play a very critical role in developing Web services.

There are a number of tools for developing Web services. They are Forte Java IDE, Oracle JDeveloper, and WebGain Studio.

Sun Microsystems has taken an initiative called Sun ONE (Open Network Environment) and is planning to push Java forward as a platform for Web services. It is developing Java APIs for XML-based remote procedure calls and for looking up services in XML registries – two more JAX family APIs: JAX/RPC (Java API for XML Remote Procedure Calls) and JAXR (Java API for XML Registries). These will wrap up implementations of Web services standards, such as SOAP and UDDI.

IBM also for its part has already developed a suite of early-access tools for Web services development. They are Web Services Toolkit (WSTK), WSDL Toolkit, and Web Services Development Environment (WSDE).

Apache Axis is an implementation of the SOAP (“Simple Object Access Protocol”) submission to W3C.

From the draft W3C specification:

SOAP is a lightweight protocol for exchanging structured information in a decentralized, distributed environment. It is an XML based protocol that consists of three parts: an envelope that defines a framework for describing what is in a message and how to process it, a set of encoding rules for expressing instances of application-defined datatypes, and a convention for representing remote procedure calls and responses.

Apache Axis is an Open Source SOAP server and client. SOAP is a mechanism for inter-application communication between systems written in arbitrary languages, across the Internet. SOAP usually exchanges messages over HTTP: the client POSTs a SOAP request, and receives either an HTTP success code and a SOAP response or an HTTP error code. Open Source means that you get the source, but that there is no formal support organization to help you when things go wrong.


For the last few years, XML has enabled heterogeneous computing environments to share information over the Web. It now offers a simplified means by which to share process as well. From a technical perspective, the advent of Web services is not a revolution in distributed computing. It is instead a natural evolution of XML application from structured representation of information to structured representation of inter-application messaging.

Prior to the advent of Web services, enterprise application integration (EAI) was very difficult due to differences in programming languages and middleware used within organizations. This led to the situation where interoperability was cumbersome and painful. With the arrival of Web services, any application can be integrated as long as it is Internet-enabled.

It is difficult to avoid the popularity and hype that is surrounding Web services. Each software vendor has some initiative concerning Web services and there is always great speculation about the future of the market for them. Whichever way it turns out, Web service architectures provide a very different way of thinking about software development. From client-server to n-tier systems, to distributed computing, Web service applications represent the culmination of each of these architectures in combination with the Internet.