blob: fc6a9bab7e8ca2a101f4ee35ce568ddfd253c799 [file] [log] [blame]
<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>