Search code examples
tcpapache-cameljettycxfapache-servicemix

TCP connection Behavior in SOAP/HTTP webservice implemented using Apache servicemix


We have implemented a SOAP/HTTP web service (endpoint given below) using Apache Servicemix version 5.1.0.

Endpoint:

<cxf:cxfEndpoint id="SampleService"
    address="http://127.0.0.1:8081/Sample"
    endpointName="c:SoapPort" serviceName="c:SampleService" wsdlURL="wsdl/SampleService.wsdl"
    xmlns:c="http://sample.com/url"
    serviceClass="com.sample.common.SAXSourceService">
<cxf:properties>
    <entry key="ws-security.ut.validator" value-ref="PasswordHandler" />
    <entry key="ws-security.validate.token " value="false" />
</cxf:properties>
<cxf:features>
    <wsa:addressing addressingRequired="false"
            xmlns:wsa="http://cxf.apache.org/ws/addressing" />
</cxf:features>

Jetty Configuration(My assumption is the below default connector applies to all endpoints exposed, correct me if i am wrong):

<Call name="addConnector">
    <Arg>
        <New class="org.eclipse.jetty.server.nio.BlockingChannelConnector">
            <Set name="host">
                <Property name="jetty.host" />
            </Set>
            <Set name="port">
                <Property name="jetty.port" default="8181"/>
            </Set>
            <Set name="maxIdleTime">300000</Set>
            <Set name="Acceptors">1</Set>
            <Set name="statsOn">false</Set>
            <Set name="confidentialPort">8443</Set>
        </New>
    </Arg>
</Call>

Default configurations are used in all other cases.

In this case, When a synchronous SOAP request is received and a response is sent, we have observed that a TCP [FIN] is sent from web service immediately but in this case what is the significance of the maxIdleTime : 300000 in jetty?


Solution

  • Can you check if your client send the "Connection: Keep-Alive" header to the server? If not, it makes sense that the jetty server close the connection once the response is sent back to the client.