axis-java-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From chinth...@apache.org
Subject svn commit: r366437 [4/6] - in /webservices/axis2/trunk/java/xdocs: ./ 0_93/ 0_93/adb/ 0_93/adb/images/ 0_93/images/ 0_93/images/archi-guide/ 0_93/images/faq/ 0_93/images/tools/ 0_93/images/tools/service/ 0_93/images/tools/wsdl/ 0_93/images/userguide/ ...
Date Fri, 06 Jan 2006 06:31:04 GMT
Added: webservices/axis2/trunk/java/xdocs/0_93/mail-transport.html
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/xdocs/0_93/mail-transport.html?rev=366437&view=auto
==============================================================================
--- webservices/axis2/trunk/java/xdocs/0_93/mail-transport.html (added)
+++ webservices/axis2/trunk/java/xdocs/0_93/mail-transport.html Thu Jan  5 22:24:56 2006
@@ -0,0 +1,277 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+  <title>Invoking a service using
+a mail</title>
+</head>
+<body>
+<h1>Invoking
+a service using a mail</h1>
+<h2>Prologue</h2>
+<p>Most of the web services that we
+interact with are synchronous and request-response in nature. However,
+we see that the synchronous request-response type of interaction is
+only a part of the messaging scenarios we encounter in real life.
+Asynchronous messaging is very important in constructing loosely
+coupled systems. Take for an instance a chain of stores, at the end of
+the day all the stores all over can send a mail to the central system
+telling it what that days business activity was and in the morning when
+the store opens there will be a reply to that mail with new
+instructions and updates. It is a lot like the way the old business
+worked but with a modern touch. Similarly Axis2 mail transport can be
+used to implement SETI@HOME through mail.</p>
+<h2>Introduction</h2>
+<p>To get things started you will
+first need to go through the Mail Transport <a
+ href="mail-configuration.html">configuration document</a>. It will give you all
+the information you need about how to configure Axis2 to get the mail
+transport working.</p>
+<p>Broadly speaking there are 3
+ways of calling a service through mail.
+</p>
+<blockquote>1. Using the simple
+mail server included in Axis2.<br>
+2. Using a generic mail server.<br>
+3. Using mailets.<br>
+</blockquote>
+<p></p>
+<p>Option number 1 and 2 are
+fairly simple and easy to implement, whereas option 3 is somewhat
+harder [unless of course you are one of those guys who see mails going
+around in your dreams.]. However the mailet scenario provides a more robust and useful
+solution in a production environment.</p>
+<p>If you are not a guru in mail
+related issues you should probably get started on the simple mail server
+that has been provided with Axis2. Once you get the hang of the Axis2
+related issues then you can move onto tackle the mail beast. Please do
+keep in mind that the mail server we have implemented is ONLY FOR
+DEMONSTRATION/TESTING PURPOSES.</p>
+<h3>1. Using the simple mail
+server included in Axis2</h3>
+<p>Before we start I want to
+reiterate the fact that the mail server included with Axis2 is ONLY FOR
+DEMONSTRATION/TESTING PURPOSES.</p>
+<p>The SMTP/POP server that we
+have included has the ability to function as a standalone SMTP/POP
+server and also has the ability to work as a mailet. All this is done
+through a small filter that keeps watch for certain pre-configured
+email addresses. These pre-configured email addresses can be changed by
+doing a simple edit of the filter class
+org.apache.axis2.transport.mail.server.Sorter.</p>
+<p>Now that we have the
+environment set up, let us start pumping out some code to get the mail
+functionality off the ground. First we'll have a look at it from the
+mail server side. <br>
+</p>
+<source><pre>
+        // Start the mail server using the default configurations.
+        ConfigurationContext configContext = UtilsMailServer.start();
+
+        // Start the default mail listener. It will starting poling for mail
+        // using the configuration from the XML file.
+        SimpleMailListener ml = new SimpleMailListener();
+        ml.init(configContext, configContext.getAxisConfiguration()
+                .getTransportIn(new QName(Constants.TRANSPORT_MAIL)));
+        ml.start();
+
+        // Setup a service that will echo what we send to the server.
+        AxisService axisService = Utils.createSimpleService(serviceName,
+                Echo.class.getName(), new QName("echoOMElement"));
+        configContext.getAxisConfiguration().addService(axisService);
+        Utils.resolvePhases(configContext.getAxisConfiguration(), axisService);
+        ServiceContext serviceContext = configContext
+                .createServiceContext(new QName("EchoXMLService"));
+</pre></source>
+<p>This code sets up your Axis2
+server working through mail, with a single service. If you need to
+have a look under the hood have a look at the MailServer and
+UtilsMailServer classes.</p>
+<p>Moving onto the client side
+have a look at the code listing below. It will call the axisService that
+was setup on the previous code listing.</p>
+<source><pre>
+        ConfigurationContext configContext = UtilsMailServer
+                .createClientConfigurationContext();
+        AxisService axisService = new AxisService(serviceName);
+        AxisOperation axisOperation = new AxisOperation(operationName);
+        axisOperation.setMessageReceiver(new MessageReceiver() {
+                public void receive(MessageContext messgeCtx) throws AxisFault {
+                        envelope = messgeCtx.getEnvelope();
+                }
+        });
+        axisService.addOperation(axisOperation);
+        configContext.getAxisConfiguration().addService(axisService);
+        Utils.resolvePhases(configContext.getAxisConfiguration(), axisService);
+        ServiceContext serviceContext = configContext
+                .createServiceContext(serviceName);
+        org.apache.axis2.clientapi.Call call = new org.apache.axis2.clientapi.Call(
+                serviceContext);
+        call.setTo(targetEPR);
+        call.setTransportInfo(Constants.TRANSPORT_MAIL,
+                Constants.TRANSPORT_MAIL, true);
+        // Create a callback to set to the axisService invocation.
+        Callback callback = new Callback() {
+                public void onComplete(AsyncResult result) {
+                        try {
+                                result.getResponseEnvelope().serialize(
+                                        XMLOutputFactory.newInstance()
+                                                .createXMLStreamWriter(System.out));
+                        } catch (XMLStreamException e) {
+                                reportError(e);
+                        } finally {
+                                finish = true;
+                        }
+                }
+                public void reportError(Exception e) {
+                        log.info(e.getMessage());
+                        finish = true;
+                }
+         };
+
+        // Call the service and start poling for the reply from the server.
+        call.invokeNonBlocking(operationName.getLocalPart(), createEnvelope(),
+                callback);
+        int index = 0;
+        while (!finish) {
+                Thread.sleep(1000);
+                index++;
+                if (index &gt; 10) {
+                        throw new AxisFault(
+                                "Server is being shutdown as the Async response is taking too long.");
+                }
+        }
+        call.close();
+</pre></source>
+<p>This will call the service that
+was setup on the server and will poll the mail server till the response
+is received. Well that is all there is to it.</p>
+<p></p>
+<h3>2. Using a generic mail server</h3>
+<p>First you need two email
+accounts that works with POP/SMTP. One will act as a server and the
+other will act as the client. For the time being we will use
+server@somewhere.org and client@somewhere.org as the server and the
+client email addresses. Now that we have the email addresses you will
+have to set up the client and the server looking at the Mail Transport <a
+ href="http://ws.apache.org/axis2/mail-transport.html">introduction
+document</a>.</p>
+<p>When calling the generic mail
+server the client side code will remain the same and there will be some
+modification to the server-side code.</p>
+<p>
+</p>
+<source><pre>
+        // Create a configuration context. This will also load the details about the mail
+        // address to listen to from the configuration file.
+        File file = new File(MAIL_TRANSPORT_SERVER_ENABLED_REPO_PATH);
+        ConfigurationContextFactory builder = new ConfigurationContextFactory();
+        ConfigurationContext configContextbuilder
+                .buildConfigurationContext(file.getAbsolutePath());
+
+        // Startup the default mail server and start listening to a 
+        // mail address.
+        SimpleMailListener ml = new SimpleMailListener();
+        ml.init(configContext, configContext.getAxisConfiguration()
+                .getTransportIn(new QName(Constants.TRANSPORT_MAIL)));
+        ml.start();
+
+        // Setup a simple service.
+        AxisService axisService = Utils.createSimpleService(serviceName,
+                Echo.class.getName(), operationName);
+        configContext.getAxisConfiguration().addService(axisService);
+        Utils.resolvePhases(configContext.getAxisConfiguration(), axisService);
+        ServiceContext serviceContext = configContext.createServiceContext(serviceName);
+</pre></source>
+<p>We have to create a separate ConfigurationContext and then use that. We are done; wasn't that simple?</p>
+<h3>3. Calling Axis through a
+James mailet</h3>
+<p>This process will be a bit more
+challenging than the other two methods but will provide a really
+elegant way to use the mail transport. Before we get started you will
+have to go though the James documents <a
+ href="http://james.apache.org/custom_matcher_2_1.html">Writing
+a Custom Matcher</a> and <a
+ href="http://james.apache.org/custom_mailet_2_1.html">Writing
+a Custom Mailet</a>.</p>
+<p>Now that we know the James part of it lets dive into to the Axis2 part of the code. Once you have set up the James side of business we just need to use the same functionality that is used in the above code. Have a look at the code listing below for more details</p>
+<source><pre>
+    public void processMail(ConfigurationContext confContext, MimeMessage mimeMessage) {
+        // create an Axis server
+        AxisEngine engine = new AxisEngine(confContext);
+        MessageContext msgContext = null;
+        // create and initialize a message context
+        try {
+            // Create a message context with mail as in and out transports.
+            msgContext =
+                    new MessageContext(confContext,
+                            confContext.getAxisConfiguration().getTransportIn(new QName(Constants.TRANSPORT_MAIL)),
+                            confContext.getAxisConfiguration().getTransportOut(new QName(Constants.TRANSPORT_MAIL)));
+            msgContext.setServerSide(true);
+
+            msgContext.setProperty(MailConstants.CONTENT_TYPE, mimeMessage.getContentType());
+            msgContext.setWSAAction(getMailHeader(MailConstants.HEADER_SOAP_ACTION, mimeMessage));
+
+            // The service path is in the subject of the mail.
+            String serviceURL = mimeMessage.getSubject();
+            if (serviceURL == null) {
+                serviceURL = "";
+            }
+
+            String replyTo = ((InternetAddress) mimeMessage.getReplyTo()[0]).getAddress();
+            if (replyTo != null) {
+                msgContext.setReplyTo(new EndpointReference(replyTo));
+            }
+
+            String recipients = ((InternetAddress) mimeMessage.getAllRecipients()[0]).getAddress();
+
+            if (recipients != null) {
+                msgContext.setTo(new EndpointReference(recipients + "/" + serviceURL));
+            }
+
+            // add the SOAPEnvelope
+            String message = mimeMessage.getContent().toString();
+            ByteArrayInputStream bais = new ByteArrayInputStream(message.getBytes());
+            XMLStreamReader reader = XMLInputFactory.newInstance().createXMLStreamReader(bais);
+
+            // This is just in place to work with SOAP 1.1 and 1.2.
+            String soapNamespaceURI = "";
+            if (mimeMessage.getContentType().indexOf(SOAP12Constants.SOAP_12_CONTENT_TYPE) > -1) {
+                soapNamespaceURI = SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI;
+            } else if (mimeMessage.getContentType().indexOf(SOAP11Constants.SOAP_11_CONTENT_TYPE) > -1) {
+                soapNamespaceURI = SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI;
+
+            }
+            StAXBuilder builder = new StAXSOAPModelBuilder(reader, soapNamespaceURI);
+
+            SOAPEnvelope envelope = (SOAPEnvelope) builder.getDocumentElement();
+            msgContext.setEnvelope(envelope);
+            if (envelope.getBody().hasFault()) {
+                engine.receiveFault(msgContext);
+            } else {
+                engine.receive(msgContext);
+            }
+        } catch (Exception e) {
+            try {
+                if (msgContext != null) {
+                    MessageContext faultContext = engine.createFaultMessageContext(msgContext, e);
+                    engine.sendFault(faultContext);
+                }
+            } catch (Exception e1) {
+                log.error(e);
+            }
+        }
+    }
+</pre>
+</source>
+<p>If you don't happen to have a ConfigurationContext lying around to call this method you can use the following bit of code to get one. Once you create one you can store that on the mailet and keep using it.
+</p>
+<source><pre>
+        File file = new File(MAIL_TRANSPORT_SERVER_ENABLED_REPO_PATH);
+        ConfigurationContextFactory builder = new ConfigurationContextFactory();
+        ConfigurationContext configContextbuilder
+                .buildConfigurationContext(file.getAbsolutePath());
+</pre>
+</source>
+<p>Well that seems to be all from the wonderful world of mail for now. :)</p>
+</body>
+</html>

