1
2
3
4
5
6
7
8
9
10
11
12
13 package com.eviware.soapui.impl.wsdl.submit;
14
15 import com.eviware.soapui.SoapUI;
16 import com.eviware.soapui.impl.wsdl.submit.filters.*;
17 import com.eviware.soapui.impl.wsdl.submit.transports.http.HttpClientRequestTransport;
18 import com.eviware.soapui.model.iface.SubmitContext;
19
20 import java.util.HashMap;
21 import java.util.Map;
22
23 /***
24 * Registry of available transports, currently hard-coded but should be configurable in the future.
25 *
26 * @author Ole.Matzura
27 */
28
29 public class RequestTransportRegistry
30 {
31 public static final String HTTP = "http";
32 public static final String HTTPS = "https";
33
34 private static Map<String,RequestTransport> transports = new HashMap<String,RequestTransport>();
35
36 static
37 {
38 HttpClientRequestTransport httpTransport = new HttpClientRequestTransport();
39
40 httpTransport.addRequestFilter( new EndpointRequestFilter() );
41 httpTransport.addRequestFilter( new HttpSettingsRequestFilter() );
42 httpTransport.addRequestFilter( new RestRequestFilter() );
43 httpTransport.addRequestFilter( new SoapHeadersRequestFilter() );
44 httpTransport.addRequestFilter( new HttpProxyRequestFilter() );
45 httpTransport.addRequestFilter( new HttpAuthenticationRequestFilter() );
46 httpTransport.addRequestFilter( new WssAuthenticationRequestFilter() );
47 httpTransport.addRequestFilter( new PropertyExpansionRequestFilter() );
48 httpTransport.addRequestFilter( new RemoveEmptyContentRequestFilter() );
49 httpTransport.addRequestFilter( new StripWhitespacesRequestFilter() );
50 httpTransport.addRequestFilter( new EndpointStrategyRequestFilter() );
51 httpTransport.addRequestFilter( new WsaRequestFilter() );
52 httpTransport.addRequestFilter( new HttpCompressionRequestFilter() );
53 httpTransport.addRequestFilter( new WssRequestFilter() );
54 httpTransport.addRequestFilter( new WsdlPackagingRequestFilter() );
55 httpTransport.addRequestFilter( new WsdlPackagingResponseFilter() );
56
57 for( RequestFilter filter : SoapUI.getListenerRegistry().getListeners( RequestFilter.class ))
58 {
59 httpTransport.addRequestFilter( filter );
60 }
61
62 transports.put( HTTP, httpTransport );
63 transports.put( HTTPS, httpTransport );
64 }
65
66 public static RequestTransport getTransport( String endpoint, SubmitContext submitContext ) throws MissingTransportException
67 {
68 int ix = endpoint.indexOf( "://" );
69 if( ix == -1 )
70 throw new MissingTransportException( "Missing protocol in endpoint [" + endpoint + "]" );
71
72 String protocol = endpoint.substring( 0, ix ).toLowerCase();
73 RequestTransport transport = transports.get( protocol );
74
75 if( transport == null )
76 throw new MissingTransportException( "Missing transport for protocol [" + protocol + "]" );
77
78 return transport;
79 }
80
81 public static void addTransport(String key, RequestTransport rt)
82 {
83 transports.put( key, rt );
84 }
85
86 public static class MissingTransportException extends Exception
87 {
88 public MissingTransportException(String msg)
89 {
90 super( msg );
91 }
92 }
93 }