package org.apache.axis2.transport.http; import static com.google.common.truth.Truth.assertAbout; import static org.apache.axiom.truth.xml.XMLTruth.xml; 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.apache.axis2.transport.OutTransportInfo; import org.apache.axis2.transport.http.impl.httpclient3.HTTPClient3TransportSender; import org.apache.axis2.transport.http.mock.MockAxisHttpResponse; import org.apache.axis2.transport.http.mock.MockHTTPResponse; import org.apache.axis2.transport.http.mock.server.AbstractHTTPServerTest; import org.apache.axis2.transport.http.mock.server.BasicHttpServer; import org.apache.http.ProtocolVersion; import org.apache.http.RequestLine; import org.apache.http.message.BasicRequestLine; public class CommonsHTTPTransportSenderClientSideTest extends AbstractHTTPServerTest { public void testInvokeWithEPR() throws Exception { int port = getBasicHttpServer().getPort(); RequestLine line = new BasicRequestLine("", "", new ProtocolVersion("http", 1, 0)); MockHTTPResponse httpResponse = new MockAxisHttpResponse(line); getBasicHttpServer().setResponseTemplate(BasicHttpServer.RESPONSE_HTTP_OK_LOOP_BACK); // We only interested on HTTP message sent to the server side by this // client hence ignore the processing of response at client side. try { httpResponse = (MockAxisHttpResponse) CommonsHTTPTransportSenderTest.configAndRun( httpResponse, (OutTransportInfo) httpResponse, "http://localhost:" + port, new HTTPClient3TransportSender()); } catch (Exception e) { } assertEquals("Not the expected HTTP Method", "POST", getHTTPMethod()); assertEquals("Not the expected Header value", "application/xml", getHeaders().get("Content-Type")); assertEquals("Not the expected Header value", "custom-value", getHeaders().get("Custom-header")); assertAbout(xml()).that(getStringContent()).hasSameContentAs(getEnvelope().toString()); } /* * Tests that HTTP connections are properly released when the server returns * a 404 error. This is a regression test for AXIS2-5093. */ public void testConnectionReleaseWith404() throws Exception { int port = getBasicHttpServer().getPort(); getBasicHttpServer().setResponseTemplate(BasicHttpServer.RESPONSE_HTTP_404); // If connections are not properly released then we will end up with a // ConnectionPoolTimeoutException here. ConfigurationContext configurationContext = ConfigurationContextFactory .createConfigurationContextFromURIs( CommonsHTTPTransportSenderClientSideTest.class.getResource("axis2.xml"), null); ServiceClient serviceClient = new ServiceClient(configurationContext, null); Options options = serviceClient.getOptions(); options.setTo(new EndpointReference("http://localhost:" + port + "//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(); } } }