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.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 }