| <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><transportReceiver name="tcp" class="org.apache.axis2.transport.tcp.TCPServer"> |
| <parameter name="port" locked="false">6060</parameter> |
| </transportReceiver></pre> |
| </source> |
| <p>Following xml lines adds the TCPTransport Sender:</p> |
| <source><pre><transportSender name="tcp" class="org.apache.axis2.transport.tcp.TCPTransportSender"/></pre> |
| </source></body> |
| </html> |