Background
IBM has played a significant role in emancipating Web Service technology
on the Java platform, and it became something of a pioneer when it created
one of the very first implementations of SOAP for Java, the SOAP4J
framework. Initially available as a technology preview on IBM's alphaWorks
site, SOAP4J quickly aroused a lot of interest within the Java developers'
community.
IBM,
banking on this community's ability to ensure the success and durability
of the framework, decided to donate SOAP4J to the open source world in
the second half of 2000. In fact,
the future of IBM's framework was entrusted to The
Apache Software Foundation (renowned for having been behind some of
the most prestigious open-source projects, such as the eponymous Web Server
or the Tomcat Java application server).
IBM has not left the limelight, however, and is continuing to contribute
actively to the development of the project.
|
IBM's
commitment as a major player in the Open Source movement:
As well as SOAP4J, IBM also instigated two other complementary frameworks
in the field of Web Services: WSDL4J
(Java framework for the manipulation of WSDL descriptions of Web
Services) and UDDI4J
(Java framework for interaction with UDDI directories, co-developed
with HP). As
a key player in the free software world, IBM is also behind a number
of other projects, such as the XML parser Xerces
(formerly XML4J), the XSL transformer Xalan
(formerly LotusXSL) and more recently, the Eclipse
platform (modular, extensible Java development environment).
|
Renamed
Apache SOAP, IBM's
framework underwent a number of upgrades and adjustments and enjoyed widespread
success - so much so that IBM and other major vendors such as Sun quickly
adopted Apache SOAP to integrate it into their J2EE application servers
as a support structure for Web services.
Those
interested in reading more about the SOAP protocol, the Apache SOAP implementation
and its integration with application servers, can consult previous issues
of our monthly newsletter TrendMarkers:
Apache SOAP version 2.2, the most popular version due to its relative
stability and maturity, came out in May 2001. In the space of a year,
the framework underwent few adjustments, and it was only in May 2002 that
version 2.3 appeared. The very latest version of Apache SOAP (2.3.1) was
released extremely recently, in June 2002. This late update of the Apache
SOAP seems a little odd, given that the framework has apparently reached
the end of its lifetime.
In fact, for over a year, all efforts have been concentrated on the development
of a successor to Apache SOAP, based on an entirely new architecture.
Apache SOAP's replacement, named Axis, has been designed to overcome its
predecessor's shortcomings in terms of extensibility (due to an architecture
that had become too complex, too rigid, and too closely linked to the
SOAP specification) and performance (hampered by the use of the Document
Object Model (DOM) for processing XML streams).
Rather
than continue developing Apache SOAP in increasingly difficult conditions,
the Apache Foundation opted to wipe the slate clean, and set out to conquer
Web Services with a whole new set of foundations. And hence the Axis project
was born. More modular, with better performances, and easily extended
and adapted to different specifications, Axis also offers enhanced support
for Web Service specifications such as SOAP and WSDL.
In parallel, Sun and the other players participating in the development
of the Java platform have been working to draw up a new family of specifications
and APIs dedicated to the infrastructure of XML exchanges. This new family,
the Java
XML Pack, includes the following specifications:
JAXM (Java API for
XML Messaging): A set of APIs for exchanging messages formatted as
XML documents. JAXM includes low-level functions for construction, routing
and delivery of XML documents via SOAP 1.1 with Attachments (NB: in the
JAXM latest version, 1.1, the implementation of the SOAP exchange protocol
has been transferred to a new independent API, called SAAJ
- SOAP with Attachments API for Java).
JAX-RPC (Java API
for XML-based RPC): A set of APIs and conventions for implementing
XML-based RPC exchanges. The implementation model for RPC services used
is copied from the RMI model, and uses server-side proxy classes (skeletons)
and client-side proxy classes (stubs) for sending and receiving calls.
JAX-RPC
includes an extensible model for mapping data types associated with serialization/deserialization
mechanisms between Java objects and XML-Schema data types.
Also, JAX-RPC defines two-way mapping functions between Java (interface
classes, methods) and XML/WSDL descriptions of RPC service interfaces.
As one of the aims of the specification is to remain independent from
any particular standard, JAX-RPC is designed to adapt to different protocols
(including SOAP) and different transport protocols (including HTTP and
SMTP). SOAP support within JAX-RPC, provided through the JAXM functionalities,
is now based on SAAJ.
In
compliance with the objectives of the JAXM and JAX-RPC specifications,
Axis is designed to be extensible and independent with regard to particular
transport or exchange protocols.
So,
although it supports SOAP over HTTP, Axis will in the future support other
protocols such as the forthcoming XML
Protocol (based on SOAP
1.2), and other transport such as SMTP. For this reason, the name
"Axis" (Apache eXtensible Interaction System) was chosen over "Apache
SOAP 3.0," which was felt to be too restrictive due to the mention
of the word SOAP.
Since
last summer, several pre-versions of Axis have followed one after the
other. After three Alpha versions and two Beta versions, a third Beta
version is under preparation. We should also point out that a C++ version
of Axis (on Windows and Linux platforms for the moment) is also currently
being prepared.
The
release of the first public "final" version of Axis (which will feature
the version number 3.0, to mark its succession from Apache SOAP 2.x),
initially planned for the summer, has apparently been held up. However,
Axis already has sufficient assets and functionality for us to be able
to devote this article to the Beta 2 version which has been available
since the end of April.
 |
