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.HttpPackagingResponseFilter;
24  import com.eviware.soapui.impl.wsdl.submit.filters.HttpProxyRequestFilter;
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.WsrmRequestFilter;
35  import com.eviware.soapui.impl.wsdl.submit.filters.WssAuthenticationRequestFilter;
36  import com.eviware.soapui.impl.wsdl.submit.filters.WssRequestFilter;
37  import com.eviware.soapui.impl.wsdl.submit.transports.http.HttpClientRequestTransport;
38  import com.eviware.soapui.impl.wsdl.submit.transports.jms.HermesJmsRequestTransport;
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  	public static final String JMS = "jms";
53  
54  	private static Map<String, RequestTransport> transports = new HashMap<String, RequestTransport>();
55  
56  	static
57  	{
58  		HttpClientRequestTransport httpTransport = new HttpClientRequestTransport();
59  		HermesJmsRequestTransport jmsTransport = new HermesJmsRequestTransport();
60  
61  		httpTransport.addRequestFilter( new EndpointRequestFilter() );
62  		httpTransport.addRequestFilter( new HttpSettingsRequestFilter() );
63  		httpTransport.addRequestFilter( new RestRequestFilter() );
64  		httpTransport.addRequestFilter( new SoapHeadersRequestFilter() );
65  		httpTransport.addRequestFilter( new HttpProxyRequestFilter() );
66  		httpTransport.addRequestFilter( new HttpAuthenticationRequestFilter() );
67  		httpTransport.addRequestFilter( new WssAuthenticationRequestFilter() );
68  		httpTransport.addRequestFilter( new PropertyExpansionRequestFilter() );
69  		httpTransport.addRequestFilter( new RemoveEmptyContentRequestFilter() );
70  		httpTransport.addRequestFilter( new StripWhitespacesRequestFilter() );
71  		httpTransport.addRequestFilter( new EndpointStrategyRequestFilter() );
72  		httpTransport.addRequestFilter( new WsaRequestFilter() );
73  		httpTransport.addRequestFilter( new WsrmRequestFilter() );
74  		httpTransport.addRequestFilter( new WssRequestFilter() );
75  
76  		for( RequestFilter filter : SoapUI.getListenerRegistry().getListeners( RequestFilter.class ) )
77  		{
78  			httpTransport.addRequestFilter( filter );
79  		}
80  
81  		httpTransport.addRequestFilter( new WsdlPackagingRequestFilter() );
82  		httpTransport.addRequestFilter( new HttpCompressionRequestFilter() );
83  		httpTransport.addRequestFilter( new HttpPackagingResponseFilter() );
84  		httpTransport.addRequestFilter( new PostPackagingRequestFilter() );
85  
86  		transports.put( HTTP, httpTransport );
87  		transports.put( HTTPS, httpTransport );
88  
89  		jmsTransport.addRequestFilter( new WssAuthenticationRequestFilter() );
90  		jmsTransport.addRequestFilter( new PropertyExpansionRequestFilter() );
91  		jmsTransport.addRequestFilter( new RemoveEmptyContentRequestFilter() );
92  		jmsTransport.addRequestFilter( new StripWhitespacesRequestFilter() );
93  		jmsTransport.addRequestFilter( new WsaRequestFilter() );
94  		jmsTransport.addRequestFilter( new WssRequestFilter() );
95  
96  		for( RequestFilter filter : SoapUI.getListenerRegistry().getListeners( RequestFilter.class ) )
97  		{
98  			jmsTransport.addRequestFilter( filter );
99  		}
100 
101 		transports.put( JMS, jmsTransport );
102 	}
103 
104 	public static synchronized RequestTransport getTransport( String endpoint, SubmitContext submitContext )
105 			throws MissingTransportException, CannotResolveJmsTypeException
106 	{
107 		int ix = endpoint.indexOf( "://" );
108 		if( ix == -1 )
109 			throw new MissingTransportException( "Missing protocol in endpoint [" + endpoint + "]" );
110 
111 		String protocol = endpoint.substring( 0, ix ).toLowerCase();
112 
113 		RequestTransport transport = transports.get( protocol );
114 
115 		if( transport == null )
116 			throw new MissingTransportException( "Missing transport for protocol [" + protocol + "]" );
117 
118 		return transport;
119 	}
120 
121 	public static void addTransport( String key, RequestTransport rt )
122 	{
123 		transports.put( key, rt );
124 	}
125 
126 	public static class MissingTransportException extends Exception
127 	{
128 		public MissingTransportException( String msg )
129 		{
130 			super( msg );
131 		}
132 	}
133 
134 	public static class CannotResolveJmsTypeException extends Exception
135 	{
136 		public CannotResolveJmsTypeException( String msg )
137 		{
138 			super( msg );
139 		}
140 	}
141 }