View Javadoc

1   /*
2    *  soapUI, copyright (C) 2004-2009 eviware.com 
3    *
4    *  soapUI is free software; you can redistribute it and/or modify it under the 
5    *  terms of version 2.1 of the GNU Lesser General Public License as published by 
6    *  the Free Software Foundation.
7    *
8    *  soapUI is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without 
9    *  even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 
10   *  See the GNU Lesser General Public License for more details at gnu.org.
11   */
12  
13  package com.eviware.soapui.impl.wsdl.submit;
14  
15  import java.util.HashMap;
16  import java.util.Map;
17  
18  import com.eviware.soapui.SoapUI;
19  import com.eviware.soapui.impl.wsdl.submit.filters.EndpointRequestFilter;
20  import com.eviware.soapui.impl.wsdl.submit.filters.EndpointStrategyRequestFilter;
21  import com.eviware.soapui.impl.wsdl.submit.filters.HttpAuthenticationRequestFilter;
22  import com.eviware.soapui.impl.wsdl.submit.filters.HttpCompressionRequestFilter;
23  import com.eviware.soapui.impl.wsdl.submit.filters.HttpProxyRequestFilter;
24  import com.eviware.soapui.impl.wsdl.submit.filters.HttpRequestFilter;
25  import com.eviware.soapui.impl.wsdl.submit.filters.HttpSettingsRequestFilter;
26  import com.eviware.soapui.impl.wsdl.submit.filters.PostPackagingRequestFilter;
27  import com.eviware.soapui.impl.wsdl.submit.filters.PropertyExpansionRequestFilter;
28  import com.eviware.soapui.impl.wsdl.submit.filters.RemoveEmptyContentRequestFilter;
29  import com.eviware.soapui.impl.wsdl.submit.filters.RestRequestFilter;
30  import com.eviware.soapui.impl.wsdl.submit.filters.SoapHeadersRequestFilter;
31  import com.eviware.soapui.impl.wsdl.submit.filters.StripWhitespacesRequestFilter;
32  import com.eviware.soapui.impl.wsdl.submit.filters.WsaRequestFilter;
33  import com.eviware.soapui.impl.wsdl.submit.filters.WsdlPackagingRequestFilter;
34  import com.eviware.soapui.impl.wsdl.submit.filters.WsdlPackagingResponseFilter;
35  import com.eviware.soapui.impl.wsdl.submit.filters.WsrmRequestFilter;
36  import com.eviware.soapui.impl.wsdl.submit.filters.WssAuthenticationRequestFilter;
37  import com.eviware.soapui.impl.wsdl.submit.filters.WssRequestFilter;
38  import com.eviware.soapui.impl.wsdl.submit.transports.http.HttpClientRequestTransport;
39  import com.eviware.soapui.model.iface.SubmitContext;
40  
41  /***
42   * Registry of available transports, currently hard-coded but should be
43   * configurable in the future.
44   * 
45   * @author Ole.Matzura
46   */
47  
48  public class RequestTransportRegistry
49  {
50  	public static final String HTTP = "http";
51  	public static final String HTTPS = "https";
52  
53  	private static Map<String, RequestTransport> transports = new HashMap<String, RequestTransport>();
54  
55  	static
56  	{
57  		HttpClientRequestTransport httpTransport = new HttpClientRequestTransport();
58  
59  		httpTransport.addRequestFilter( new EndpointRequestFilter() );
60  		httpTransport.addRequestFilter( new HttpSettingsRequestFilter() );
61  		httpTransport.addRequestFilter( new HttpRequestFilter() );
62  		httpTransport.addRequestFilter( new RestRequestFilter() );
63  		httpTransport.addRequestFilter( new SoapHeadersRequestFilter() );
64  		httpTransport.addRequestFilter( new HttpProxyRequestFilter() );
65  		httpTransport.addRequestFilter( new HttpAuthenticationRequestFilter() );
66  		httpTransport.addRequestFilter( new WssAuthenticationRequestFilter() );
67  		httpTransport.addRequestFilter( new PropertyExpansionRequestFilter() );
68  		httpTransport.addRequestFilter( new RemoveEmptyContentRequestFilter() );
69  		httpTransport.addRequestFilter( new StripWhitespacesRequestFilter() );
70  		httpTransport.addRequestFilter( new EndpointStrategyRequestFilter() );
71  		httpTransport.addRequestFilter( new WsaRequestFilter() );
72  		httpTransport.addRequestFilter( new WsrmRequestFilter() );
73  		httpTransport.addRequestFilter( new WssRequestFilter() );
74  
75  		for( RequestFilter filter : SoapUI.getListenerRegistry().getListeners( RequestFilter.class ) )
76  		{
77  			httpTransport.addRequestFilter( filter );
78  		}
79  
80  		httpTransport.addRequestFilter( new WsdlPackagingRequestFilter() );
81  		httpTransport.addRequestFilter( new HttpCompressionRequestFilter() );
82  		httpTransport.addRequestFilter( new WsdlPackagingResponseFilter() );
83  		httpTransport.addRequestFilter( new PostPackagingRequestFilter() );
84  
85  		transports.put( HTTP, httpTransport );
86  		transports.put( HTTPS, httpTransport );
87  	}
88  
89  	public static RequestTransport getTransport( String endpoint, SubmitContext submitContext )
90  			throws MissingTransportException
91  	{
92  		int ix = endpoint.indexOf( "://" );
93  		if( ix == -1 )
94  			throw new MissingTransportException( "Missing protocol in endpoint [" + endpoint + "]" );
95  
96  		String protocol = endpoint.substring( 0, ix ).toLowerCase();
97  		RequestTransport transport = transports.get( protocol );
98  
99  		if( transport == null )
100 			throw new MissingTransportException( "Missing transport for protocol [" + protocol + "]" );
101 
102 		return transport;
103 	}
104 
105 	public static void addTransport( String key, RequestTransport rt )
106 	{
107 		transports.put( key, rt );
108 	}
109 
110 	public static class MissingTransportException extends Exception
111 	{
112 		public MissingTransportException( String msg )
113 		{
114 			super( msg );
115 		}
116 	}
117 }