Presentation
of Apache Axis beta 2
|
Apache
Axis is an open-source implementation on the Java platform of the
SOAP version 1.1
and SOAP
Messages with Attachments specifications and includes certain features
of the new version of the standard, SOAP
1.2. Axis is developed by the
Apache Software Foundation.
Apache
Axis is both an environment for hosting Web Services and a complete toolkit
for creating services and for client access to external services. This
toolkit features advanced automatic code generation functionality based
on parsing of WSDL descriptions of Web Services, and automatic two-way
mapping between Java classes and WSDL descriptions.
New
features and improvements with regard to Apache SOAP
Compared
to Apache SOAP, Axis enjoys a great deal of improvements and new features:
Fully revised architecture: Axis is built on entirely new foundations,
based on concepts defined by the JAX-RPC specification. The architecture
of Axis is modular and extensible: extensions can be easily added (for
specific processing of messages, or to include new administration or management
functions).
Similarly,
at its core, Axis contains an architecture of interchangeable transport
protocols ("pluggable transport architecture"), independent of any transport
protocol in particular. It is therefore possible to add on support for
other transport protocols such as SMTP, FTP and so on.
Enhanced performance: one of Axis' objectives is to offer improved
performances (in terms of response times, memory usage and scalability)
in comparison with Apache SOAP. In particular, where Apache SOAP used
the DOM (Document Object Model) to parse XML streams, Axis is now based
on SAX (Simple API for XML Parsing). This enables memory usage to be significantly
reduced, and cuts the time required to process XML streams.
WSDL 1.1 support and Java/WSDL mapping functionality: one of the important
new features of Axis is its WSDL support. Axis is able to automatically
generate WSDL descriptions of deployed services, on the fly. Moreover,
Axis implements the Java/WSDL mapping functionality of the JAX-RPC API,
which makes it possible to automatically generate a Java client from the
WSDL description of a service, or to generate a WSDL description for a
Java interface or class to be exposed as a Web service.
Enhanced
datatype support: support for datatypes from the XML-Schema (2001)
standard in Apache Axis is now much more comprehensive. In particular,
Apache Axis now supports numbered types, as well as untyped values.
New service deployment model: like Apache SOAP, Axis uses XML deployment
descriptors (WSDD - Web Service Deployment Descriptor) for deploying services.
However, the new WSDD XML format is incompatible with the old format used
by Apache SOAP.
Axis
also supports a new "instant, on-the-fly" deployment mode for Web services:
it is now possible to expose a Java class as a Web service very simply,
by moving a Java source file to a particular directory and changing the
".java" extension to ".jws" (Java Web Service).
Support for sessions and security: Axis features user session support
mechanisms (via SOAP headers, independent from the transport protocol
used). Axis also integrates access authentication and authorization mechanisms
which can be interfaced with the security mechanisms defined by the J2EE
Servlet API.
Greater SOAP support: Axis fully supports the SOAP 1.1 specification,
and even offers partial compatibility with SOAP 1.2. Another new feature
that was not offered by Apache SOAP is the support for the concept of
actors (now called roles in SOAP 1.2) and the "mustUnderstand" attribute
in SOAP header blocks. Conversely, Axis does not yet support the concept
of SOAP intermediaries.
Improved interoperability with the other SOAP implementations on
the market: In particular, Axis is now able to process SOAP messages with
untyped parameters. This brings greater interoperability with other SOAP
implementations such as Microsoft's MS-SOAP, which use untyped parameters
in SOAP message exchanges.
Conclusion
Compared
to Apache SOAP, Axis can truly be seen as a revolution, which may bring
the development of Web Services into a new era.
Firstly,
its modular architecture makes a new development approach possible, based
on the use of reusable components to extend the functionality of the server.
With
an entirely overhauled development model, Axis brings a simplicity to
development that was unknown with Apache SOAP, and offers greatly enhanced
productivity, particularly due to the client and server framework generation
tools for creating and calling Web Services.
However,
despite these technological advances brought by Axis, there is still much
work to be done, and the truth is that we are still some way away from
seeing a "finalized, stabilized" version of the framework.
Many of Axis' features are still in the development phase, and the available
documentation is still too sparse. Consequently, to find answers to questions
not covered in the documentation, the only options are to rely on the
Axis development mailing-lists (addresses available at http://xml.apache.org/axis/)
or close examination of the source code.
With
regard to standards compliance, considerable improvements have been made,
particularly in terms of WSDL support, and the care taken to conform to
the emerging Java standards for Web services (JAX-RPC and JAXM).
Real
progress has also been made in terms of SOAP support (full support for
SOAP 1.1 and partial support for SOAP 1.2), and clear improvements also
seem to have been made with regard to interoperability with other SOAP
implementations.
Lastly,
when it comes to the actual Web services standards, there is still much
progress to be made. In particular, the security problems are not always
resolved satisfactorily, and the standards (which are still very young),
are not always stabilized. We are still awaiting the final version of
the SOAP 1.2 specification from the W3C, and the definition of its future
replacement, XP (XML Protocol). Likewise, the new Java standards for Web
services (within the Java XML Pack), which have only recently appeared,
are still in the early stages of their development.
Axis
does, however, seem to have a promising future ahead of it, and is likely
to be at least as successful as its predecessor Apache SOAP, if not more
so. Remember that Apache SOAP was adopted by major vendors such as IBM
and iPlanet (Sun), and it therefore seems likely that Axis will in the
future become the Web Services infrastructure used by many J2EE application
servers.