Added: webservices/axis2/trunk/java/xdocs/0_93/migration.html
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/xdocs/0_93/migration.html?rev=366437&view=auto
==============================================================================
--- webservices/axis2/trunk/java/xdocs/0_93/migration.html (added)
+++ webservices/axis2/trunk/java/xdocs/0_93/migration.html Thu Jan  5 22:24:56 2006
@@ -0,0 +1,160 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
+<html>
+<head>
+  <meta content="">
+  <meta content="">
+  <meta content="">
+  <meta content="">
+  <meta content="">
+  <meta content="">
+  <meta content="">
+  <meta content="">
+  <meta content="">
+  <meta content="">
+  <meta http-equiv="content-type" content="">
+  <title>Migrating from Axis 1.x</title>
+</head>
+
+<body lang="en">
+<h1>Migrating from Axis 1.x to Axis 2</h1>
+
+<h2>Compatibility</h2>
+
+<p>Axis1.x and Axis2 have been evolved from different architectures.</p>
+
+<p>Speed - Axis2 is based on StAX API, which gives greater speed than SAX
+event base parsing that has been used in Axis1.x.</p>
+
+<p>Stability - Axis2 has fixed phases and for extensions an area of user
+defined phases. This allows far more stability and flexibility than
+Axis1.x.</p>
+
+<p>Transport framework - Simple abstraction designing of transports (i.e.,
+senders and listeners for SOAP over various protocols such as SMTP, etc),
+allow far more flexibility and the core of the engine is completely
+transport-independent.</p>
+
+<p>WSDL Support - Axis2 supports version 1.1 and 2.0, which allow creating
+stubs and skeletons, to manipulate web service arena.</p>
+
+<p>Component - Oriented Architecture - This is merely through archives (.mar
+and .aar) . Easily reusable components such as Handlers, Modules allow
+patterns processing for your applications, or to distribute to partners.
+Axis2 more concern on the "Module" concept rather Handler concept. Modules
+contain handlers that have been ordered through phase rules. which being
+ordered to specific service(s).</p>
+
+<h2>Getting Started</h2>
+
+<p>Lets look at a simple example of echoing at client API</p>
+
+<p><b>Axis 1.x</b></p>
+<pre>import ..
+public class TestClient {
+        public static void main(String [] args) {
+                try {
+                        String endpoint = ...
+                        Service axisService = new Service();
+                        Call call = (Call) axisService.createCall();
+                        call.setTargetEndpointAddress( new java.net.URL(endpoint) );
+                        call.setOperationName(new QName("http://soapinterop.org/", echoString"));
+                        String ret = (String) call.invoke( new Object[] { "Hello!" } );
+                        System.out.println("Sent 'Hello!', got '" + ret + "'");
+                } catch (Exception e) {
+                        System.err.println(e.toString());
+                }
+        }
+}</pre>
+
+<p><b>Axis 2</b></p>
+<pre>import ....
+public class EchoBlockingClient {
+        private static EndpointReference targetEPR = new EndpointReference(
+        AddressingConstants.WSA_TO,
+                                "http://127.0.0.1:8080/axis2/services/MyService");
+        public static void main(String[] args) {
+                try {
+                        OMElement payload = ClientUtil.getEchoOMElement();
+                        Options options = new Options();
+                        Call call = new Call();
+                        options.setTo(targetEPR);
+                        options.setSenderTransport(new TransportOutDescription(new QName(Constants.TRANSPORT_HTTP)));
+                        //Blocking invocation
+                        OMElement result = (OMElement) call.invokeBlocking("echo",payload);
+                        ...
+                } catch (AxisFault axisFault) {
+                        axisFault.printStackTrace();
+                } catch (XMLStreamException e) {
+                        e.printStackTrace();
+                }
+        }
+}</pre>
+
+<p>It has clearly depicted that the invocation in Axis2 is dealt with SOAP
+body element itself. Here the invocation is synchronous, and Axis2 can handle
+Asynchronous invocation as well. Above "payload" is the SOAP body element
+which should go in the Envelop.</p>
+
+<p>Once the service is called through Stub in Axis2, "payload" is according
+to the data binding framework that will be using. So the extra work of
+"payload" will be vanished.</p>
+
+<p>Apart from Synchronous invocation, Axis2 support Asynchronous invocation
+through invokeNonBlocking(). Synchronous/Asynchronous invocations can handle
+both single/double HTTP connection.</p>
+
+<p>With the advance architecture Axis2 is capable of handling Megabytes of
+Requests and Responses, which is far form Axis1.x.</p>
+
+<h2>Custom Deployment of Services, Handlers and Modules</h2>
+
+<p>In Axis 1.x deployment of services is via WSDD, which is for my opinion
+highly cumbersome. Service deployment in Axis2 is straight forward and
+dynamic. Dynamic behavior is from the Administrator facility given by
+development in server side. It's just a matter of creating a .aar file, and
+deploying it ,which more detail is given in the Axis2 user guide.</p>
+
+<p>Axis2 is far way from Handler concept and more into the Module concept,
+which is abstractly speaking, a collection of handlers with Rules of
+governing. Modules created as a .mar file. It has module.xml, which is the
+brain behind manipulating handlers.</p>
+
+<p>When a service is called through a handler, it is just a matter of giving
+reference to the module that includes the handler in the service.xml. Apart
+from that a handler can be directly called to a particular service, via
+service.xml, no module is needed, and several handlers can be invoked when
+the handlers are registered with the proper phases.</p>
+
+<p>Services are hot deployable in Axis2 and dynamic, but Modules. This is one
+feature, which is unique to Axis2.</p>
+
+<h2>Transports for HTTP Connection</h2>
+
+<p>Axis2 comes with two  CommonsHTTPTransportSender which is based on
+commons-httpclient. The configuration of the transport is as follows,</p>
+<pre>Options.setTransportInfo(Constants.TRANSPORT_HTTP, Constants.TRANSPORT_HTTP, false);</pre>
+
+<p>It should be noted that axis2.xml should be configured to call the commons
+transports, with the statement,</p>
+<pre>...
+&lt;transportSender name="http" class="org.apache.axis2.transport.http.CommonsHTTPTransportSender"&gt; 
+   &lt;parameter name="PROTOCOL" locked="false"&gt;HTTP/1.1&lt;/parameter&gt; 
+   &lt;parameter name="Transfer-Encoding" locked="false"&gt;chunked&lt;/parameter&gt;
+&lt;/transportSender&gt;
+...
+</pre>
+
+<h2>Data Binding Support</h2>
+
+<p>Xml-beans is used to provide data binding support. In Axis2, xml is
+manipulated via AXIOM, which is based on StAX API. XML give full schema
+support. Thus, serialization and de-serialization of Xml is handle in Axis2
+via xml-data binding framework.</p>
+
+<h2>Best Usage</h2>
+
+<p>Axis1.x and Axis2 have different ways of seen the SOAP stack. So the best
+way to migrate can be done through following the User guide and Architecture
+guide properly in Axis2. Axis2 is straight forward and friendly.</p>
+</body>
+</html>

Added: webservices/axis2/trunk/java/xdocs/0_93/mtom-guide.html
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/xdocs/0_93/mtom-guide.html?rev=366437&view=auto
==============================================================================
--- webservices/axis2/trunk/java/xdocs/0_93/mtom-guide.html (added)
+++ webservices/axis2/trunk/java/xdocs/0_93/mtom-guide.html Thu Jan  5 22:24:56 2006
@@ -0,0 +1,459 @@
+<html>
+<head>
+  <meta http-equiv="Content-Type" content="">
+  <title>Sending Binary data with SOAP</title>
+</head>
+
+<body>
+<h1>Sending Binary Data with SOAP</h1>
+<ul>
+  <li><a href="#1">Introduction</a></li>
+  <li><a href="#2">MTOM with Axis2 </a>
+    <ul>
+      <li><a href="#21">Programming Model</a></li>
+      <li><a href="#22">Enabling MTOM optimization at client side</a></li>
+      <li><a href="#23">Enabling MTOM optimization at server side</a></li>
+      <li><a href="#24">Accessing received Binary Data (Sample Code) </a>
+        <ul>
+          <li><a href="#241">Service</a></li>
+          <li><a href="#242">Client</a></li>
+        </ul>
+      </li>
+    </ul>
+  </li>
+  <li><a href="#3">SOAP with Attachments with Axis2</a></li>
+  <li><a href="#4">Advanced Topics </a>
+    <ul>
+      <li><a href="#41">File Caching for Attachments</a></li>
+    </ul>
+  </li>
+</ul>
+
+<p><a name="1"></a></p>
+
+<h2>Introduction</h2>
+
+<p>Despite the flexibility, interoperability and global acceptance of XML,
+there are times when serializing data into XML does not make sense. Web
+services users may need to transmit binary attachments of various sorts like
+images, drawings, xml docs, etc together with SOAP message. Such data are
+often in a particular binary format.<br>
+Traditionally, two techniques have been used in dealing with opaque data in
+XML;</p>
+<ol>
+  <li><strong>"By value"</strong></li>
+
+  <blockquote>
+    <p>Sending binary data by value is achieved by embedding opaque data (of
+    course after some form of encoding) as element or attribute content of
+    the XML component of data. The main advantage of this technique is that
+    it gives applications the ability to process and describe data based and
+    looking only on XML component of the data.</p>
+
+    <p>XML supports opaque data as content through the use of either base64
+    or hexadecimal text encoding. Both these techniques bloat the size of the
+    data. For UTF-8 underlying text encoding, base64 encoding increases the
+    size of the binary data by a factor of 1.33x of the original size, while
+    hexadecimal encoding expands data by a factor of 2x. Above factors will
+    be doubled if UTF-16 text encoding is used. Also of concern is the
+    overhead in processing costs (both real and perceived) for these formats,
+    especially when decoding back into raw binary.</p>
+  </blockquote>
+  <li><strong>"By reference"</strong>
+
+    <blockquote>
+      <p>Sending binary data by reference is achieved by attaching pure
+      binary data as external unparsed general entities outside of the XML
+      document and then embedding  reference URI's to those entities as
+      elements or attribute values. This prevents the unnecessary bloating of
+      data and wasting of processing power. The primary obstacle for using
+      these unparsed entities is their heavy reliance on DTDs, which impedes
+      modularity as well as use of XML namespaces.</p>
+      <p>There were several specifications introduced in the web services
+      world to deal with this binary attachment problem using the "by
+      reference" technique. <a
+      href="http://www.w3.org/TR/SOAP-attachments">SOAP with Attachments</a>
+      is one such example. Since SOAP prohibits document type declarations
+      (DTD) in messages, this leads to the  problem of not  representing data
+      as part of the message infoset, creating two data models. This scenario
+      is like sending attachments with an e-mail message. Even though those
+      attachments are related to the message content they are not inside the
+      message.  This causes the technologies for processing and description
+      of data based on XML component of the data, to malfunction. One example
+      is  WS-Security.</p>
+    </blockquote>
+  </li>
+</ol>
+
+<p><a href="http://www.w3.org/TR/2004/PR-soap12-mtom-20041116/">MTOM (SOAP
+Message Transmission Optimization Mechanism)</a> is another specification
+which focuses on solving the "Attachments" problem. MTOM tries to leverage
+the advantages of above two techniques by trying to merge the above two
+techniques. MTOM is actually a "by reference" method. Wire format of a MTOM
+optimized message is same as the Soap with Attachments message, which also
+makes it backward compatible with SwA endpoints. The most notable feature of
+MTOM is the use of XOP:Include element, which is defined in <a
+href="http://www.w3.org/TR/2004/PR-xop10-20041116/">XML Binary Optimized
+Packaging (XOP)</a> specification to reference  the binary attachments
+(external unparsed general entities) of the message. With the use of this
+exclusive element the attached binary content logically become inline (by
+value) with the SOAP document even though actually it is attached separately.
+This merges the two realms by making it possible to work only with one data
+model. This allows the applications to process and describe by only looking
+at XML part making reliance on DTDs obsolete. On a lighter note MTOM has
+standardized the referencing mechanism of SwA. Following is an extract from
+the <a href="http://www.w3.org/TR/2004/PR-xop10-20041116/">XOP</a>
+specification.</p>
+
+<p><em>At the conceptual level, this binary data can be thought of as being
+base64-encoded in the XML Document. As this conceptual form might be needed
+during some processing of the XML Document (e.g., for signing the XML
+document), it is necessary to have a one to one correspondence between XML
+Infosets and XOP Packages. Therefore, the conceptual representation of such
+binary data is as if it were base64-encoded, using the canonical lexical form
+of XML Schema base64Binary datatype (see <a href="#XMLSchemaP2">[XML Schema
+Part 2: Datatypes Second Edition] </a><a
+href="http://www.w3.org/TR/2004/REC-xmlschema-2-20041028/#base64Binary">3.2.16
+base64Binary</a>). In the reverse direction, XOP is capable of optimizing
+only base64-encoded Infoset data that is in the canonical lexical
+form.</em></p>
+
+<p>Apache Axis2 supports <strong>Base64 encoding</strong>, <strong>SOAP with
+Attachments</strong> &amp; <strong>MTOM (SOAP Message Transmission
+Optimization Mechanism).</strong></p>
+
+<p><a name="2"></a></p>
+
+<h1>MTOM with Axis2</h1>
+
+<p><a name="21"></a></p>
+
+<h2>Programming Model</h2>
+
+<p>AXIOM is an (may be the first) Object Model which has the ability to hold
+binary data. It has been given this ability by allowing OMText to hold raw
+binary content in the form of javax.activation.DataHandler.  OMText has been
+chosen for this purpose with two reasons. One is that XOP (MTOM) is capable
+of optimizing only base64-encoded Infoset data that is in the canonical
+lexical form of XML Schema base64Binary datatype. Other one is to preserve
+the infoset in both sender and receiver (To store the binary content in the
+same kind of object regardless of whether it is optimized or not).</p>
+
+<p>MTOM allows to selectively encode portions of the message, which allows us
+to send base64encoded data as well as externally attached raw binary data
+referenced by "XOP" element (optimized content) to be send in a SOAP message.
+User can specify whether an OMText node which contains raw binary data or
+base64encoded binary data is qualified to be optimized or not at the
+construction time of that node or later. To take the optimum efficiency of
+MTOM a user is advised to send smaller binary attachments using
+base64encoding (None optimized) and larger attachments as optimized
+content.</p>
+<source><pre>        OMElement imageElement = fac.createOMElement("image", omNs);
+
+        // Creating the Data Handler for the image.
+        // User has the option to use a FileDataSource or a ImageDataSource 
+        // in this scenario...
+        Image image;
+        image = new ImageIO()
+                .loadImage(new FileInputStream(inputImageFileName));
+        ImageDataSource dataSource = new ImageDataSource("test.jpg",image);
+        DataHandler dataHandler = new DataHandler(dataSource);
+
+        //create an OMText node with the above DataHandler and set optimized to true
+        OMText textData = fac.createText(dataHandler, true);
+        imageElement.addChild(textData);
+
+        //User can set optimized to false by using the following
+        //textData.doOptimize(false);</pre>
+</source>
+<p>Also a user can create an optimizable binary content node  using a base64
+encoded string, which contains encoded binary content, given with the mime
+type of the actual binary representation.</p>
+<source><pre>        String base64String = "some_string";
+        OMText binaryNode =  fac.createText(base64String,"image/jpg",true);</pre>
+</source>
+<p>Axis2 uses javax.activation.DataHandler to handle the binary data. All
+optimized binary content nodes will be serialized as Base64 Strings if "MTOM
+is not enabled". One can also create binary content nodes which will not be
+optimized at any case. They will be serialized and send as Base64 Strings.</p>
+<source><pre>        //create an OMText node with the above DataHandler and set "optimized" to false
+        //This data will be send as Base64 encoded string regardless of MTOM is enabled or not
+        javax.activation.DataHandler dataHandler = new javax.activation.DataHandler(new FileDataHandler("someLocation"));
+        OMText textData = fac.createText(dataHandler, false); 
+        image.addChild(textData);</pre>
+</source>
+<p></p>
+
+<p><a name="22"></a></p>
+
+<h2>Enabling MTOM optimization at client side</h2>
+
+<p>Set the "enableMTOM" property in the call to true, when sending
+messages.</p>
+<source><pre>        Call call = new Call();
+        Options options = new Options();
+        options.setTo(targetEPR);
+        options.setProperty(Constants.Configuration.ENABLE_MTOM, Constants.VALUE_TRUE);
+        call.setClientOptions(options);</pre>
+</source>
+<p>When this property is set to true any SOAP envelope which contains
+optimizable content (OMText nodes containing binary content with optimizable
+flag "true") will be serialized as a MTOM optimized message. Messages will
+not be packaged as MTOM if they did not contain any optimizable content even
+though MTOM is enabled. But due considering the policy assertions, there may
+be a policy saying, all the request should be optimized eventhough there are
+any optimized contents. To support this phenomenon there is an entry called
+"forced mime" which has to be set as</p>
+<source><pre>        Call call = new Call();
+        Options options = new Options();
+        options.setTo(targetEPR);
+        options.setProperty(Constants.Configuration.FORCE_MIME, Constants.VALUE_TRUE);
+        call.setClientOptions(options);</pre>
+</source>
+<p></p>
+
+<p>Axis2 serializes all binary content nodes as Base64 encoded strings
+regardless of they are qualified to be optimize or not, if,</p>
+<ul>
+  <li>"enableMTOM" property is set to false.</li>
+  <li>If envelope contains any element information items of name xop:Include
+    (see <a href="#XOP">[XML-binary Optimized Packaging] </a><a
+    href="http://www.w3.org/TR/2005/REC-xop10-20050125/#xop_infosets">3. XOP
+    Infosets Constructs </a>).</li>
+</ul>
+
+<p>MTOM is *always enabled* in Axis2 when it comes to receiving messages.
+Axis2 will automatically identify and de-serialize any MTOM message it
+receives.</p>
+
+<p></p>
+
+<p><a name="23"></a></p>
+
+<h2>Enabling MTOM optimization in the Server side</h2>
+
+<p>Axis 2 server automatically identifies incoming MTOM optimized messages
+based on the content-type and de-serializes accordingly. User can enableMTOM
+in the server side for outgoing messages,</p>
+<ul>
+  <li>Globally for all services
+
+    <blockquote>
+      <p>add and set the "enableMTOM" parameter to true in the Axis2.xml.
+      When it is set,  *outgoing* messages *which contains optimizable
+      content* will be serialized and send as a MTOM optimized messages. If
+      it is not set all the binary data in binary content nodes will be
+      serialized as Base64 encoded strings.</p>
+    </blockquote>
+  </li>
+</ul>
+
+<p><source></p>
+<pre>&lt;parameter name="enableMTOM" locked="false"&gt;true&lt;/parameter&gt;</pre>
+</source><ul>
+  <ul>
+    <p>User must restart the server after setting this parameter.</p>
+  </ul>
+</ul>
+
+<p><a name="24"></a></p>
+
+<h2>Accessing received Binary Data</h2>
+<ul>
+  <li><strong><a name="241"></a>Service</strong></li>
+</ul>
+<source><pre>public class MTOMService {
+    public OMElement mtomSample(OMElement element) throws Exception {
+        OMElement imageEle = element.getFirstElement();
+        OMElement imageName = (OMElement) imageEle.getNextSibling();
+        OMText binaryNode = (OMText) imageEle.getFirstChild();
+        String fileName = imageName.getText();
+
+        //Extracting the data and saving
+        DataHandler actualDH;
+        actualDH = binaryNode.getDataHandler();
+        Image actualObject = new ImageIO().loadImage(actualDH.getDataSource()
+                .getInputStream());
+        FileOutputStream imageOutStream = new FileOutputStream(fileName);
+        new JDK13IO().saveImage("image/jpeg", actualObject, imageOutStream);
+
+        //setting response
+        OMFactory fac = OMAbstractFactory.getOMFactory();
+        OMNamespace ns = fac.createOMNamespace("urn://fakenamespace", "ns");
+        OMElement ele = fac.createOMElement("response", ns);
+        ele.setText("Image Saved");
+        return ele;
+    }
+}</pre>
+</source><ul>
+  <li><strong><a name="242"></a>Client</strong></li>
+</ul>
+<source><pre>        Options options = new Options();
+        options.setTo(targetEPR); 
+        // enabling MTOM
+        options.set(Constants.Configuration.ENABLE_MTOM, Constants.VALUE_TRUE);
+        options.setTransportInfo(Constants.TRANSPORT_HTTP,
+                Constants.TRANSPORT_HTTP, false);
+        options.setSoapVersionURI(SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI);
+
+        OMElement result = (OMElement) call.invokeBlocking(operationName.
+                                getLocalPart(),payload);
+        OMElement ele = (OMElement) result.getFirstChild();
+        OMText binaryNode = (OMText) ele.getFirstChild();
+        
+        // Retrieving the DataHandler &amp; then do whatever the processing to the data
+        DataHandler actualDH;
+        actualDH = binaryNode.getDataHandler();
+        Image actualObject = new ImageIO().loadImage(actualDH.getDataSource()
+                .getInputStream());</pre>
+</source>
+<p><a name="3"></a></p>
+
+<h1>SOAP with Attachments (SwA) with Axis2</h1>
+
+<p>Axis2 Handles SwA messages at the inflow only. When Axis2 receives a SwA
+message it extracts the binary attachment parts and puts a reference to those
+parts in the Message Context. Users can access binary attachments using the
+content-id. Care should be taken to rip off the "cid" prefix when content-id
+is taken from the "Href" attributes. When accessing the message context from
+a service users need to use the message context injection mechanism by
+introducing an "init" method to the service class.(see the following service
+example)</p>
+
+<p>Note: Axis2 supports content-id referencing only. Axis2 does not support
+Content Location referencing of MIME parts.</p>
+<ul>
+  <li><strong>Sample service which accepts a SwA message</strong></li>
+</ul>
+<source><pre>public class EchoSwA {
+    private MessageContext msgcts;
+
+    public void init(MessageContext msgcts) {
+        this.msgcts = msgcts;
+    }
+
+    public OMElement echoAttachment(OMElement omEle) {
+        OMElement child  = (OMElement)omEle.getFirstChild();
+        //retreiving the Href attribute which contains the Content Id 
+        OMAttribute attr = (OMAttribute)child.getFirstAttribute(new QName("href"));
+        String contentID = attr.getValue();
+        //content-id processing to remove the "cid" prefix
+        contentID = contentID.trim();
+        if (contentID.substring(0, 3).equalsIgnoreCase("cid")) {
+            contentID = contentID.substring(4);
+        }
+                
+        // Retrieving the MIMEHelper instance (which contains reference to attachments)
+        // from the Message Context
+        MIMEHelper attachments = (MIMEHelper)msgcts.getProperty(MIMEHelper.ATTACHMENTS);
+        // Retrieving the respective DataHandler referenced by the content-id
+        DataHandler dataHandler = attachments.getDataHandler(contentID);
+
+        // Echoing back the attachment. Sends out MTOM message
+        OMText textNode = new OMTextImpl(dataHandler);
+        omEle.build();
+        child.detach();
+        omEle.addChild(textNode);
+        return omEle;
+    }
+}</pre>
+</source>
+<p>MTOM specification is designed to be backward compatible with the SOAP
+with Attachments specification. Even though the representation is different,
+both technologies have the same wire format. We can safely assume that any
+SOAP with Attachments endpoint can accept a MTOM optimized messages and treat
+them as SOAP with Attachment messages - Any MTOM optimized message is a valid
+SwA message. Because of that Axis2 does not define a separate programming
+model or serialization for SwA. Users can use the MTOM programming model and
+serialization to send messages to SwA endpoints.</p>
+
+<p>Note : Above is tested with Axis 1.x</p>
+<ul>
+  <li><strong>A sample SwA message from Axis 1.x</strong></li>
+</ul>
+<source><pre>Content-Type: multipart/related; type="text/xml"; 
+          start="&lt;9D645C8EBB837CE54ABD027A3659535D&gt;";
+                boundary="----=_Part_0_1977511.1123163571138"
+
+------=_Part_0_1977511.1123163571138
+Content-Type: text/xml; charset=UTF-8
+Content-Transfer-Encoding: binary
+Content-Id: &lt;9D645C8EBB837CE54ABD027A3659535D&gt;
+
+&lt;?xml version="1.0" encoding="UTF-8"?&gt;
+&lt;soapenv:Envelope xmlns:soapenv="...."....&gt;
+    ........
+                &lt;source href="cid:3936AE19FBED55AE4620B81C73BDD76E" xmlns="/&gt;
+    ........
+&lt;/soapenv:Envelope&gt;
+------=_Part_0_1977511.1123163571138
+Content-Type: text/plain
+Content-Transfer-Encoding: binary
+Content-Id: &lt;3936AE19FBED55AE4620B81C73BDD76E&gt;
+
+<em>Binary Data.....</em>
+------=_Part_0_1977511.1123163571138--</pre>
+</source><ul>
+  <li><strong>Corresponding MTOM message from Axis2</strong></li>
+</ul>
+<source><pre>Content-Type: multipart/related; boundary=MIMEBoundary4A7AE55984E7438034;
+                         type="application/xop+xml"; start="<0.09BC7F4BE2E4D3EF1B@apache.org>";
+                         start-info="text/xml; charset=utf-8"
+
+--MIMEBoundary4A7AE55984E7438034
+content-type: application/xop+xml; charset=utf-8; type="application/soap+xml;"
+content-transfer-encoding: binary
+content-id: &lt;0.09BC7F4BE2E4D3EF1B@apache.org&gt;
+
+&lt;?xml version='1.0' encoding='utf-8'?&gt;
+&lt;soapenv:Envelope xmlns:soapenv="...."....&gt;
+  ........
+         &lt;xop:Include href="cid:1.A91D6D2E3D7AC4D580@apache.org" 
+                        xmlns:xop="http://www.w3.org/2004/08/xop/include"&gt;
+         &lt;/xop:Include&gt;
+  ........
+&lt;/soapenv:Envelope&gt;
+--MIMEBoundary4A7AE55984E7438034
+content-type: application/octet-stream
+content-transfer-encoding: binary
+content-id: <1.A91D6D2E3D7AC4D580@apache.org>
+
+<em>Binary Data.....</em>
+--MIMEBoundary4A7AE55984E7438034--</pre>
+</source>
+<p><a name="4"></a></p>
+
+<h1>Advanced Topics</h1>
+
+<p><a name="41"></a></p>
+
+<h2>File Caching For Attachments</h2>
+
+<p>Axis2 comes handy with a file caching mechanism for incoming attachments,
+which gives Axis2 the ability to handle very large attachments without
+buffering them in memory at any time. Axis2 file caching streams the incoming
+MIME parts directly in to files, after reading the MIME part headers.</p>
+
+<p>Also a user can specify a size threshold for the File caching. When this
+threshold value is specified, only the attachments whose size is bigger than
+the threshold value will get cached in files. Smaller attachments will remain
+in Memory.</p>
+
+<p>NOTE : It is a must to specify a directory to temporary store the
+attachments. Also care should be taken to *clean that directory* from time to
+time.</p>
+
+<p>The following parameters need to be set in Axis2.xml in order to enable
+file caching.</p>
+<source><pre><em>&lt;axisconfig name="AxisJava2.0"&gt;
+    &lt;!-- ================================================= --&gt;
+    &lt;!-- Parameters --&gt;
+    &lt;!-- ================================================= --&gt;</em>
+    &lt;parameter name="cacheAttachments" locked="xsd:false"&gt;true&lt;/parameter&gt;
+    &lt;parameter name="attachmentDIR" locked="xsd:false"&gt;<em>temp directory</em>&lt;/parameter&gt;
+    &lt;parameter name="sizeThreshold" locked="xsd:false"&gt;4000&lt;/parameter&gt;
+    .........
+    .........
+&lt;/axisconfig&gt;</pre>
+</source></body>
+</html>

Added: webservices/axis2/trunk/java/xdocs/0_93/rest-ws.html
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/xdocs/0_93/rest-ws.html?rev=366437&view=auto
==============================================================================
--- webservices/axis2/trunk/java/xdocs/0_93/rest-ws.html (added)
+++ webservices/axis2/trunk/java/xdocs/0_93/rest-ws.html Thu Jan  5 22:24:56 2006
@@ -0,0 +1,127 @@
+<html>
+<head>
+  <meta http-equiv="content-type" content="">
+  <title>RESTful Web Services Support</title>
+</head>
+
+<body lang="en">
+<h1>RESTful Web Services Support</h1>
+
+<p>REST is providing access to resources through the two methods GET and
+POST. The REST Web services are reduced subset of the usual Web Service
+stack, and the Axis2 REST implementation assumes following properties.</p>
+<ol>
+  <li>REST Web services are Synchronous, and Request Response in nature.</li>
+  <li>When the REST Web Services are accessed via GET, the service and the
+    operations are identified based on the URL and the parameters are assumed
+    as parameters of the Web Service. In this case the GET based REST web
+    services supports only simple types as arguments.</li>
+  <li>POST based web services do not need a SOAP Envelope or a SOAP Body.
+    REST Web Services do not have Headers and the payload is directly
+  sent.</li>
+</ol>
+
+<p>Axis2 can be configured as a REST Container and can be used to send and
+receive RESTful web services requests and responses. The REST Web Services
+can be access in two ways, i.e. using HTTP GET and POST.</p>
+
+<h2>Doing REST web services with HTTP POST</h2>
+
+<p>REST's default HTTP interface is POST. It can be enabled in the
+Server/Client side by adding the following line to the axis2.xml file.</p>
+<font color="blue">&lt; parameter name="enableREST" locked="false" &gt; true
+&lt;/parameter&gt; </font>
+
+<p>But it acts both as a REST endpoint as well as a SOAP endpoint. When a
+Message is received, if the content type is text/xml and if the SOAP Action
+Headers are missing, then the Message is treated as a RESTful Message. Else
+it is treated as a usual SOAP Message.</p>
+
+<p>On sending a message out, the fact that the message is RESTful or not, can
+be decided from the client API or by deployment descriptor of the client.</p>
+<ol>
+  <li>By adding an entry in the client repositories axis2.xml file.</li>
+  <li>Setting as a property in client API e.g. <source>
+    <pre>...
+Options options = new Options();
+options.setProperty(Constants.Configuration.ENABLE_REST, Constants.VALUE_TRUE);
+...</pre>
+    </source></li>
+</ol>
+
+<h3>Sample REST - HTTP POST Client</h3>
+
+<p>There is an example named, userguide.clients.RESTClient.java which
+demonstrates the usage of the above, using the "echo"operation of the
+<source></p>
+<pre>userguide.example1.MyService </pre>
+
+<p>of the samples. And the class source will be as follows:</p>
+
+<p><source></p>
+<pre>public class RESTClient {
+
+    private static String toEpr = "http://localhost:8080/axis2/services/MyService";
+
+    public static void main(String[] args) throws AxisFault {
+
+        Options options = new Options();
+        options.setTo(new EndpointReference(toEpr));
+        options.setListenerTransportProtocol(Constants.TRANSPORT_HTTP);
+        options.setUseSeparateListener(false);
+        options.setProperty(Constants.Configuration.ENABLE_REST, Constants.VALUE_TRUE);
+
+        Call call = new Call();
+        call.setClientOptions(options);
+        
+        OMElement result = call.invokeBlocking("echo", getPayload());
+
+        try {
+            XMLStreamWriter writer = XMLOutputFactory.newInstance()
+                   .createXMLStreamWriter(System.out);
+            result.serialize(writer);
+            writer.flush();
+        } catch (XMLStreamException e) {
+            e.printStackTrace();
+        } catch (FactoryConfigurationError e) {
+            e.printStackTrace();
+        }
+    }
+
+    private static OMElement getPayload() {
+        OMFactory fac = OMAbstractFactory.getOMFactory();
+        OMNamespace omNs = fac.createOMNamespace(
+                "http://example1.org/example1", "example1");
+        OMElement method = fac.createOMElement("echo", omNs);
+        OMElement value = fac.createOMElement("Text", omNs);
+        value.addChild(fac.createText(value, "Axis2 Echo String "));
+        method.addChild(value);
+
+        return method;
+    }
+}</pre>
+</source>
+<h2>Access a REST Web Service Via HTTP GET</h2>
+
+<p>Axis2 lets the user to access Web Services that has simple type parameters
+via the HTTP GET. For example the following URL requests the Version Service
+via HTTP GET. But the web service arrives via GET assumes REST . Other
+parameters are converted in to XML and put them in to the SOAP Body.</p>
+<source><pre>http://127.0.0.1:8080/axis2/services/version/getVersion</pre>
+</source>
+<p>Result can be shown in the browser as follows.</p>
+<img src="images/userguide/http-get-ws.png">
+
+<p>For an example, the following request, <source></p>
+<pre>http://127.0.0.1:8080/axis2/services/version/getVersion</pre>
+</source>will be converted to the following SOAP Message for processing by
+Axis2.<source>
+<pre> 
+   &lt;soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"&gt;
+      &lt;soapenv:Body&gt;   
+          &lt;axis2:getVersion xmlns:axis2="http://ws.apache.org/goGetWithREST" /&gt;
+      &lt;/soapenv:Body&gt;
+   &lt;/soapenv:Envelope&gt;
+    </pre>
+</source></body>
+</html>

Added: webservices/axis2/trunk/java/xdocs/0_93/sec-conf/in-sample.xml
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/xdocs/0_93/sec-conf/in-sample.xml?rev=366437&view=auto
==============================================================================
--- webservices/axis2/trunk/java/xdocs/0_93/sec-conf/in-sample.xml (added)
+++ webservices/axis2/trunk/java/xdocs/0_93/sec-conf/in-sample.xml Thu Jan  5 22:24:56 2006
@@ -0,0 +1,7 @@
+    <parameter name="InflowSecurity">
+      <action>
+        <items>Timestamp Signature Encrypt</items>
+        <passwordCallbackClass>org.apache.axis2.security.PWCallback</passwordCallbackClass>
+        <signaturePropFile>interop.properties</signaturePropFile>
+      </action>
+    </parameter>
\ No newline at end of file

Added: webservices/axis2/trunk/java/xdocs/0_93/sec-conf/in.action.xsd
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/xdocs/0_93/sec-conf/in.action.xsd?rev=366437&view=auto
==============================================================================
--- webservices/axis2/trunk/java/xdocs/0_93/sec-conf/in.action.xsd (added)
+++ webservices/axis2/trunk/java/xdocs/0_93/sec-conf/in.action.xsd Thu Jan  5 22:24:56 2006
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
+	<xs:element name="action">
+		<xs:annotation>
+			<xs:documentation>Inflow security 'action' configuration</xs:documentation>
+		</xs:annotation>
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="items" type="xs:string"/>
+				<xs:element name="passwordCallbackClass" type="xs:string" minOccurs="0"/>
+				<xs:element name="signaturePropFile" type="xs:string" minOccurs="0"/>
+				<xs:element name="decryptionPropFile" type="xs:string" minOccurs="0"/>
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+</xs:schema>

Added: webservices/axis2/trunk/java/xdocs/0_93/sec-conf/out-action.xsd
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/xdocs/0_93/sec-conf/out-action.xsd?rev=366437&view=auto
==============================================================================
--- webservices/axis2/trunk/java/xdocs/0_93/sec-conf/out-action.xsd (added)
+++ webservices/axis2/trunk/java/xdocs/0_93/sec-conf/out-action.xsd Thu Jan  5 22:24:56 2006
@@ -0,0 +1,27 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" attributeFormDefault="unqualified">
+	<xs:element name="action">
+		<xs:annotation>
+			<xs:documentation>Outflow security 'action' configuration</xs:documentation>
+		</xs:annotation>
+		<xs:complexType>
+			<xs:sequence>
+				<xs:element name="items" type="xs:string"/>
+				<xs:element name="user" type="xs:string"/>
+				<xs:element name="passwordCallbackClass" type="xs:string" minOccurs="0"/>
+				<xs:element name="signaturePropFile" type="xs:string" minOccurs="0"/>
+				<xs:element name="encryptionPropFile" type="xs:string" minOccurs="0"/>
+				<xs:element name="signatureKeyIdentifier" type="xs:string" minOccurs="0"/>
+				<xs:element name="encryptionKeyIdentifier" type="xs:string" minOccurs="0"/>
+				<xs:element name="encryptionUser" type="xs:string" minOccurs="0"/>
+				<xs:element name="signatureParts" type="xs:string" minOccurs="0"/>
+				<xs:element name="encryptionParts" type="xs:string" minOccurs="0"/>
+				<xs:element name="optimizeParts" type="xs:string" minOccurs="0"/>
+				<xs:element name="encryptionSymAlgorithm" type="xs:string" minOccurs="0"/>
+				<xs:element name="EmbeddedKeyCallbackClass" type="xs:string" minOccurs="0"/>
+				<xs:element name="encryptionKeyTransportAlgorithm" type="xs:string" minOccurs="0"/>
+				<xs:element name="EmbeddedKeyName" type="xs:string" minOccurs="0"/>
+			</xs:sequence>
+		</xs:complexType>
+	</xs:element>
+</xs:schema>

Added: webservices/axis2/trunk/java/xdocs/0_93/sec-conf/out-sample.xml
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/xdocs/0_93/sec-conf/out-sample.xml?rev=366437&view=auto
==============================================================================
--- webservices/axis2/trunk/java/xdocs/0_93/sec-conf/out-sample.xml (added)
+++ webservices/axis2/trunk/java/xdocs/0_93/sec-conf/out-sample.xml Thu Jan  5 22:24:56 2006
@@ -0,0 +1,14 @@
+    <parameter name="OutflowSecurity">
+      <action>
+        <items>Timestamp Signature Encrypt</items>
+        <user>alice</user>
+        <passwordCallbackClass>org.apache.axis2.security.PWCallback</passwordCallbackClass>
+        <signaturePropFile>interop.properties</signaturePropFile>
+        <signatureKeyIdentifier>SKIKeyIdentifier</signatureKeyIdentifier>
+        <encryptionKeyIdentifier>SKIKeyIdentifier</encryptionKeyIdentifier>
+        <encryptionUser>bob</encryptionUser>
+        <signatureParts>{Element}{http://schemas.xmlsoap.org/ws/2004/08/addressing}To</signatureParts>
+
+        <optimizeParts>//xenc:EncryptedData/xenc:CipherData/xenc:CipherValue</optimizeParts>
+      </action>
+    </parameter>

Added: webservices/axis2/trunk/java/xdocs/0_93/sec-conf/out-sample2.xml
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/xdocs/0_93/sec-conf/out-sample2.xml?rev=366437&view=auto
==============================================================================
--- webservices/axis2/trunk/java/xdocs/0_93/sec-conf/out-sample2.xml (added)
+++ webservices/axis2/trunk/java/xdocs/0_93/sec-conf/out-sample2.xml Thu Jan  5 22:24:56 2006
@@ -0,0 +1,19 @@
+    <parameter name="OutflowSecurity">
+sddsgldkhg;
+      <action>
+        <items>Signature NoSerialization</items>
+        <user>alice</user>
+        <passwordCallbackClass>org.apache.axis2.security.PWCallback</passwordCallbackClass>
+        <signatureKeyIdentifier>DirectReference</signatureKeyIdentifier>
+        <signatureParts>{}{http://xmlsoap.org/Ping}ticket</signatureParts>
+        <signaturePropFile>interop.properties</signaturePropFile>
+      </action>
+
+      <action>
+        <items>Signature Timestamp</items>
+        <user>alice</user>
+        <passwordCallbackClass>org.apache.axis2.security.PWCallback</passwordCallbackClass>
+        <signaturePropFile>interop.properties</signaturePropFile>
+      </action>
+
+    </parameter>

Added: webservices/axis2/trunk/java/xdocs/0_93/security-module.html
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/xdocs/0_93/security-module.html?rev=366437&view=auto
==============================================================================
--- webservices/axis2/trunk/java/xdocs/0_93/security-module.html (added)
+++ webservices/axis2/trunk/java/xdocs/0_93/security-module.html Thu Jan  5 22:24:56 2006
@@ -0,0 +1,178 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
+<html><title>The Security Module</title>
+<body>
+<h1>Securing SOAP Messages with WSS4J</h1>
+
+<p>Axis2 comes with a module based on WSS4J [1] to provide WS-Security features. This section explains how to engage and configure the security module. Since the security module inserts handlers in the system specific pre-dispatch phase, it must be engaged globally. But it is possible to activate the security module for the inflow or the outflow when required by the service or the clients.</p>
+
+<p>The security module (security.mar) is available in the axis2.war but it is not engaged by default.</p>
+<p>First it should be engaged by inserting the following in the axis2.xml file.</p>
+<source><pre>
+	&lt;module ref="security"/&gt;
+</pre></source>
+<p>The web admin interface can be used when Axis2 is deployed in a servlet container such as Apache Tomcat.</p>
+
+<p>At the server it is possible to provide security on a per service basis. The configuration parameters should be set in the service.xml file of the service. The client side config parameters should be set in the axis2.xml of the client's Axis2 repository.</p>
+
+<p>The security module uses two parameters:</p>
+<ul>
+<li>OutflowSecurity</li>
+<li>InflowSecurity</li>
+</ul>
+
+The configuration that can go in each of these parameters are described below:
+
+<h3>OutflowSecurity parameter</h3>
+
+This parameter is used to configure the outflow security handler. The outflow
+ handler can be invoked more than once in the outflow one can provide
+ configuration for each of these invocations. The 'action' element describes
+ one of these configurations. Therefore the 'OutflowSecurity' parameter can 
+ contain more than one 'action' elements. The schema of this 'action' element 
+ is available <a href="sec-conf/out-action.xsd">here</a>.
+<p>An outflow configuration to add a timestamp, sing and encrypt 
+ the message once, is shown in<a href="#ex1"> Example 1</a> and <a href="#ex1">
+ Example 2</a> shows how to sign the message twice by chaining the outflow 
+ handler (using two 'action' elements)</p>
+ 
+<p>Following is a description of the elements that can go in an 'action' 
+element of the OutflowSecurity parameter</p>
+<br>
+<table border="1">
+<tr>
+<td><b>Parameter</b></td>
+<td><b>Description</b></td>
+<td><b>Example</b></td>
+</tr>
+<tr>
+<td>items</td>
+<td>Security actions for the inflow</td>
+<td>Add a Timestamp, Sign the SOAP body and Encrypt the SOAP body <br>&lt;items&gt; Timestamp Signature Encrypt&lt;/items&gt;</td>
+</tr>
+<tr>
+<td>user</td>
+<td>The user's name</td>
+<td>Set alias of the key to be used to sign<br>&lt;user&gt; bob&lt;/user&gt;</td>
+</tr>
+<tr>
+<td>passwordCallbackClass</td>
+<td>Callback class used to provide the password required to create the UsernameToken or to sign the message</td>
+<td>&lt;passwordCallbackClass&gt; org.apache.axis2.security.PWCallback&lt;/passwordCallbackClass&gt;</td>
+</tr>
+<tr>
+<td>signaturePropFile</td>
+<td>property file used to get the signature parameters such as crypto provider, keystore and its password</td>
+<td>Set example.properties file as the signature property file<br>&lt;signaturePropFile&gt; example.properties&lt;/signaturePropFile&gt;</td>
+</tr>
+<tr>
+<td>signatureKeyIdentifier</td>
+<td>Key identifier to be used in referring the key in the signature</td>
+<td>Use the serial number of the certificate<br>&lt;signatureKeyIdentifier&gt; IssuerSerial&lt;/signatureKeyIdentifier&gt;</td>
+</tr>
+<tr>
+<td>encryptionKeyIdentifier</td>
+<td>Key identifier to be used in referring the key in encryption</td>
+<td>Use the serial number of the certificate <br>&lt;encryptionKeyIdentifier&gt;IssuerSerial&lt;/encryptionKeyIdentifier&gt;</td>
+</tr>
+<tr>
+<td>encryptionUser</td>
+<td>The user's name for encryption.</td>
+<td><br>&lt;encryptionUser&gt;alice&lt;/encryptionUser&gt;</td>
+</tr>
+<tr>
+<td>encryptionSymAlgorithm</td>
+<td>Symmetric algorithm to be used for encryption</td>
+<td>Use AES-128<br>&lt;encryptionSymAlgorithm&gt; http://www.w3.org/2001/04/xmlenc#aes128-cbc&lt;/encryptionSymAlgorithm&gt;</td>
+</tr>
+<tr>
+<td>encryptionKeyTransportAlgorithm</td>
+<td>Key encryption algorithm</td>
+<td>Use RSA-OAEP<br>&lt;parameter name="encryptionSymAlgorithm"&gt; http://www.w3.org/2001/04/xmlenc#rsa-oaep-mgf1p&lt;/parameter&gt;</td>
+</tr>
+<tr>
+<td>signatureParts</td>
+<td>Sign multiple parts in the SOAP message</td>
+<td>Sign Foo and Bar elements qualified by "http://app.ns/ns"<br>&lt;signatureParts&gt; {Element}{http://app.ns/ns}Foo;{Element}{http://app.ns/ns}Bar &lt;/signatureParts&gt;</td>
+</tr>
+<tr>
+<td>optimizeParts</td>
+<td>MTOM Optimize the elements specified by the XPath query</td>
+<td>Optimize the CipherValue<br>&lt;optimizeParts&gt; //xenc:EncryptedData/xenc:CipherData/xenc:CipherValue &lt;/optimizeParts&gt;</td>
+</tr>
+</table>
+<br>
+<h3>InflowSecurity parameter</h3>
+<p>This parameter is used to configure the inflow security handler. The 'action' element is used to 
+encapsulate the configuration elements here as well. The schema of the 'action' element is available here. 
+<a href="#ex3">Example 3</a> shows the configuration to decrypt, verify signature and validate timestamp.</p>
+<table border="1">
+<tr>
+<td><b>Parameter</b></td>
+<td><b>Description</b></td>
+<td><b>Example</b></td>
+</tr>
+<tr>
+<td>items</td>
+<td>Security actions for the inflow</td>
+<td>first the incoming message should be decrypted and then the signatures should be verified and should be checked for the availability of the Timestamp <br>&lt;items&gt; Timestamp Signature Encrypt&lt;/items&gt;</td>
+</tr>
+<tr>
+<td>passwordCallbackClass</td>
+<td>Callback class used to obtain password for decryption and UsernameToken verification</td>
+<td><br>&lt;passwordCallbackClass&gt; org.apache.axis2.security.PWCallback&lt;/passwordCallbackClass&gt;</td>
+</tr>
+<tr>
+<td>signaturePropFile</td>
+<td>Property file used for signature verification</td>
+<td><br>&lt;signaturePropFile&gt; sig.properties&lt;/signaturePropFile&gt;</td>
+</tr>
+<td>decryptionPropFile</td>
+<td>Property file used for decryption</td>
+<td> <br>&lt;decryptionPropFile&gt; dec.properties&lt;/decryptionPropFile&gt;</td>
+</tr>
+
+</table>
+<br>
+<p>Please note that the '.properties' files used in properties such as OutSignaturePropFile are the same property files that are using in the WSS4J project. 
+Following shows the properties defined in a sample property file</p>
+
+<source>
+<pre>
+org.apache.ws.security.crypto.provider=org.apache.ws.security.components.crypto.Merlin
+org.apache.ws.security.crypto.merlin.keystore.type=pkcs12
+org.apache.ws.security.crypto.merlin.keystore.password=security
+org.apache.ws.security.crypto.merlin.keystore.alias=16c73ab6-b892-458f-abf5-2f875f74882e
+org.apache.ws.security.crypto.merlin.alias.password=security
+org.apache.ws.security.crypto.merlin.file=keys/x509.PFX.MSFT
+</pre>
+</source>
+
+org.apache.ws.security.crypto.provider defines the implementation of the org.apache.ws.security.components.crypto.Crypto 
+interface to provide the crypto information required by WSS4J. The other properties defined are the configuration
+ properties used by the implementation class (org.apache.ws.security.components.crypto.Merlin).
+ 
+<p><b>References</b></p>
+<p>1. <a href="http://ws.apache.org/wss4j">Apache WSS4J</a></p>
+<br>
+<p><b>Examples</b></p>
+<p id="ex1">Example 1: An outflow configuration to add a timestamp, sing and encrypt 
+ the message once</p>
+<p><iframe frameborder="0"  
+src ="sec-conf/out-sample.xml"
+width="800" height="400">
+</iframe>
+</p>
+
+<p id="ex2">Example 2: An outflow configuration to sign the message twice and add a timestamp</p>
+<p><iframe frameborder="0"  
+src ="sec-conf/out-sample2.xml"
+width="800" height="400">
+</iframe>
+</p>
+<p id="ex3">Example 3: An inflow configuration to decrypt, verify signature and validate timestamp</p>
+<p><iframe frameborder="0"  
+src ="sec-conf/in-sample.xml"
+width="800" height="400">
+</iframe>
+</p>
+</body></html>
\ No newline at end of file

Added: webservices/axis2/trunk/java/xdocs/0_93/tcp-transport.html
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/xdocs/0_93/tcp-transport.html?rev=366437&view=auto
==============================================================================
--- webservices/axis2/trunk/java/xdocs/0_93/tcp-transport.html (added)
+++ webservices/axis2/trunk/java/xdocs/0_93/tcp-transport.html Thu Jan  5 22:24:56 2006
@@ -0,0 +1,90 @@
+<html>
+<head>
+  <meta content="">
+  <meta content="">
+  <meta content="">
+  <meta http-equiv="content-type" content="">
+  <title>TCP transport</title>
+</head>
+
+<body lang="en">
+<h1>TCP transport</h1>
+
+<p>Axis2 supports TCP as a transport. Axis2 has support for both send and
+receive SOAP Messages via TCP. TCP transports do not have any Application
+level Headers and the SOAP Message that sends should be self contained. This
+make the interaction fast and simple. Yet the main limitation of the TCP
+transport is absence of the request URI, and the Service dispatching should
+use a alternative method. There is two main alternatives methods.</p>
+<ol>
+  <li>Use the name space URI of the first child element for the
+  dispatching</li>
+  <li>Enable the WS-Addressing, in the case of Alpha release, Addressing is
+    default</li>
+</ol>
+
+<p>When the TCP request is sent, it is users responsibility either to use
+addressing or use alternative method.</p>
+
+<h2>How to start the TCPServer</h2>
+
+<p>The TCP server can be started by running the class
+org.apache.axis2.transport.tcp.TCPServer with two parameters <a
+href="faq.html#b5">repository</a> and port number as argument. This class
+needed all the axis dependency jars in the classpath. New Services can be
+added in the usual way by droping the archives to repository, read the <a
+href="userguide.html">User Guide</a> for more information</p>
+
+<p>Alternatively the TCP Server can be run with tcp-server.bat/ tcp-server.sh
+file in the bin directory of the Binary distribution of TCP Server.</p>
+
+<h2>How send SOAP Messages with TCP transport</h2>
+
+<p>The TCP transport can be enabled very easily from the call API, following
+code segment demonstrate how it can be done.</p>
+<source><pre>OMElement payload = ...
+
+Call call = new Call(serviceContext);
+Options options = new Options();
+options.setTo(targetEPR);
+options.useSeperateListener(false);
+call.setClientOptions(options);
+
+OMElement result =
+        (OMElement) call.invokeBlocking("operation", payload);
+call.close();</pre>
+</source>
+<p>The tranport that should be invoked is inferred from the targetEPR
+(tcp://...) in this case it is TCP and the listener also TCP . Since the
+addressing is engage SOAP Message itself contained. Only other option I can
+think of is to use the URI of the first child of the SOAP Body to dispatch
+the service. The Parameter is of the type <a
+href="faq.html#a2">OMElement</a>, the XML representation of Axis2.</p>
+
+<h2>Sample</h2>
+
+<p>Sample for a TCP Client can be found from the
+samples/userguide/src/userguide/clients/TCPClient.java in the binary
+distribution, this access the same web service explained in the userguide. To
+try the client first starts the TCPServer with the same repository used for
+the userguide samples. Since sample is already deployed in the repository
+while trying the userguide it will be automatically avaliable.</p>
+
+<h2>Advanced Topics</h2>
+
+<p>Axis2 TCP transport has two parts, a transport Listener for receiving the
+Messages and transport Sender to send the SOAP Messages. Axis2 installation
+has both the components built in to itself  by default. In the axis2.xml
+configuration file, two would look like follows.</p>
+
+<p>If the TCP server is started manually this configuration does not take
+effect, this affect the transport Listeners starts by Axis2. (e.g. Listener
+started by the Complete Async interaction)</p>
+<source><pre>&lt;transportReceiver name="tcp" class="org.apache.axis2.transport.tcp.TCPServer"&gt;
+    &lt;parameter name="port" locked="false"&gt;6060&lt;/parameter&gt;
+&lt;/transportReceiver&gt;</pre>
+</source>
+<p>Following add the TCPTransport Sender</p>
+<source><pre>&lt;transportSender name="tcp" class="org.apache.axis2.transport.tcp.TCPTransportSender"/&gt;</pre>
+</source></body>
+</html>

Added: webservices/axis2/trunk/java/xdocs/0_93/tools/CodegenToolReference.pdf
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/xdocs/0_93/tools/CodegenToolReference.pdf?rev=366437&view=auto
==============================================================================
Binary file - no diff available.

Propchange: webservices/axis2/trunk/java/xdocs/0_93/tools/CodegenToolReference.pdf
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: webservices/axis2/trunk/java/xdocs/0_93/tools/ServiceArchiveToolReference.pdf
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/xdocs/0_93/tools/ServiceArchiveToolReference.pdf?rev=366437&view=auto
==============================================================================
Binary file - no diff available.

Propchange: webservices/axis2/trunk/java/xdocs/0_93/tools/ServiceArchiveToolReference.pdf
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: webservices/axis2/trunk/java/xdocs/0_93/tools/idea-guide/fig1.JPG
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/xdocs/0_93/tools/idea-guide/fig1.JPG?rev=366437&view=auto
==============================================================================
Binary file - no diff available.

Propchange: webservices/axis2/trunk/java/xdocs/0_93/tools/idea-guide/fig1.JPG
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: webservices/axis2/trunk/java/xdocs/0_93/tools/idea-guide/fig10.JPG
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/xdocs/0_93/tools/idea-guide/fig10.JPG?rev=366437&view=auto
==============================================================================
Binary file - no diff available.

Propchange: webservices/axis2/trunk/java/xdocs/0_93/tools/idea-guide/fig10.JPG
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: webservices/axis2/trunk/java/xdocs/0_93/tools/idea-guide/fig11.JPG
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/xdocs/0_93/tools/idea-guide/fig11.JPG?rev=366437&view=auto
==============================================================================
Binary file - no diff available.

Propchange: webservices/axis2/trunk/java/xdocs/0_93/tools/idea-guide/fig11.JPG
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: webservices/axis2/trunk/java/xdocs/0_93/tools/idea-guide/fig12.JPG
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/xdocs/0_93/tools/idea-guide/fig12.JPG?rev=366437&view=auto
==============================================================================
Binary file - no diff available.

Propchange: webservices/axis2/trunk/java/xdocs/0_93/tools/idea-guide/fig12.JPG
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: webservices/axis2/trunk/java/xdocs/0_93/tools/idea-guide/fig13.JPG
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/xdocs/0_93/tools/idea-guide/fig13.JPG?rev=366437&view=auto
==============================================================================
Binary file - no diff available.

Propchange: webservices/axis2/trunk/java/xdocs/0_93/tools/idea-guide/fig13.JPG
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: webservices/axis2/trunk/java/xdocs/0_93/tools/idea-guide/fig14.JPG
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/xdocs/0_93/tools/idea-guide/fig14.JPG?rev=366437&view=auto
==============================================================================
Binary file - no diff available.

Propchange: webservices/axis2/trunk/java/xdocs/0_93/tools/idea-guide/fig14.JPG
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: webservices/axis2/trunk/java/xdocs/0_93/tools/idea-guide/fig15.JPG
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/xdocs/0_93/tools/idea-guide/fig15.JPG?rev=366437&view=auto
==============================================================================
Binary file - no diff available.

Propchange: webservices/axis2/trunk/java/xdocs/0_93/tools/idea-guide/fig15.JPG
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: webservices/axis2/trunk/java/xdocs/0_93/tools/idea-guide/fig16.JPG
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/xdocs/0_93/tools/idea-guide/fig16.JPG?rev=366437&view=auto
==============================================================================
Binary file - no diff available.

Propchange: webservices/axis2/trunk/java/xdocs/0_93/tools/idea-guide/fig16.JPG
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: webservices/axis2/trunk/java/xdocs/0_93/tools/idea-guide/fig17.JPG
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/xdocs/0_93/tools/idea-guide/fig17.JPG?rev=366437&view=auto
==============================================================================
Binary file - no diff available.

Propchange: webservices/axis2/trunk/java/xdocs/0_93/tools/idea-guide/fig17.JPG
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: webservices/axis2/trunk/java/xdocs/0_93/tools/idea-guide/fig2.JPG
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/xdocs/0_93/tools/idea-guide/fig2.JPG?rev=366437&view=auto
==============================================================================
Binary file - no diff available.

Propchange: webservices/axis2/trunk/java/xdocs/0_93/tools/idea-guide/fig2.JPG
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: webservices/axis2/trunk/java/xdocs/0_93/tools/idea-guide/fig3.JPG
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/xdocs/0_93/tools/idea-guide/fig3.JPG?rev=366437&view=auto
==============================================================================
Binary file - no diff available.

Propchange: webservices/axis2/trunk/java/xdocs/0_93/tools/idea-guide/fig3.JPG
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: webservices/axis2/trunk/java/xdocs/0_93/tools/idea-guide/fig4.JPG
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/xdocs/0_93/tools/idea-guide/fig4.JPG?rev=366437&view=auto
==============================================================================
Binary file - no diff available.

Propchange: webservices/axis2/trunk/java/xdocs/0_93/tools/idea-guide/fig4.JPG
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: webservices/axis2/trunk/java/xdocs/0_93/tools/idea-guide/fig5.JPG
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/xdocs/0_93/tools/idea-guide/fig5.JPG?rev=366437&view=auto
==============================================================================
Binary file - no diff available.

Propchange: webservices/axis2/trunk/java/xdocs/0_93/tools/idea-guide/fig5.JPG
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: webservices/axis2/trunk/java/xdocs/0_93/tools/idea-guide/fig6.JPG
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/xdocs/0_93/tools/idea-guide/fig6.JPG?rev=366437&view=auto
==============================================================================
Binary file - no diff available.

Propchange: webservices/axis2/trunk/java/xdocs/0_93/tools/idea-guide/fig6.JPG
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: webservices/axis2/trunk/java/xdocs/0_93/tools/idea-guide/fig7.JPG
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/xdocs/0_93/tools/idea-guide/fig7.JPG?rev=366437&view=auto
==============================================================================
Binary file - no diff available.

Propchange: webservices/axis2/trunk/java/xdocs/0_93/tools/idea-guide/fig7.JPG
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: webservices/axis2/trunk/java/xdocs/0_93/tools/idea-guide/fig8.JPG
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/xdocs/0_93/tools/idea-guide/fig8.JPG?rev=366437&view=auto
==============================================================================
Binary file - no diff available.

Propchange: webservices/axis2/trunk/java/xdocs/0_93/tools/idea-guide/fig8.JPG
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream

Added: webservices/axis2/trunk/java/xdocs/0_93/tools/idea-guide/fig9.JPG
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/xdocs/0_93/tools/idea-guide/fig9.JPG?rev=366437&view=auto
==============================================================================
Binary file - no diff available.

Propchange: webservices/axis2/trunk/java/xdocs/0_93/tools/idea-guide/fig9.JPG
------------------------------------------------------------------------------
    svn:mime-type = application/octet-stream



Mime
View raw message