<html>

<head>
  <title>TCP transport</title>
  <link href="../css/axis-docs.css" rel="stylesheet" type="text/css" media="all" />
</head>

<body lang="en">
<h1>TCP Transport</h1>

This document will explain how to send and receive SOAP Messages via TCP in
Axis2. 

<p><i>Send your feedback or questions to: <a
href="mailto:axis-dev@ws.apache.org">axis-dev@ws.apache.org</a></i>. Prefix
subject with [Axis2]. To subscribe to mailing list see <a
href="http://ws.apache.org/axis2/mail-lists.html">here.</a></p>

<h2>Content</h2>
<ul>
  <li><a href="#intro">Introduction</a></li>
  <li><a href="#start">How to Start the TCPServer</a></li>
  <li><a href="#send">How to Send SOAP Messages Using TCP Transport</a></li>
  <li><a href="#samples">Samples</a></li>
  <li><a href="#components">Transport Components</a></li>
</ul>

<a name="intro"></a>
<h2>Introduction</h2>

<p>Axis2 supports TCP as a transport. It has support for both send and receive SOAP 
Messages via TCP. TCP transport does not have any application
level headers and the SOAP Message that is sent should be self contained.
This makes the interaction fast and simple. However, since there are no
application headers, it does not have the privilege of having request URI,
and Service dispatching should be done by an alternative method. Thus,
RequestURIBasedDispatcher can not be used. The following are the two main
alternatives available for dispatching in the Axis2 environment:</p>
<ol>
  <li>Use the name space URI of the first child element of SOAPBody.
    (SOAPMessageBodyBasedDispatcher).</li>
  <li>Enable WS-Addressing. In the case of version 1.1 release Addressing is
    default (SOAPActionBasedDispatcher).</li>
</ol>

<p>When the TCP request is sent it is the user's responsibility to use either
Addressing or SOAP body base mechanism.</p>

<a name="start"></a>
<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#c5">repository</a> and port number, as arguments. This
class needs all the Axis dependency jars in the classpath. New services can
be added in the usual way by dropping the archives to the repository (See <a
href="userguide.html">User's Guide</a> for more information)</p>

<!--<p>Alternatively the TCP Server can run with tcp-server.bat/ tcp-server.sh
file in the bin directory of the Binary distribution of TCP Server.</p>-->
<a name="send"></a>
<h2>How to Send SOAP Messages Using TCP Transport</h2>

<p>TCP transport can be enabled easily from the call API. The following code
segment demonstrates how it can be done.</p>
<source><pre>
OMElement payload = ...
ServiceClient serviceClient = new ServiceClient();
Options options = new Options();
options.setTo(targetEPR);
<!--options.useSeperateListener(false);-->
<!--commented off as their is an error--- "The method useSeperateListener(boolean)is undefined for the type Options">
serviceClient.setOptions(options);

OMElement response =
        serviceClient.sendReceive(payload);
</pre>
</source>
<p>The transport that should be invoked is inferred from the targetEPR
(tcp://...). In this case it is TCP and the listener, also TCP . SOAP Message
has to be self contained in order to use Addressing. The other option 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>

<a name="samples"></a>
<h2>Samples</h2>

<p>Sample for a TCP Client can be found from the
samples/userguide/src/userguide/clients/TCPClient.java in the binary
distribution. This accesses the same Web service explained in the <a
href="userguide.html">Axis2 User's Guide</a>. The client first starts the
TCPServer with the same repository used for the <a
href="userguide.html">Axis2 User's Guide</a> samples. Since sample is already
deployed in the repository while trying the userguide it will be
automatically available.</p>

<p>In order to run the TCPClient.java, addressing should be engaged both in the 
client and server sides. In client side, you can engage addressing by copying 
the addressing-1.1.mar (AXIS2_HOME/repository/module) to AXIS2_HOME/lib directory.</p>

<a name="components"></a>
<h2>Transport Components</h2>

<p>Axis2 TCP transport has two components, 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 the two TCP transport components would look as
follows.</p>

<p>If the TCP server is started manually this configuration does not take
effect. In return this effects the transport Listener's start by Axis2. (e.g.
Listener started by the Complete Async interaction)</p>

<p>The following xml lines initializes the TCPTransport Receiver:</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>The following xml lines adds the TCPTransport Sender:</p>
<source><pre>&lt;transportSender name="tcp" class="org.apache.axis2.transport.tcp.TCPTransportSender"/&gt;</pre>
</source>

</body>

</html>
