1
2
3
4
5
6
7
8
9
10
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 }