You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by ch...@apache.org on 2005/02/23 10:59:21 UTC
svn commit: r154994 -
webservices/axis/trunk/java/xdocs/Axis2ArchitectureGuide.html
Author: chathura
Date: Wed Feb 23 01:59:20 2005
New Revision: 154994
URL: http://svn.apache.org/viewcvs?view=rev&rev=154994
Log:
Copy check done. Imges centered and typos removed
Modified:
webservices/axis/trunk/java/xdocs/Axis2ArchitectureGuide.html
Modified: webservices/axis/trunk/java/xdocs/Axis2ArchitectureGuide.html
URL: http://svn.apache.org/viewcvs/webservices/axis/trunk/java/xdocs/Axis2ArchitectureGuide.html?view=diff&r1=154993&r2=154994
==============================================================================
--- webservices/axis/trunk/java/xdocs/Axis2ArchitectureGuide.html (original)
+++ webservices/axis/trunk/java/xdocs/Axis2ArchitectureGuide.html Wed Feb 23 01:59:20 2005
@@ -34,7 +34,7 @@
important to note that Axis2 is not just about encoding of the messages from
Java to XML and vise versa. Axis is a framework for the Web Service stack. All
other components WS-Security, WS-RM etc of the Web Service stack fits in to Axis
-via the extension mechanism of the the Apache Axis. Apache Axis is a framework
+via the extension mechanism of the Apache Axis. Apache Axis is a framework
for Web Service Stack. Axis SOAP Message processing always starts by running
the information holder called MessageContext through the extension mechanism of
Axis. This builds the foundation for Axis so as to give a generic framework for all the Web Service add
@@ -69,14 +69,13 @@
time. </P>
There are six types of special handlers
<OL>
- <LI>TransportReceiver - Receiving the the SOAP requests at the
+ <LI>TransportReceiver - Receiving the SOAP requests at the
Server side or SOAP response at the Client Side. This can be a Servlet, Server
socket, Maillet etc
<LI>TransportSender - Sending the SOAP message to Server (As a
Request) or to Client (As response).
<LI>Sender - Initialize the outflow
- <LI>Receiver - Handles the Message Exchange Pattern (MEP) + Sync Asynchronous Behavior of the Axis, there
- are InOutSyncReciver, InOutAsyncReciver ect that would act accordingly.
+ <LI>Receiver - Handles the Message Exchange Pattern (MEP) and Sync Asynchronous Behavior of Axis. It currently supports only the InOutSyncReciver, but eventually it will support InOutAsyncReciver etc that would act accordingly.
<LI>Provider - Invokes the business logic of the Web
Service, this can be JavaProvider, XMLProvider etc.
<LI>Dispatcher - decides which Web Service should be invoked at the Server
@@ -95,10 +94,10 @@
<LI>Then the TransportReceiver creates an AxisEngine and invokes the Axis Engine
with the MessageContext. The Engine will invoke the Handlers that can be found
without any knowledge about the Service to be invoked and then add the Dispatcher
- to the end of the ExecutionChain and invoke the Execution Chain.
+ to the end of the Execution Chain and invoke the Execution Chain.
<LI>When the invocation reaches the Dispatcher, it will dispatch
the Service and add the Service Level Handlers to itself. In other words the
- the ExecutionChain grows itself when it reaches the Dispatcher. The Dispatcher
+ the Execution Chain grows itself when it reaches the Dispatcher. The Dispatcher
will locate and add the appropriate Receiver based on the WSDL MEP's and the
Synchronous and Asynchronous behavior.
<LI>Receiver will locate the Provider and invoke the Business logic of the Web
@@ -107,8 +106,9 @@
specified by the EngineRegistry and will end with a Transport Receiver that
would send the Response SOAP message back to the Client. </LI>
</OL>
-<H3>Client Side Invocation</H3><IMG
-src="images/clientside.png" width="712" height="260">
+<H3>Client Side Invocation</H3><p align="center">
+<p align="center"><IMG
+src="images/clientside.png"> </p>
<OL>
<LI>Client Side invocation is driven by the Call object. The Call object will
load the EngineRegistry (by default) .
@@ -225,15 +225,15 @@
<P>classes/</P>
<P><STRONG><EM>The structure of module.xml file is as follows;
</EM></STRONG></P>
-<P><STRONG><EM><IMG height=127 src="images/archi002.gif"
-width=347 DESIGNTIMEURL="images/archi002.gif"></EM></STRONG></P>
+<P><STRONG><EM><p><IMG height=127 src="images/archi002.gif"
+width=347 DESIGNTIMEURL="images/archi002.gif"></p></EM></STRONG></P>
<P><STRONG><EM>The structure of service.xml file is as follows;
</EM></STRONG></P>
<P><STRONG><EM><IMG height=195 src="images/archi003.gif"
width=680 DESIGNTIMEURL="images/archi003.gif"></EM></STRONG></P>
<P><STRONG><EM>The architecture of hot deployment consists of the following
components; </EM></STRONG></P>
-<P><IMG height=304 src="images/archi004.jpg" width=423
+<P align="center"><IMG height=304 src="images/archi004.jpg" width=423
border=0 DESIGNTIMEURL="images/archi004.jpg"></P>
<P>1. The Scheduler periodically invokes the Listener to check for updates</P>
<P>2. If the Listener finds an update, it passes that information to the
@@ -372,21 +372,15 @@
<P>AXIOM interacts with the outside world using the StAX API, that means it
serializes and de-serializes using the StAX writer and StAX reader
interfaces.</P>
-<P><IMG height=217 src="images/archi005.jpg" width=552
+<P align="center"><IMG height=217 src="images/archi005.jpg" width=552
border=0 DESIGNTIMEURL="images/archi005.jpg"></P>
<P>Since most of the data binding tools support SAX based interfaces, AXIOM
comes with an adapter to be used between StAX and SAX.</P>
<H3><A name=_Toc96747286></A><A name=_Toc94950521>3.2 High Level
-Architecture</A></H3>
-<TABLE align=left>
- <TBODY>
- <TR>
- <TD width=64 height=0></TD></TR>
- <TR>
- <TD></TD>
- <TD><IMG height=282 src="images/archi006.jpg"
- width=490 DESIGNTIMEURL="images/archi006.jpg"></TD></TR></TBODY></TABLE><BR>
-<P></P>
+Architecture</A></H3><P align="center">
+<IMG height=282 src="images/archi006.jpg"
+ width=490 DESIGNTIMEURL="images/archi006.jpg"><BR>
+</P>
<P>AXIOM sees the XML input stream through the StAX stream reader, which is
being wrapped by a builder interface provided. Current implementation has two
builders, namely; </P>
@@ -411,15 +405,10 @@
model based on that. The current Axis2, comes with a linked list based
implementation of those set of APIs. (There was an effort to build another OM on
a table based model. Its now on hold.) </P>
-<TABLE>
- <TBODY>
- <TR>
- <TD width=72 height=0></TD></TR>
- <TR>
- <TD></TD>
- <TD><IMG height=246 src="images/archi007.jpg"
+<p align="center">
+<IMG height=246 src="images/archi007.jpg"
width=420
-DESIGNTIMEURL="images/archi007.jpg"></TD></TR></TBODY></TABLE><BR>Therefore one
+DESIGNTIMEURL="images/archi007.jpg"></p><BR>Therefore one
can find a factory to create OM objects, which will help to switch between
different implementations of the object model.
<P></P>
@@ -504,7 +493,7 @@
the sufficient statistics about the web service that has been described in the
WSDL file. WSDL Processing basically involves WSDL2Java, WSDL24J, and Java2WSDL.
Following sections will give a further overview of each of the above
-functionalities. <BR><BR><IMG height=339
+functionalities. <BR><BR></p><p align="center"><IMG height=339
src="images/archi008.gif" width=579 border=0
DESIGNTIMEURL="images/archi008.gif"></P>
<H3><A name=_Toc96747292>5.2 WOM</A></H3>
@@ -542,8 +531,8 @@
interface org.apache.wsdl.Component. Service Desc makes use of the functionality
provided by org.apache.wsdl.Component to interface the WOM to behave as a
Service Desc. org.apache.wsdl.Component has the following class diagram. </P>
-<P><IMG height=121 src="images/archi010.jpg" width=487
-border=0 DESIGNTIMEURL="images/archi010.jpg"><BR><IMG height=32
+<P align="center"><IMG height=121 src="images/archi010.jpg" width=487
+border=0 DESIGNTIMEURL="images/archi010.jpg"></p><BR><p align="center"><IMG height=32
src="images/archi011.gif" width=32 border=0
DESIGNTIMEURL="images/archi011.gif"></P>
<P>As the diagram illustrate the Component class provides the functionality of
@@ -553,18 +542,18 @@
specific properties using the WOM. In that sense the Axis2 Service Desc is a
wrapper to the WOM. </P>
<P>Following is the Class diagram of the top level component of the description
-Component org.apache.axis.description.impl.AxisService. <BR><BR><IMG height=391
+Component org.apache.axis.description.impl.AxisService. <BR><BR><p align="center"><IMG height=391
src="images/archi012.jpg" width=292 border=0
-DESIGNTIMEURL="images/archi012.jpg"><BR><BR>org.apache.axis.description.impl.AxisService
+DESIGNTIMEURL="images/archi012.jpg"></p><BR><BR>org.apache.axis.description.impl.AxisService
extends from the org.apache.wsdl.WSDLService and thus inherits the functionality
of the org.apache.wsdl.WSDLService. The Axis2 specific properties like provider,
ServiceClass are stored using the org.apache.wsdl.Component class which
org.apache.wsdl.WSDLService extends from. The deployment Module will pick up the
deployed service and it will build the Service Desc and deploy in the Engine
Registry. There will be an underlying WOM for each Service Desc deployed in the
-Engine Registry. <BR><IMG height=350
+Engine Registry. <BR><p align="center"><IMG height=350
src="images/archi013.gif" width=576 border=0
-DESIGNTIMEURL="images/archi013.gif"><BR><IMG height=32
+DESIGNTIMEURL="images/archi013.gif"></p><BR><p align="center"><IMG height=32
src="images/archi011.gif" width=32 border=0
DESIGNTIMEURL="images/archi011.gif"></P>
<H3><A name=_Toc96747294>5.4 WSDL Processing</A></H3>
@@ -594,13 +583,13 @@
(Addressing information is required.) </LI></OL>
<P>The following diagram describes all the invocations between sub components in
the client side.</P>
-<P><IMG height=315 src="images/archi015.jpg" width=576
+<P align="center"><IMG height=315 src="images/archi015.jpg" width=576
border=0 DESIGNTIMEURL="images/archi015.jpg"> </P>
<P><STRONG><EM>Call Class consist of following methods (Call
API)</EM></STRONG></P>
<P><IMG height=200 src="images/archi016.jpg" width=582
-border=0 DESIGNTIMEURL="images/archi016.jpg"></P><PRE><STRONG><EM>Callback Interface</EM></STRONG></PRE><PRE></PRE><PRE><IMG height=56 src="images/archi017.jpg" width=499 border=0 DESIGNTIMEURL="images/archi017.jpg"></PRE><PRE></PRE><PRE><STRONG><EM>AsyncResult </EM></STRONG></PRE><PRE></PRE><PRE><IMG height=48 src="images/archi018.jpg" width=430 border=0 DESIGNTIMEURL="images/archi018.jpg"></PRE><PRE></PRE><PRE><STRONG><EM>Correlator</EM></STRONG></PRE><PRE></PRE>
-<P><IMG height=73 src="images/archi019.jpg" width=539
+border=0 DESIGNTIMEURL="images/archi016.jpg"></P><PRE><STRONG><EM>Callback Interface</EM></STRONG></PRE><PRE></PRE><PRE><p><IMG height=56 src="images/archi017.jpg" width=499 border=0 DESIGNTIMEURL="images/archi017.jpg"></p></PRE><PRE></PRE><PRE><STRONG><EM>AsyncResult </EM></STRONG></PRE><PRE></PRE><PRE><p><IMG height=48 src="images/archi018.jpg" width=430 border=0 DESIGNTIMEURL="images/archi018.jpg"></p></PRE><PRE></PRE><PRE><STRONG><EM>Correlator</EM></STRONG></PRE><PRE></PRE>
+<P ><IMG height=73 src="images/archi019.jpg" width=539
border=0 DESIGNTIMEURL="images/archi019.jpg"></P>
<H3><A name=_Toc96747297>6.1 sendAsync Invocation</A> </H3>
<P>This invocation is similar to fire and forget where a request is sent and an
@@ -608,14 +597,14 @@
steps : </P>
<P><IMG height=53 src="images/archi020.jpg" width=318
border=0 DESIGNTIMEURL="images/archi020.jpg"></P>
-<P><EM>Code Snippet: </EM></P><PRE><IMG height=59 src="images/archi021.jpg" width=318 border=0 DESIGNTIMEURL="images/archi021.jpg"></PRE><PRE></PRE><PRE><EM>Sequence diagram</EM></PRE><PRE></PRE><PRE><IMG height=147 src="images/archi022.jpg" width=434 border=0 DESIGNTIMEURL="images/archi022.jpg"></PRE>
+<P><EM>Code Snippet: </EM></P><PRE><p><IMG height=59 src="images/archi021.jpg" width=318 border=0 DESIGNTIMEURL="images/archi021.jpg"></p></PRE><PRE></PRE><PRE><EM>Sequence diagram</EM></PRE><PRE></PRE><PRE><p align="center"><IMG height=147 src="images/archi022.jpg" width=434 border=0 DESIGNTIMEURL="images/archi022.jpg"></p></PRE>
<H3><A name=_Toc96747298>6.2 send Invocation</A></H3>
<P>The service invocation is a void invocation. There is no return value, but
there is a wait for an acknowledgment or a SOAP Fault, It consists of the
following steps :</P><PRE>a -> call.send(SOAPEnvelope)</PRE><PRE>b -> engine.send( ..)</PRE><PRE>c -> Send the SOAP message</PRE>
<P><EM>Code Snippet: </EM></P><PRE>call.setTargetURL(URL)</PRE><PRE>call.setAction(String)</PRE><PRE>call.send(SOAPEnvelope)</PRE><PRE></PRE>
<P><EM>Sequence diagram</EM></P>
-<P><IMG height=149 src="images/archi023.jpg" width=416
+<P align="center"><IMG height=149 src="images/archi023.jpg" width=416
border=0 DESIGNTIMEURL="images/archi023.jpg"></P>
<H3><A name=_Toc96747299>6.3 sendReceive Invocation</A></H3>
<P>The service method has a response and the communication happens synchronously
@@ -623,14 +612,14 @@
is returned. </P><PRE>a -> call.sendReceive(SOAPEnvelope)</PRE><PRE>b- > engine.send (..)</PRE><PRE>c -> Send the SOAP message</PRE><PRE>d -> Receive the response over the synchronous transport</PRE><PRE>w -> ProviderX will be called as the last step in engine.receive(..) </PRE><PRE>e -> provider returns </PRE><PRE>f -> Call hand over the response to the client</PRE><PRE></PRE>
<P><EM>Code Snippet: </EM></P><PRE>call.setTargetURL(URL)</PRE><PRE>call.setAction(String)</PRE><PRE>SOAPEnvelope env=call.sendReceive(SOAPEnvelope)</PRE>
<P><EM>Sequence diagram</EM></P>
-<P><IMG height=199 src="images/archi024.jpg" width=439
+<P align="center"><IMG height=199 src="images/archi024.jpg" width=439
border=0 DESIGNTIMEURL="images/archi024.jpg"></P>
<H3><A name=_Toc96747300>6.4 sendReceiveAsync Invocation</A></H3>
<P>The service method has a response and the communication happens synchronously
using a bi-directional protocol. Client DOES NOT hangs until the response (or
fault) is returned. The Client uses a callback mechanism to retrieve the
response. The Call API uses threads from a thread pool for each invocation. </P><PRE>a -> call.sendReceiveAsync (SOAPEnvelope, callbackObj)</PRE><PRE>p -> correlator.addCorrelationInfor(msgID,allbackObjRef)</PRE><PRE>b- > engine.send (..)</PRE><PRE>c -> Send the SOAP message</PRE><PRE>d -> Receive the response over the synchronous transport</PRE><PRE>w -> ProviderX will be called as the last step in engine.receive(..) </PRE><PRE>q -> correlator.getCorrelationInfo(msgID)</PRE><PRE>g -> callbackObj.onComplete()</PRE>
-<P><EM>Code Snippet: </EM></P><PRE>call.setTargetURL(URL)</PRE><PRE>call.setAction(String)</PRE><PRE>call.setListenerTransport(http, true) </PRE><PRE>call.sendReceiveAsync (SOAPEnvelope, Callback)</PRE><PRE></PRE><PRE><EM>Sequence diagram </EM></PRE><PRE></PRE><PRE><IMG height=225 src="images/archi025.jpg" width=648 border=0 DESIGNTIMEURL="images/archi025.jpg"></PRE>
+<P><EM>Code Snippet: </EM></P><PRE>call.setTargetURL(URL)</PRE><PRE>call.setAction(String)</PRE><PRE>call.setListenerTransport(http, true) </PRE><PRE>call.sendReceiveAsync (SOAPEnvelope, Callback)</PRE><PRE></PRE><PRE><EM>Sequence diagram </EM></PRE><PRE></PRE><PRE><p align="center"><IMG height=225 src="images/archi025.jpg" width=648 border=0 DESIGNTIMEURL="images/archi025.jpg"></p></PRE>
<H3><A name=_Toc96747301></A><A
name=head-6b6f0ac54f2e98ce920bf68485a695e1d2b></A>6.5 sendReceiveAsync
Invocation with One way transport</H3>
@@ -641,5 +630,5 @@
invocation. </P><PRE>a -> call.sendReceiveAsync (SOAPEnvelope, callbackObj)</PRE><PRE>p -> correlator.addCorrelationInfor(msgID,allbackObjRef)</PRE><PRE>b- > engine.send (..)</PRE><PRE>c -> Send the SOAP message</PRE><PRE>r -> Receive the response by the listener</PRE><PRE>s -> engine.receive(..)</PRE><PRE>w -> ProviderX will be called as the last step in engine.receive(..) </PRE><PRE>q -> correlator.getCorrelationInfo(msgID)</PRE><PRE>g -> callbackObj.onComplete()</PRE>
<P><EM>Code Snippet: </EM></P><PRE>call.setTargetURL(URL)</PRE><PRE>call.setAction(String)</PRE><PRE>call.setListenerTransport(http, false)</PRE><PRE>call.sendReceiveAsync(SOAPEnvelope, Callback)</PRE>
<P><EM>Sequence diagram </EM></P>
-<P><IMG height=234 src="images/archi026.jpg" width=648
+<P align="center"><IMG height=234 src="images/archi026.jpg" width=648
border=0 DESIGNTIMEURL="images/archi026.jpg"> </P></BODY></HTML>