{
monitor.fireOnRequest( request, response );
if( response.isCommitted() )
return;
ExtendedHttpMethod method;
HttpServletRequest httpRequest = ( HttpServletRequest )request;
if( httpRequest.getMethod().equals( "GET" ) )
method = new ExtendedGetMethod();
else
method = new ExtendedPostMethod();
method.setDecompress( false );
// for this create ui server and port, properties.
JProxyServletWsdlMonitorMessageExchange capturedData = new JProxyServletWsdlMonitorMessageExchange( project );
capturedData.setRequestHost( httpRequest.getServerName() );
capturedData.setRequestMethod( httpRequest.getMethod() );
capturedData.setRequestHeader( httpRequest );
capturedData.setHttpRequestParameters( httpRequest );
capturedData.setTargetURL( httpRequest.getRequestURL().toString() );
CaptureInputStream capture = new CaptureInputStream( httpRequest.getInputStream() );
// check connection header
String connectionHeader = httpRequest.getHeader( "Connection" );
if( connectionHeader != null )
{
connectionHeader = connectionHeader.toLowerCase();
if( connectionHeader.indexOf( "keep-alive" ) < 0 && connectionHeader.indexOf( "close" ) < 0 )
connectionHeader = null;
}
// copy headers
boolean xForwardedFor = false;
@SuppressWarnings( "unused" )
long contentLength = -1;
Enumeration<?> headerNames = httpRequest.getHeaderNames();
while( headerNames.hasMoreElements() )
{
String hdr = ( String )headerNames.nextElement();
String lhdr = hdr.toLowerCase();
if( dontProxyHeaders.contains( lhdr ) )
continue;
if( connectionHeader != null && connectionHeader.indexOf( lhdr ) >= 0 )
continue;
if( "content-length".equals( lhdr ) )
contentLength = request.getContentLength();
Enumeration<?> vals = httpRequest.getHeaders( hdr );
while( vals.hasMoreElements() )
{
String val = ( String )vals.nextElement();
if( val != null )
{
method.setRequestHeader( lhdr, val );
xForwardedFor |= "X-Forwarded-For".equalsIgnoreCase( hdr );
}
}
}
// Proxy headers
method.setRequestHeader( "Via", "SoapUI Monitor" );
if( !xForwardedFor )
method.addRequestHeader( "X-Forwarded-For", request.getRemoteAddr() );
if( method instanceof ExtendedPostMethod )
( ( ExtendedPostMethod )method ).setRequestEntity( new InputStreamRequestEntity( capture, request
.getContentType() ) );
HostConfiguration hostConfiguration = new HostConfiguration();
StringBuffer url = new StringBuffer( "http://" );
url.append( httpRequest.getServerName() );
if( httpRequest.getServerPort() != 80 )
url.append( ":" + httpRequest.getServerPort() );
if( httpRequest.getServletPath() != null )
{
url.append( httpRequest.getServletPath() );
method.setPath( httpRequest.getServletPath() );
if( httpRequest.getQueryString() != null )
{
url.append( "?" + httpRequest.getQueryString() );
method.setPath( httpRequest.getServletPath() + "?" + httpRequest.getQueryString() );
}
}
hostConfiguration.setHost( new URI( url.toString(), true ) );
// SoapUI.log("PROXY to:" + url);
monitor.fireBeforeProxy( request, response, method, hostConfiguration );
if( settings.getBoolean( LaunchForm.SSLTUNNEL_REUSESTATE ) )
{
if( httpState == null )
httpState = new HttpState();
HttpClientSupport.getHttpClient().executeMethod( hostConfiguration, method, httpState );
}
else
{
HttpClientSupport.getHttpClient().executeMethod( hostConfiguration, method );
}
// wait for transaction to end and store it.
capturedData.stopCapture();
capturedData.setRequest( capture.getCapturedData() );
capturedData.setRawResponseBody( method.getResponseBody() );
capturedData.setResponseHeader( method );
capturedData.setRawRequestData( getRequestToBytes( request.toString(), method, capture ) );
capturedData.setRawResponseData( getResponseToBytes( response.toString(), method,
capturedData.getRawResponseBody() ) );
capturedData.setResponseContent( new String( method.getDecompressedResponseBody() ) );
monitor.fireAfterProxy( request, response, method, capturedData );
if( !response.isCommitted() )
{