01: // Copyright (c) 2002-2005 Canoo Engineering AG, Switzerland. All Rights Reserved.
02: package com.canoo.webtest.extension.applet.runner.https;
03:
04: import com.canoo.webtest.engine.Configuration;
05: import com.canoo.webtest.extension.applet.runner.http.HttpURLConnection;
06: import com.canoo.webtest.interfaces.IConnectionInitializer;
07: import com.canoo.webtest.interfaces.IPropertyHandler;
08: import com.canoo.webtest.security.ConnectionInitializationException;
09: import com.canoo.webtest.steps.request.TargetHelper;
10: import org.apache.commons.httpclient.HttpsURL;
11: import org.apache.log4j.Logger;
12:
13: import java.io.IOException;
14: import java.net.URL;
15: import java.net.URLConnection;
16: import java.net.URLStreamHandler;
17:
18: /**
19: * @author Denis N. Antonioli
20: */
21: public class Handler extends URLStreamHandler {
22: private static final Logger LOG = Logger.getLogger(Handler.class);
23: private static boolean sAlreadyInitialized;
24: private static Configuration sConfig;
25:
26: public static final IPropertyHandler SYSTEM_PROPERTY_HANDLER = new IPropertyHandler() {
27: public String getProperty(String propertyName) {
28: return System.getProperty(propertyName);
29: }
30: };
31:
32: static {
33: sConfig = new Configuration();
34: sConfig.setPropertyHandler(SYSTEM_PROPERTY_HANDLER);
35: sConfig.setProtocol("https");
36: }
37:
38: public static boolean isAlreadyInitialized() {
39: return sAlreadyInitialized;
40: }
41:
42: static void initializeCustomConnectionInitializer() {
43: if (sAlreadyInitialized) {
44: return;
45: }
46: sAlreadyInitialized = true;
47:
48: String customInitializerClassName = sConfig
49: .getExternalProperty(TargetHelper.CONNECTION_INITIALIZER_KEY);
50: if (customInitializerClassName == null) {
51: return;
52: }
53:
54: allocateAndInit(customInitializerClassName);
55: }
56:
57: static void allocateAndInit(final String customInitializerClassName) {
58: IConnectionInitializer customInitializer;
59: try {
60: customInitializer = (IConnectionInitializer) Class.forName(
61: customInitializerClassName).newInstance();
62: } catch (Exception e) {
63: LOG.info("exception instantiating Connection Initializer "
64: + e.getMessage(), e);
65: throw (RuntimeException) e;
66: }
67: try {
68: customInitializer.initializeConnection(sConfig);
69: LOG.info("custom connection initializer set-up.");
70: } catch (ConnectionInitializationException e) {
71: LOG.error(e.getMessage(), e);
72: }
73: }
74:
75: protected int getDefaultPort() {
76: return HttpsURL.DEFAULT_PORT;
77: }
78:
79: protected URLConnection openConnection(URL url) throws IOException {
80: initializeCustomConnectionInitializer();
81: return new HttpURLConnection(url);
82: }
83: }
|