blob: 0f0576834b19c7628817b7fffdc24664b1c01237 [file] [log] [blame]
<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 transport does not have any application
level headers and the SOAP Message that is send should be self contained.
This makes the interaction fast and simple. Since there are no application
headers, it does not have the privilege of having request URI, and Service
dispatching should be done with a alternative method. Thus,
RequestURIBasedDispatcher can not be used. Following are the two main
alternatives available in dispatching in Axis2 Environment.</p>
<ol>
<li>Use the name space URI of the first child element of SOAPBody.
(SOAPMessageBodyBasedDispatcher)</li>
<li>Enable the WS-Addressing. in the case of 0.94 release addressing is
default (SOAPActionBasedDispatcher)</li>
</ol>
<p>When TCP request is sent it's user's responsibility to use either
addressing or SOAP body base mechanism.</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
needs all the axis dependency jars in the classpath. New Services can be
added in the usual way by dropping the archives to repository (See <a
href="userguide.html">User 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>
<h2>How to send SOAP Messages using TCP transport</h2>
<p>The TCP transport can be enabled easily from the call API. Following code
segment demonstrate how it can be done.</p>
<source><pre>OMElement payload = ...
ServiceClient serviceClient = new ServiceClient();
Options options = new Options();
options.setTo(targetEPR);
options.useSeperateListener(false);
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. Only other option one
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 <a
href="userguide.html">Axis2 userguide</a>. The client first starts the
TCPServer with the same repository used for the <a
href="userguide.html#samples">Axis2 userguide samples</a>. Since sample is
already deployed in the repository while trying the userguide it will be
automatically available.</p>
<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 like
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>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>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>