Author: veithen Date: Sun Aug 14 09:04:32 2011 New Revision: 1157501 URL: http://svn.apache.org/viewvc?rev=1157501&view=rev Log: AXIS2-5093: Properly release the HTTP connection if the server response is a 404 or another error where we don't process the response content.
Added: axis/axis2/java/core/trunk/modules/transport/http/test/ axis/axis2/java/core/trunk/modules/transport/http/test-resources/ axis/axis2/java/core/trunk/modules/transport/http/test-resources/org/ axis/axis2/java/core/trunk/modules/transport/http/test-resources/org/apache/ axis/axis2/java/core/trunk/modules/transport/http/test-resources/org/apache/axis2/ axis/axis2/java/core/trunk/modules/transport/http/test-resources/org/apache/axis2/transport/ axis/axis2/java/core/trunk/modules/transport/http/test-resources/org/apache/axis2/transport/http/ axis/axis2/java/core/trunk/modules/transport/http/test-resources/org/apache/axis2/transport/http/axis2.xml (with props) axis/axis2/java/core/trunk/modules/transport/http/test/org/ axis/axis2/java/core/trunk/modules/transport/http/test/org/apache/ axis/axis2/java/core/trunk/modules/transport/http/test/org/apache/axis2/ axis/axis2/java/core/trunk/modules/transport/http/test/org/apache/axis2/transport/ axis/axis2/java/core/trunk/modules/transport/http/test/org/apache/axis2/transport/http/ axis/axis2/java/core/trunk/modules/transport/http/test/org/apache/axis2/transport/http/CommonsHTTPTransportSenderTest.java (with props) Modified: axis/axis2/java/core/trunk/modules/parent/pom.xml axis/axis2/java/core/trunk/modules/saaj/pom.xml axis/axis2/java/core/trunk/modules/transport/http/pom.xml axis/axis2/java/core/trunk/modules/transport/http/src/org/apache/axis2/transport/http/HTTPSender.java Modified: axis/axis2/java/core/trunk/modules/parent/pom.xml URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/parent/pom.xml?rev=1157501&r1=1157500&r2=1157501&view=diff ============================================================================== --- axis/axis2/java/core/trunk/modules/parent/pom.xml (original) +++ axis/axis2/java/core/trunk/modules/parent/pom.xml Sun Aug 14 09:04:32 2011 @@ -919,6 +919,13 @@ <artifactId>commons-cli</artifactId> <version>${commons.cli.version}</version> </dependency> + + <!-- Jetty is used by some of the unit tests --> + <dependency> + <groupId>jetty</groupId> + <artifactId>jetty</artifactId> + <version>5.1.10</version> + </dependency> </dependencies> </dependencyManagement> Modified: axis/axis2/java/core/trunk/modules/saaj/pom.xml URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/saaj/pom.xml?rev=1157501&r1=1157500&r2=1157501&view=diff ============================================================================== --- axis/axis2/java/core/trunk/modules/saaj/pom.xml (original) +++ axis/axis2/java/core/trunk/modules/saaj/pom.xml Sun Aug 14 09:04:32 2011 @@ -81,7 +81,6 @@ <dependency> <groupId>jetty</groupId> <artifactId>jetty</artifactId> - <version>5.1.10</version> <scope>test</scope> </dependency> <dependency> Modified: axis/axis2/java/core/trunk/modules/transport/http/pom.xml URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/transport/http/pom.xml?rev=1157501&r1=1157500&r2=1157501&view=diff ============================================================================== --- axis/axis2/java/core/trunk/modules/transport/http/pom.xml (original) +++ axis/axis2/java/core/trunk/modules/transport/http/pom.xml Sun Aug 14 09:04:32 2011 @@ -40,6 +40,11 @@ <build> <sourceDirectory>src</sourceDirectory> <testSourceDirectory>test</testSourceDirectory> + <testResources> + <testResource> + <directory>test-resources</directory> + </testResource> + </testResources> <plugins> <plugin> <artifactId>maven-remote-resources-plugin</artifactId> @@ -100,5 +105,10 @@ <groupId>org.apache.httpcomponents</groupId> <artifactId>httpcore</artifactId> </dependency> + <dependency> + <groupId>jetty</groupId> + <artifactId>jetty</artifactId> + <scope>test</scope> + </dependency> </dependencies> </project> Modified: axis/axis2/java/core/trunk/modules/transport/http/src/org/apache/axis2/transport/http/HTTPSender.java URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/transport/http/src/org/apache/axis2/transport/http/HTTPSender.java?rev=1157501&r1=1157500&r2=1157501&view=diff ============================================================================== --- axis/axis2/java/core/trunk/modules/transport/http/src/org/apache/axis2/transport/http/HTTPSender.java (original) +++ axis/axis2/java/core/trunk/modules/transport/http/src/org/apache/axis2/transport/http/HTTPSender.java Sun Aug 14 09:04:32 2011 @@ -305,6 +305,8 @@ public class HTTPSender extends Abstract method.getStatusText())); } } else { + // Since we don't process the response, we must release the connection immediately + method.releaseConnection(); throw new AxisFault(Messages.getMessage("transportError", String.valueOf(statusCode), method.getStatusText())); Added: axis/axis2/java/core/trunk/modules/transport/http/test-resources/org/apache/axis2/transport/http/axis2.xml URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/transport/http/test-resources/org/apache/axis2/transport/http/axis2.xml?rev=1157501&view=auto ============================================================================== --- axis/axis2/java/core/trunk/modules/transport/http/test-resources/org/apache/axis2/transport/http/axis2.xml (added) +++ axis/axis2/java/core/trunk/modules/transport/http/test-resources/org/apache/axis2/transport/http/axis2.xml Sun Aug 14 09:04:32 2011 @@ -0,0 +1,160 @@ +<?xml version="1.0"?> +<!-- + ~ Licensed to the Apache Software Foundation (ASF) under one + ~ or more contributor license agreements. See the NOTICE file + ~ distributed with this work for additional information + ~ regarding copyright ownership. The ASF licenses this file + ~ to you under the Apache License, Version 2.0 (the + ~ "License"); you may not use this file except in compliance + ~ with the License. You may obtain a copy of the License at + ~ + ~ http://www.apache.org/licenses/LICENSE-2.0 + ~ + ~ Unless required by applicable law or agreed to in writing, + ~ software distributed under the License is distributed on an + ~ "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + ~ KIND, either express or implied. See the License for the + ~ specific language governing permissions and limitations + ~ under the License. + --> +<axisconfig name="AxisJava2.0"> + <parameter name="hotdeployment">false</parameter> + <parameter name="hotupdate">false</parameter> + <parameter name="enableMTOM">false</parameter> + <parameter name="disableREST">true</parameter> + + <messageReceivers> + <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-only" + class="org.apache.axis2.receivers.RawXMLINOnlyMessageReceiver"/> + <messageReceiver mep="http://www.w3.org/2004/08/wsdl/in-out" + class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/> + <messageReceiver mep="http://www.w3.org/2006/01/wsdl/in-only" + class="org.apache.axis2.receivers.RawXMLINOnlyMessageReceiver"/> + <messageReceiver mep="http://www.w3.org/2006/01/wsdl/in-out" + class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/> + </messageReceivers> + + <messageFormatters> + <messageFormatter contentType="application/x-www-form-urlencoded" + class="org.apache.axis2.transport.http.XFormURLEncodedFormatter"/> + <messageFormatter contentType="multipart/form-data" + class="org.apache.axis2.transport.http.MultipartFormDataFormatter"/> + <messageFormatter contentType="application/xml" + class="org.apache.axis2.transport.http.ApplicationXMLFormatter"/> + <messageFormatter contentType="text/xml" + class="org.apache.axis2.transport.http.SOAPMessageFormatter"/> + <messageFormatter contentType="application/soap+xml" + class="org.apache.axis2.transport.http.SOAPMessageFormatter"/> + </messageFormatters> + + <messageBuilders> + <messageBuilder contentType="application/xml" + class="org.apache.axis2.builder.ApplicationXMLBuilder"/> + <messageBuilder contentType="application/x-www-form-urlencoded" + class="org.apache.axis2.builder.XFormURLEncodedBuilder"/> + </messageBuilders> + + <transportSender name="http" class="org.apache.axis2.transport.http.CommonsHTTPTransportSender"> + <parameter name="PROTOCOL">HTTP/1.1</parameter> + <parameter name="Transfer-Encoding">chunked</parameter> + </transportSender> + + <!-- ================================================= --> + <!-- Phases --> + <!-- ================================================= --> + <phaseOrder type="InFlow"> + <!-- System pre-defined phases --> + <phase name="Transport"> + <handler name="RequestURIBasedDispatcher" + class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"> + <order phase="Transport"/> + </handler> + <handler name="SOAPActionBasedDispatcher" + class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"> + <order phase="Transport"/> + </handler> + </phase> + <phase name="Addressing"> + <handler name="AddressingBasedDispatcher" + class="org.apache.axis2.dispatchers.AddressingBasedDispatcher"> + <order phase="Addressing"/> + </handler> + </phase> + <phase name="Security"/> + <phase name="PreDispatch"/> + <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase"> + <handler name="RequestURIBasedDispatcher" + class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/> + <handler name="SOAPActionBasedDispatcher" + class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/> + <handler name="RequestURIOperationDispatcher" + class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/> + <handler name="SOAPMessageBodyBasedDispatcher" + class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/> + + <handler name="HTTPLocationBasedDispatcher" + class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/> + </phase> + <!-- System pre defined phases --> + <phase name="RMPhase"/> + <phase name="OpPhase"/> + <!-- After Postdispatch phase module author or or service author can add any phase he want --> + <phase name="OperationInPhase"/> + </phaseOrder> + <phaseOrder type="OutFlow"> + <phase name="RMPhase"/> + <phase name="OpPhase"/> + <!-- user can add his own phases to this area --> + <phase name="OperationOutPhase"/> + <!--system predefined phase--> + <!--these phase will run irrespective of the service--> + <phase name="PolicyDetermination"/> + <phase name="MessageOut"/> + <phase name="Security"/> + </phaseOrder> + <phaseOrder type="InFaultFlow"> + <phase name="Transport"> + <handler name="RequestURIBasedDispatcher" + class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"> + <order phase="Transport"/> + </handler> + <handler name="SOAPActionBasedDispatcher" + class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"> + <order phase="Transport"/> + </handler> + </phase> + <phase name="Addressing"> + <handler name="AddressingBasedDispatcher" + class="org.apache.axis2.dispatchers.AddressingBasedDispatcher"> + <order phase="Addressing"/> + </handler> + </phase> + <phase name="Security"/> + <phase name="PreDispatch"/> + <phase name="Dispatch" class="org.apache.axis2.engine.DispatchPhase"> + <handler name="RequestURIBasedDispatcher" + class="org.apache.axis2.dispatchers.RequestURIBasedDispatcher"/> + <handler name="SOAPActionBasedDispatcher" + class="org.apache.axis2.dispatchers.SOAPActionBasedDispatcher"/> + <handler name="RequestURIOperationDispatcher" + class="org.apache.axis2.dispatchers.RequestURIOperationDispatcher"/> + <handler name="SOAPMessageBodyBasedDispatcher" + class="org.apache.axis2.dispatchers.SOAPMessageBodyBasedDispatcher"/> + + <handler name="HTTPLocationBasedDispatcher" + class="org.apache.axis2.dispatchers.HTTPLocationBasedDispatcher"/> + </phase> + <phase name="RMPhase"/> + <phase name="OpPhase"/> + <!-- user can add his own phases to this area --> + <phase name="OperationInFaultPhase"/> + </phaseOrder> + <phaseOrder type="OutFaultFlow"> + <!-- user can add his own phases to this area --> + <phase name="OperationOutFaultPhase"/> + <phase name="RMPhase"/> + <phase name="PolicyDetermination"/> + <phase name="MessageOut"/> + <phase name="Security"/> + </phaseOrder> +</axisconfig> \ No newline at end of file Propchange: axis/axis2/java/core/trunk/modules/transport/http/test-resources/org/apache/axis2/transport/http/axis2.xml ------------------------------------------------------------------------------ svn:eol-style = native Added: axis/axis2/java/core/trunk/modules/transport/http/test/org/apache/axis2/transport/http/CommonsHTTPTransportSenderTest.java URL: http://svn.apache.org/viewvc/axis/axis2/java/core/trunk/modules/transport/http/test/org/apache/axis2/transport/http/CommonsHTTPTransportSenderTest.java?rev=1157501&view=auto ============================================================================== --- axis/axis2/java/core/trunk/modules/transport/http/test/org/apache/axis2/transport/http/CommonsHTTPTransportSenderTest.java (added) +++ axis/axis2/java/core/trunk/modules/transport/http/test/org/apache/axis2/transport/http/CommonsHTTPTransportSenderTest.java Sun Aug 14 09:04:32 2011 @@ -0,0 +1,76 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.axis2.transport.http; + +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; + +import javax.xml.namespace.QName; + +import org.apache.axiom.om.OMAbstractFactory; +import org.apache.axiom.om.OMElement; +import org.apache.axis2.AxisFault; +import org.apache.axis2.addressing.EndpointReference; +import org.apache.axis2.client.Options; +import org.apache.axis2.client.ServiceClient; +import org.apache.axis2.context.ConfigurationContext; +import org.apache.axis2.context.ConfigurationContextFactory; +import org.junit.Test; +import org.mortbay.http.SocketListener; +import org.mortbay.jetty.Server; + +public class CommonsHTTPTransportSenderTest { + /** + * Tests that HTTP connections are properly released when the server returns a 404 error. This + * is a regression test for AXIS2-5093. + * + * @throws Exception + */ + @Test + public void test() throws Exception { + // Create a Jetty server instance without any contexts. It will always return HTTP 404. + Server server = new Server(); + SocketListener listener = new SocketListener(); + server.addListener(listener); + server.start(); + try { + ConfigurationContext configurationContext = + ConfigurationContextFactory.createConfigurationContextFromURIs( + CommonsHTTPTransportSenderTest.class.getResource("axis2.xml"), null); + ServiceClient serviceClient = new ServiceClient(configurationContext, null); + Options options = serviceClient.getOptions(); + options.setTo(new EndpointReference("http://localhost:" + listener.getPort() + "/nonexisting")); + OMElement request = OMAbstractFactory.getOMFactory().createOMElement(new QName("urn:test", "test")); + // If connections are not properly released then we will end up with a + // ConnectionPoolTimeoutException here. + for (int i=0; i<200; i++) { + try { + serviceClient.sendReceive(request); + } catch (AxisFault ex) { + // Check that this is a 404 error + assertNull(ex.getCause()); + assertTrue(ex.getMessage().contains("404")); + } + serviceClient.cleanupTransport(); + } + } finally { + server.stop(); + } + } +} Propchange: axis/axis2/java/core/trunk/modules/transport/http/test/org/apache/axis2/transport/http/CommonsHTTPTransportSenderTest.java ------------------------------------------------------------------------------ svn:eol-style = native