View Javadoc

1   package com.atlassian.sal.core.net;
2   
3   import com.atlassian.sal.api.net.NonMarshallingRequestFactory;
4   import com.atlassian.sal.api.net.Request.MethodType;
5   import com.atlassian.sal.api.user.UserManager;
6   import com.atlassian.sal.core.trusted.CertificateFactory;
7   import org.apache.commons.httpclient.HttpClient;
8   import org.apache.commons.httpclient.params.HttpConnectionManagerParams;
9   import org.apache.log4j.Logger;
10  
11  /**
12   * Does NOT support json/xml oject marshalling. Use the atlassian-rest implementation of
13   * {@link com.atlassian.sal.api.net.RequestFactory} instead.
14   */
15  public class HttpClientRequestFactory implements NonMarshallingRequestFactory<HttpClientRequest>
16  {
17      private static final Logger log = Logger.getLogger(HttpClientRequestFactory.class);
18  
19      private final CertificateFactory certificateFactory;
20      private final UserManager userManager;
21  
22      public HttpClientRequestFactory(final CertificateFactory certificateFactory, final UserManager userManager)
23      {
24          this.certificateFactory = certificateFactory;
25          this.userManager = userManager;
26      }
27  
28      /**
29       * The default time to wait without retrieving data from the remote connection
30       */
31      public static final int DEFAULT_SOCKET_TIMEOUT=Integer.parseInt(System.getProperty("http.socketTimeout", "10000"));
32  
33      /**
34       * The default time allowed for establishing a connection
35       */
36      public static final int DEFAULT_CONNECTION_TIMEOUT=Integer.parseInt(System.getProperty("http.connectionTimeout", "10000"));
37      
38      /* (non-Javadoc)
39       * @see com.atlassian.sal.api.net.RequestFactory#createMethod(com.atlassian.sal.api.net.Request.MethodType, java.lang.String)
40       */
41      public HttpClientRequest createRequest(final MethodType methodType, final String url)
42      {
43          final HttpClient httpClient = getHttpClient(url);
44          return new HttpClientRequest(httpClient, methodType, url, certificateFactory, userManager);
45      }
46  
47      /**
48       * @param url The URL
49       * @return The HTTP client
50       */
51      protected HttpClient getHttpClient(final String url)
52      {
53          final HttpClient httpClient = new HttpClient();
54          configureProxy(httpClient, url);
55          configureConnectionParameters(httpClient);
56          return httpClient;
57      }
58  
59      /**
60       * Applies a set of parameters to a client
61       *
62       * @param httpClient the client to which parameters are applied
63       */
64      protected void configureConnectionParameters(final HttpClient httpClient)
65      {
66          final HttpConnectionManagerParams params = httpClient.getHttpConnectionManager().getParams();
67          params.setSoTimeout(DEFAULT_SOCKET_TIMEOUT);
68          params.setConnectionTimeout(DEFAULT_CONNECTION_TIMEOUT);
69      }
70  
71      /**
72       * @param client The client to configure the proxy of
73       * @param remoteUrl The remote URL
74       */
75      protected void configureProxy(final HttpClient client, final String remoteUrl)
76      {
77          new HttpClientProxyConfig().configureProxy(client, remoteUrl);
78      }
79      
80      public boolean supportsHeader()
81      {
82      	return true;
83      }
84  }