View Javadoc

1   /*
2    *  soapUI, copyright (C) 2004-2010 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.HttpPackagingResponseFilter;
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.impl.wsdl.submit.transports.jms.HermesJmsRequestTransport;
40  import com.eviware.soapui.model.iface.SubmitContext;
41  
42  /***
43   * Registry of available transports, currently hard-coded but should be
44   * configurable in the future.
45   * 
46   * @author Ole.Matzura
47   */
48  
49  public class RequestTransportRegistry
50  {
51  	public static final String HTTP = "http";
52  	public static final String HTTPS = "https";
53  	public static final String JMS = "jms";
54  
55  	private static Map<String, RequestTransport> transports = new HashMap<String, RequestTransport>();
56  
57  	static
58  	{
59  		HttpClientRequestTransport httpTransport = new HttpClientRequestTransport();
60   		HermesJmsRequestTransport jmsTransport = new HermesJmsRequestTransport();
61  	
62  		
63  		httpTransport.addRequestFilter( new EndpointRequestFilter() );
64  		httpTransport.addRequestFilter( new HttpSettingsRequestFilter() );
65  		httpTransport.addRequestFilter( new HttpRequestFilter() );
66  		httpTransport.addRequestFilter( new RestRequestFilter() );
67  		httpTransport.addRequestFilter( new SoapHeadersRequestFilter() );
68  		httpTransport.addRequestFilter( new HttpProxyRequestFilter() );
69  		httpTransport.addRequestFilter( new HttpAuthenticationRequestFilter() );
70  		httpTransport.addRequestFilter( new WssAuthenticationRequestFilter() );
71  		httpTransport.addRequestFilter( new PropertyExpansionRequestFilter() );
72  		httpTransport.addRequestFilter( new RemoveEmptyContentRequestFilter() );
73  		httpTransport.addRequestFilter( new StripWhitespacesRequestFilter() );
74  		httpTransport.addRequestFilter( new EndpointStrategyRequestFilter() );
75  		httpTransport.addRequestFilter( new WsaRequestFilter() );
76  		httpTransport.addRequestFilter( new WsrmRequestFilter() );
77  		httpTransport.addRequestFilter( new WssRequestFilter() );
78  
79  		for( RequestFilter filter : SoapUI.getListenerRegistry().getListeners( RequestFilter.class ) )
80  		{
81  			httpTransport.addRequestFilter( filter );
82  		}
83  
84  		httpTransport.addRequestFilter( new WsdlPackagingRequestFilter() );
85  		httpTransport.addRequestFilter( new HttpCompressionRequestFilter() );
86  		httpTransport.addRequestFilter( new HttpPackagingResponseFilter() );
87  		httpTransport.addRequestFilter( new PostPackagingRequestFilter() );
88  
89  		transports.put( HTTP, httpTransport );
90  		transports.put( HTTPS, httpTransport );
91  		transports.put(JMS, jmsTransport);
92  	}
93  
94  	public static RequestTransport getTransport( String endpoint, SubmitContext submitContext )
95  			throws MissingTransportException, CannotResolveJmsTypeException
96  	{
97  		int ix = endpoint.indexOf( "://" );
98  		if( ix == -1 )
99  			throw new MissingTransportException( "Missing protocol in endpoint [" + endpoint + "]" );
100 
101 		String protocol = endpoint.substring( 0, ix ).toLowerCase();
102 		
103 		RequestTransport transport = transports.get( protocol );
104 
105 		if( transport == null )
106 			throw new MissingTransportException( "Missing transport for protocol [" + protocol + "]" );
107 
108 		return transport;
109 	}
110 
111 
112 	public static void addTransport( String key, RequestTransport rt )
113 	{
114 		transports.put( key, rt );
115 	}
116 
117 	public static class MissingTransportException extends Exception
118 	{
119 		public MissingTransportException( String msg )
120 		{
121 			super(msg);
122 		}
123 	}
124 	
125 	public static class CannotResolveJmsTypeException extends Exception
126 	{
127 		public CannotResolveJmsTypeException( String msg )
128 		{
129 			super(msg);
130 		}
131 	}
132 }