summaryrefslogtreecommitdiff
path: root/bkucommon/src/main/java/at/gv/egiz/bku/binding
diff options
context:
space:
mode:
Diffstat (limited to 'bkucommon/src/main/java/at/gv/egiz/bku/binding')
-rw-r--r--bkucommon/src/main/java/at/gv/egiz/bku/binding/BindingProcessorManagerImpl.java5
-rw-r--r--bkucommon/src/main/java/at/gv/egiz/bku/binding/DataUrl.java26
-rw-r--r--bkucommon/src/main/java/at/gv/egiz/bku/binding/DataUrlConnectionImpl.java43
-rw-r--r--bkucommon/src/main/java/at/gv/egiz/bku/binding/DataUrlConnectionSPI.java17
-rw-r--r--bkucommon/src/main/java/at/gv/egiz/bku/binding/HTTPBindingProcessor.java58
-rw-r--r--bkucommon/src/main/java/at/gv/egiz/bku/binding/LegacyDataUrlConnectionImpl.java257
-rw-r--r--bkucommon/src/main/java/at/gv/egiz/bku/binding/ProcessingContext.java44
7 files changed, 398 insertions, 52 deletions
diff --git a/bkucommon/src/main/java/at/gv/egiz/bku/binding/BindingProcessorManagerImpl.java b/bkucommon/src/main/java/at/gv/egiz/bku/binding/BindingProcessorManagerImpl.java
index 9757f7cc..5b061850 100644
--- a/bkucommon/src/main/java/at/gv/egiz/bku/binding/BindingProcessorManagerImpl.java
+++ b/bkucommon/src/main/java/at/gv/egiz/bku/binding/BindingProcessorManagerImpl.java
@@ -49,9 +49,10 @@ public class BindingProcessorManagerImpl implements BindingProcessorManager {
private static Log log = LogFactory.getLog(BindingProcessorManagerImpl.class);
+ protected STALFactory stalFactory;
+ protected SLCommandInvoker commandInvokerClass;
+
private RemovalStrategy removalStrategy;
- private STALFactory stalFactory;
- private SLCommandInvoker commandInvokerClass;
private ExecutorService executorService;
private Map<Id, ProcessingContext> contextMap = Collections.synchronizedMap(new HashMap<Id, ProcessingContext>());
// private Map<Id, MapEntityWrapper> bindingProcessorMap = Collections
diff --git a/bkucommon/src/main/java/at/gv/egiz/bku/binding/DataUrl.java b/bkucommon/src/main/java/at/gv/egiz/bku/binding/DataUrl.java
index d462ac60..2e2cc38a 100644
--- a/bkucommon/src/main/java/at/gv/egiz/bku/binding/DataUrl.java
+++ b/bkucommon/src/main/java/at/gv/egiz/bku/binding/DataUrl.java
@@ -20,6 +20,9 @@ import java.net.MalformedURLException;
import java.net.URL;
import java.util.Properties;
+import javax.net.ssl.HostnameVerifier;
+import javax.net.ssl.SSLSocketFactory;
+
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
@@ -32,7 +35,10 @@ import at.gv.egiz.bku.slexceptions.SLRuntimeException;
public class DataUrl {
private static DataUrlConnectionSPI defaultDataUrlConnection = new DataUrlConnectionImpl();
private static Log log = LogFactory.getLog(DataUrl.class);
- private static Properties configuration;
+ private static Properties configuration;
+ private static SSLSocketFactory sslSocketFactory;
+ private static HostnameVerifier hostNameVerifier;
+
private URL url;
@@ -44,7 +50,10 @@ public class DataUrl {
if (dataUrlConnection == null) {
throw new NullPointerException("Default dataurlconnection must not be set to null");
}
- defaultDataUrlConnection = dataUrlConnection;
+ defaultDataUrlConnection = dataUrlConnection;
+ defaultDataUrlConnection.setConfiguration(configuration);
+ defaultDataUrlConnection.setSSLSocketFactory(sslSocketFactory);
+ defaultDataUrlConnection.setHostnameVerifier(hostNameVerifier);
}
public DataUrl(String aUrlString) throws MalformedURLException {
@@ -65,5 +74,16 @@ public class DataUrl {
public static void setConfiguration(Properties props) {
configuration = props;
- }
+ defaultDataUrlConnection.setConfiguration(configuration);
+ }
+
+ public static void setSSLSocketFactory(SSLSocketFactory socketFactory) {
+ sslSocketFactory = socketFactory;
+ defaultDataUrlConnection.setSSLSocketFactory(socketFactory);
+ }
+
+ public static void setHostNameVerifier(HostnameVerifier hostNameVerifier) {
+ DataUrl.hostNameVerifier = hostNameVerifier;
+ defaultDataUrlConnection.setHostnameVerifier(hostNameVerifier);
+ }
} \ No newline at end of file
diff --git a/bkucommon/src/main/java/at/gv/egiz/bku/binding/DataUrlConnectionImpl.java b/bkucommon/src/main/java/at/gv/egiz/bku/binding/DataUrlConnectionImpl.java
index 6ad0bb78..57d89c89 100644
--- a/bkucommon/src/main/java/at/gv/egiz/bku/binding/DataUrlConnectionImpl.java
+++ b/bkucommon/src/main/java/at/gv/egiz/bku/binding/DataUrlConnectionImpl.java
@@ -31,7 +31,9 @@ import java.util.Map;
import java.util.Properties;
import java.util.Set;
+import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
+import javax.net.ssl.SSLSocketFactory;
import org.apache.commons.httpclient.methods.multipart.FilePart;
import org.apache.commons.httpclient.methods.multipart.Part;
@@ -51,11 +53,12 @@ import at.gv.egiz.bku.utils.binding.Protocol;
*
*/
public class DataUrlConnectionImpl implements DataUrlConnectionSPI {
-
+
private final static Log log = LogFactory.getLog(DataUrlConnectionImpl.class);
public final static Protocol[] SUPPORTED_PROTOCOLS = { Protocol.HTTP,
Protocol.HTTPS };
+
protected X509Certificate serverCertificate;
protected Protocol protocol;
protected URL url;
@@ -64,6 +67,8 @@ public class DataUrlConnectionImpl implements DataUrlConnectionSPI {
protected ArrayList<Part> formParams;
protected String boundary;
protected Properties config = null;
+ protected SSLSocketFactory sslSocketFactory;
+ protected HostnameVerifier hostnameVerifier;
protected DataUrlResponse result;
@@ -84,6 +89,22 @@ public class DataUrlConnectionImpl implements DataUrlConnectionSPI {
*/
public void connect() throws SocketTimeoutException, IOException {
connection = (HttpURLConnection) url.openConnection();
+ if (connection instanceof HttpsURLConnection) {
+ log.trace("Detected ssl connection");
+ HttpsURLConnection https = (HttpsURLConnection) connection;
+ if (sslSocketFactory != null) {
+ log.debug("Setting custom ssl socket factory for ssl connection");
+ https.setSSLSocketFactory(sslSocketFactory);
+ } else {
+ log.trace("No custom socket factory set");
+ }
+ if (hostnameVerifier != null) {
+ log.debug("Setting custom hostname verifier");
+ https.setHostnameVerifier(hostnameVerifier);
+ }
+ } else {
+ log.trace("No secure connection with: "+url+ " class="+connection.getClass());
+ }
connection.setDoOutput(true);
Set<String> headers = requestHttpHeaders.keySet();
Iterator<String> headerIt = headers.iterator();
@@ -91,13 +112,13 @@ public class DataUrlConnectionImpl implements DataUrlConnectionSPI {
String name = headerIt.next();
connection.setRequestProperty(name, requestHttpHeaders.get(name));
}
- log.trace("Connecting to: "+url);
+ log.trace("Connecting to: " + url);
connection.connect();
if (connection instanceof HttpsURLConnection) {
HttpsURLConnection ssl = (HttpsURLConnection) connection;
X509Certificate[] certs = (X509Certificate[]) ssl.getServerCertificates();
if ((certs != null) && (certs.length >= 1)) {
- log.trace("Server certificate: "+certs[0]);
+ log.trace("Server certificate: " + certs[0]);
serverCertificate = certs[0];
}
}
@@ -155,8 +176,9 @@ public class DataUrlConnectionImpl implements DataUrlConnectionSPI {
} catch (IOException iox) {
log.info(iox);
}
- log.trace("Reading response");
- result = new DataUrlResponse(url.toString(), connection.getResponseCode(), is);
+ log.trace("Reading response");
+ result = new DataUrlResponse(url.toString(), connection.getResponseCode(),
+ is);
Map<String, String> responseHttpHeaders = new HashMap<String, String>();
Map<String, List<String>> httpHeaders = connection.getHeaderFields();
for (Iterator<String> keyIt = httpHeaders.keySet().iterator(); keyIt
@@ -227,6 +249,7 @@ public class DataUrlConnectionImpl implements DataUrlConnectionSPI {
public DataUrlConnectionSPI newInstance() {
DataUrlConnectionSPI uc = new DataUrlConnectionImpl();
uc.setConfiguration(config);
+ uc.setSSLSocketFactory(sslSocketFactory);
return uc;
}
@@ -239,4 +262,14 @@ public class DataUrlConnectionImpl implements DataUrlConnectionSPI {
public void setConfiguration(Properties config) {
this.config = config;
}
+
+ @Override
+ public void setSSLSocketFactory(SSLSocketFactory socketFactory) {
+ this.sslSocketFactory = socketFactory;
+ }
+
+ @Override
+ public void setHostnameVerifier(HostnameVerifier hostnameVerifier) {
+ this.hostnameVerifier = hostnameVerifier;
+ }
} \ No newline at end of file
diff --git a/bkucommon/src/main/java/at/gv/egiz/bku/binding/DataUrlConnectionSPI.java b/bkucommon/src/main/java/at/gv/egiz/bku/binding/DataUrlConnectionSPI.java
index 80cc3a0b..f838b919 100644
--- a/bkucommon/src/main/java/at/gv/egiz/bku/binding/DataUrlConnectionSPI.java
+++ b/bkucommon/src/main/java/at/gv/egiz/bku/binding/DataUrlConnectionSPI.java
@@ -18,6 +18,9 @@ package at.gv.egiz.bku.binding;
import java.net.URL;
import java.util.Properties;
+
+import javax.net.ssl.HostnameVerifier;
+import javax.net.ssl.SSLSocketFactory;
/**
* Prototype of a DataurlconnectionSPI
@@ -43,7 +46,19 @@ public interface DataUrlConnectionSPI extends DataUrlConnection {
* Sets configuration parameters for this connection
* @param config
*/
- public void setConfiguration(Properties config);
+ public void setConfiguration(Properties config);
+
+ /**
+ * Sets the socketfactory to be used for ssl connections.
+ * @param socketFactory if null the socket factory will not be set explicitly
+ */
+ public void setSSLSocketFactory(SSLSocketFactory socketFactory);
+
+ /**
+ * Sets the hostname verifier to be used,
+ * @param hostnameVerifier if null the default hostname verifier will be used
+ */
+ public void setHostnameVerifier(HostnameVerifier hostnameVerifier);
}
diff --git a/bkucommon/src/main/java/at/gv/egiz/bku/binding/HTTPBindingProcessor.java b/bkucommon/src/main/java/at/gv/egiz/bku/binding/HTTPBindingProcessor.java
index 4a22874c..98b5b775 100644
--- a/bkucommon/src/main/java/at/gv/egiz/bku/binding/HTTPBindingProcessor.java
+++ b/bkucommon/src/main/java/at/gv/egiz/bku/binding/HTTPBindingProcessor.java
@@ -139,8 +139,8 @@ public class HTTPBindingProcessor extends AbstractBindingProcessor implements
srcContex.setSourceIsDataURL(false);
}
- //----------------------------------------------------------------------------
- // ----------- BEGIN CONVENIENCE METHODS -----------
+ //----------------------------------------------------------------------------
+ // ----------- BEGIN CONVENIENCE METHODS -----------
protected void sendSTALQuit() {
log.info("Sending QUIT command to STAL");
@@ -217,24 +217,24 @@ public class HTTPBindingProcessor extends AbstractBindingProcessor implements
}
}
- //----------------------------------------------------------------------------
- // ----------- END CONVENIENCE METHODS -----------
+ //----------------------------------------------------------------------------
+ // ----------- END CONVENIENCE METHODS -----------
- //----------------------------------------------------------------------------
- // -- BEGIN Methods that handle the http binding activities as defined in the
- // activity diagram --
+ //----------------------------------------------------------------------------
+ // -- BEGIN Methods that handle the http binding activities as defined in the
+ // activity diagram --
protected void init() {
log.info("Starting Bindingprocessor in Thread: "
+ Thread.currentThread().getId());
if (bindingProcessorError != null) {
log.debug("Detected binding processor error, sending quit command");
- // sendSTALQuit();
+ // sendSTALQuit();
currentState = State.FINISHED;
} else if (slCommand == null) {
log.error("SLCommand not set (consumeRequest not called ??)");
bindingProcessorError = new SLException(2000);
- // sendSTALQuit();
+ // sendSTALQuit();
currentState = State.FINISHED;
} else {
currentState = State.PROCESS;
@@ -270,7 +270,7 @@ public class HTTPBindingProcessor extends AbstractBindingProcessor implements
DataUrl dataUrl = new DataUrl(getDataUrl());
DataUrlConnection conn = dataUrl.openConnection();
- // set transfer headers
+ // set transfer headers
for (FormParameter fp : getTransferHeaders()) {
String paramString = getFormParameterAsString(fp);
if (paramString == null) {
@@ -288,7 +288,7 @@ public class HTTPBindingProcessor extends AbstractBindingProcessor implements
}
}
- // set transfer form parameters
+ // set transfer form parameters
for (FormParameter fp : getTransferForms()) {
String contentTransferEncoding = null;
String contentType = fp.getFormParameterContentType();
@@ -311,18 +311,18 @@ public class HTTPBindingProcessor extends AbstractBindingProcessor implements
contentTransferEncoding);
}
- // connect
+ // connect
conn.connect();
- // fetch and set SL result
+ // fetch and set SL result
targetContext.setTargetIsDataURL(true);
targetContext.setTargetCertificate(conn.getServerCertificate());
targetContext.setTargetUrl(conn.getUrl());
SLResult result = commandInvoker.getResult(targetContext);
- // transfer result
+ // transfer result
conn.transmit(result);
- // process Dataurl response
+ // process Dataurl response
dataUrlResponse = conn.getResponse();
log.debug("Received data url response code: "
+ dataUrlResponse.getResponseCode());
@@ -335,7 +335,7 @@ public class HTTPBindingProcessor extends AbstractBindingProcessor implements
if ((contentType.startsWith(HttpUtil.APPLICATION_URL_ENCODED))
|| (contentType.startsWith(HttpUtil.MULTIPART_FOTMDATA))) {
log.debug("Detected SL Request in dataurl response");
- // process headers and request
+ // process headers and request
setHTTPHeaders(dataUrlResponse.getResponseHeaders());
consumeRequestStream(dataUrlResponse.getStream());
closeDataUrlConnection();
@@ -363,7 +363,7 @@ public class HTTPBindingProcessor extends AbstractBindingProcessor implements
srcContex.setSourceIsDataURL(true);
srcContex.setSourceUrl(conn.getUrl());
currentState = State.PROCESS;
- // just to be complete, actually not used
+ // just to be complete, actually not used
srcContex.setSourceHTTPReferer(dataUrlResponse.getResponseHeaders()
.get(HttpUtil.HTTP_HEADER_REFERER));
} else {
@@ -390,7 +390,7 @@ public class HTTPBindingProcessor extends AbstractBindingProcessor implements
.error("Did not get a location header for a 307 data url response");
throw new SLBindingException(2003);
}
- // consumeRequestStream(dataUrlResponse.getStream());
+ // consumeRequestStream(dataUrlResponse.getStream());
FormParameterStore fp = new FormParameterStore();
fp.init(location.getBytes(HttpUtil.DEFAULT_CHARSET),
FixedFormParameters.DATAURL, null, null);
@@ -403,7 +403,7 @@ public class HTTPBindingProcessor extends AbstractBindingProcessor implements
srcContex.setSourceIsDataURL(true);
srcContex.setSourceUrl(conn.getUrl());
currentState = State.PROCESS;
- // just to be complete, actually not used
+ // just to be complete, actually not used
srcContex.setSourceHTTPReferer(dataUrlResponse.getResponseHeaders()
.get(HttpUtil.HTTP_HEADER_REFERER));
@@ -427,7 +427,7 @@ public class HTTPBindingProcessor extends AbstractBindingProcessor implements
break;
default:
- // issue error
+ // issue error
log.info("Unexpected response code from dataurl server: "
+ dataUrlResponse.getResponseCode());
throw new SLBindingException(2007);
@@ -499,9 +499,9 @@ public class HTTPBindingProcessor extends AbstractBindingProcessor implements
finished = true;
}
- // -- END Methods that handle the http binding activities as defined in the
- // activity diagram --
- //----------------------------------------------------------------------------
+ // -- END Methods that handle the http binding activities as defined in the
+ // activity diagram --
+ //----------------------------------------------------------------------------
/**
* Sets the headers of the SL Request. IMPORTANT: make sure to set all headers
@@ -512,7 +512,7 @@ public class HTTPBindingProcessor extends AbstractBindingProcessor implements
*/
public void setHTTPHeaders(Map<String, String> aHeaderMap) {
headerMap = new HashMap<String, String>();
- // ensure lowercase keys
+ // ensure lowercase keys
if (aHeaderMap != null) {
for (String s : aHeaderMap.keySet()) {
if (s != null) {
@@ -673,7 +673,7 @@ public class HTTPBindingProcessor extends AbstractBindingProcessor implements
FormParameterStore fps = new FormParameterStore();
fps.init(fp);
if (!fps.isEmpty()) {
- log.debug("Setting from parameter: " + fps.getFormParameterName());
+ log.debug("Setting form parameter: " + fps.getFormParameterName());
formParameterMap.put(fps.getFormParameterName(), fps);
}
}
@@ -683,7 +683,7 @@ public class HTTPBindingProcessor extends AbstractBindingProcessor implements
}
if (is.read() != -1) {
log.error("Request input stream not completely read");
- // consume rest of stream, should never occur
+ // consume rest of stream, should never occur
throw new SLRuntimeException(
"request input stream not consumed till end");
}
@@ -761,15 +761,15 @@ public class HTTPBindingProcessor extends AbstractBindingProcessor implements
transformer.transform(new StreamSource(isr), new StreamResult(osw));
} catch (TransformerException e) {
log.fatal("Exception occured during result transformation", e);
- // bindingProcessorError = new SLException(2008);
- // handleBindingProcessorError(os, encoding, null);
+ // bindingProcessorError = new SLException(2008);
+ // handleBindingProcessorError(os, encoding, null);
return;
}
}
osw.flush();
isr.close();
} else if (slResult == null) {
- // result not yet assigned -> must be a cancel
+ // result not yet assigned -> must be a cancel
bindingProcessorError = new SLException(6001);
handleBindingProcessorError(os, encoding, templates);
return;
diff --git a/bkucommon/src/main/java/at/gv/egiz/bku/binding/LegacyDataUrlConnectionImpl.java b/bkucommon/src/main/java/at/gv/egiz/bku/binding/LegacyDataUrlConnectionImpl.java
new file mode 100644
index 00000000..452c45e5
--- /dev/null
+++ b/bkucommon/src/main/java/at/gv/egiz/bku/binding/LegacyDataUrlConnectionImpl.java
@@ -0,0 +1,257 @@
+package at.gv.egiz.bku.binding;
+
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.io.StringWriter;
+import java.net.HttpURLConnection;
+import java.net.SocketTimeoutException;
+import java.net.URL;
+import java.net.URLEncoder;
+import java.security.cert.X509Certificate;
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+import java.util.Properties;
+import java.util.Set;
+
+import javax.net.ssl.HostnameVerifier;
+import javax.net.ssl.HttpsURLConnection;
+import javax.net.ssl.SSLSocketFactory;
+import javax.xml.transform.stream.StreamResult;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+
+import at.gv.egiz.bku.slcommands.SLResult;
+import at.gv.egiz.bku.slcommands.SLResult.SLResultType;
+import at.gv.egiz.bku.slexceptions.SLRuntimeException;
+import at.gv.egiz.bku.utils.binding.Protocol;
+
+/**
+ * not thread-safe thus newInsance always returns a new object
+ *
+ */
+public class LegacyDataUrlConnectionImpl implements DataUrlConnectionSPI {
+
+ private final static Log log = LogFactory.getLog(DataUrlConnectionImpl.class);
+
+ public final static Protocol[] SUPPORTED_PROTOCOLS = { Protocol.HTTP,
+ Protocol.HTTPS };
+ protected X509Certificate serverCertificate;
+ protected Protocol protocol;
+ protected URL url;
+ private HttpURLConnection connection;
+ protected Map<String, String> requestHttpHeaders;
+ protected Map<String, String> formParams;
+ protected String boundary;
+ protected Properties config = null;
+ protected SSLSocketFactory sslSocketFactory;
+ protected HostnameVerifier hostnameVerifier;
+
+ protected DataUrlResponse result;
+
+ public String getProtocol() {
+ if (protocol == null) {
+ return null;
+ }
+ return protocol.toString();
+ }
+
+ /**
+ * opens a connection sets the headers gets the server certificate
+ *
+ * @throws java.net.SocketTimeoutException
+ * @throws java.io.IOException
+ * @pre url != null
+ * @pre httpHeaders != null
+ */
+ public void connect() throws SocketTimeoutException, IOException {
+ connection = (HttpURLConnection) url.openConnection();
+ if (connection instanceof HttpsURLConnection) {
+ HttpsURLConnection https = (HttpsURLConnection) connection;
+ if (sslSocketFactory != null) {
+ log.debug("Setting custom ssl socket factory for ssl connection");
+ https.setSSLSocketFactory(sslSocketFactory);
+ }
+ if (hostnameVerifier != null) {
+ log.debug("Setting custom hostname verifier");
+ https.setHostnameVerifier(hostnameVerifier);
+ }
+ }
+ connection.setDoOutput(true);
+ Set<String> headers = requestHttpHeaders.keySet();
+ Iterator<String> headerIt = headers.iterator();
+ while (headerIt.hasNext()) {
+ String name = headerIt.next();
+ connection.setRequestProperty(name, requestHttpHeaders.get(name));
+ }
+ log.trace("Connecting to: "+url);
+ connection.connect();
+ if (connection instanceof HttpsURLConnection) {
+ HttpsURLConnection ssl = (HttpsURLConnection) connection;
+ X509Certificate[] certs = (X509Certificate[]) ssl.getServerCertificates();
+ if ((certs != null) && (certs.length >= 1)) {
+ log.trace("Server certificate: "+certs[0]);
+ serverCertificate = certs[0];
+ }
+ }
+ }
+
+ public X509Certificate getServerCertificate() {
+ return serverCertificate;
+ }
+
+ public void setHTTPHeader(String name, String value) {
+ if (name != null && value != null) {
+ requestHttpHeaders.put(name, value);
+ }
+ }
+
+ public void setHTTPFormParameter(String name, InputStream data,
+ String contentType, String charSet, String transferEncoding) {
+ StringBuilder sb = new StringBuilder();
+ try {
+ InputStreamReader reader = new InputStreamReader(data, (charSet != null) ? charSet : "UTF-8");
+ char[] c = new char[512];
+ for (int l; (l = reader.read(c)) != -1;) {
+ sb.append(c, 0, l);
+ }
+ } catch (IOException e) {
+ throw new SLRuntimeException("Failed to set HTTP form parameter.", e);
+ }
+ formParams.put(name, sb.toString());
+ }
+
+ /**
+ * send all formParameters
+ *
+ * @throws java.io.IOException
+ */
+ public void transmit(SLResult slResult) throws IOException {
+ StringWriter writer = new StringWriter();
+ slResult.writeTo(new StreamResult(writer));
+ formParams.put(
+ (slResult.getResultType() == SLResultType.XML)
+ ? DataUrlConnection.FORMPARAM_XMLRESPONSE
+ : DataUrlConnection.FORMPARAM_BINARYRESPONSE,
+ writer.toString());
+
+ OutputStream os = connection.getOutputStream();
+ OutputStreamWriter streamWriter = new OutputStreamWriter(os, HttpUtil.DEFAULT_CHARSET);
+
+ log.trace("Sending data");
+ Iterator<String> keys = formParams.keySet().iterator();
+ while(keys.hasNext()) {
+ String key = keys.next();
+ streamWriter.write(URLEncoder.encode(key, "UTF-8"));
+ streamWriter.write("=");
+ streamWriter.write(URLEncoder.encode(formParams.get(key), "UTF-8"));
+ if (keys.hasNext()) {
+ streamWriter.write("&");
+ }
+ }
+ streamWriter.flush();
+ os.close();
+
+ // MultipartRequestEntity PostMethod
+ InputStream is = null;
+ try {
+ is = connection.getInputStream();
+ } catch (IOException iox) {
+ log.info(iox);
+ }
+ log.trace("Reading response");
+ result = new DataUrlResponse(url.toString(), connection.getResponseCode(), is);
+ Map<String, String> responseHttpHeaders = new HashMap<String, String>();
+ Map<String, List<String>> httpHeaders = connection.getHeaderFields();
+ for (Iterator<String> keyIt = httpHeaders.keySet().iterator(); keyIt
+ .hasNext();) {
+ String key = keyIt.next();
+ StringBuffer value = new StringBuffer();
+ for (String val : httpHeaders.get(key)) {
+ value.append(val);
+ value.append(HttpUtil.SEPERATOR[0]);
+ }
+ String valString = value.substring(0, value.length() - 1);
+ if ((key != null) && (value.length() > 0)) {
+ responseHttpHeaders.put(key, valString);
+ }
+ }
+ result.setResponseHttpHeaders(responseHttpHeaders);
+ }
+
+ @Override
+ public DataUrlResponse getResponse() throws IOException {
+ return result;
+ }
+
+ /**
+ * inits protocol, url, httpHeaders, formParams
+ *
+ * @param url
+ * must not be null
+ */
+ @Override
+ public void init(URL url) {
+
+ for (int i = 0; i < SUPPORTED_PROTOCOLS.length; i++) {
+ if (SUPPORTED_PROTOCOLS[i].toString().equalsIgnoreCase(url.getProtocol())) {
+ protocol = SUPPORTED_PROTOCOLS[i];
+ break;
+ }
+ }
+ if (protocol == null) {
+ throw new SLRuntimeException("Protocol " + url.getProtocol()
+ + " not supported for data url");
+ }
+ this.url = url;
+ requestHttpHeaders = new HashMap<String, String>();
+ if ((config != null)
+ && (config.getProperty(USER_AGENT_PROPERTY_KEY) != null)) {
+ requestHttpHeaders.put(HttpUtil.HTTP_HEADER_USER_AGENT, config
+ .getProperty(USER_AGENT_PROPERTY_KEY));
+ } else {
+ requestHttpHeaders
+ .put(HttpUtil.HTTP_HEADER_USER_AGENT, DEFAULT_USERAGENT);
+
+ }
+ requestHttpHeaders.put(HttpUtil.HTTP_HEADER_CONTENT_TYPE,
+ HttpUtil.APPLICATION_URL_ENCODED);
+
+ formParams = new HashMap<String, String>();
+ }
+
+ @Override
+ public DataUrlConnectionSPI newInstance() {
+ DataUrlConnectionSPI uc = new LegacyDataUrlConnectionImpl();
+ uc.setConfiguration(config);
+ uc.setSSLSocketFactory(sslSocketFactory);
+ uc.setHostnameVerifier(hostnameVerifier);
+ return uc;
+ }
+
+ @Override
+ public URL getUrl() {
+ return url;
+ }
+
+ @Override
+ public void setConfiguration(Properties config) {
+ this.config = config;
+ }
+
+ @Override
+ public void setSSLSocketFactory(SSLSocketFactory socketFactory) {
+ this.sslSocketFactory = socketFactory;
+ }
+
+ @Override
+ public void setHostnameVerifier(HostnameVerifier hostnameVerifier) {
+ this.hostnameVerifier = hostnameVerifier;
+ }
+} \ No newline at end of file
diff --git a/bkucommon/src/main/java/at/gv/egiz/bku/binding/ProcessingContext.java b/bkucommon/src/main/java/at/gv/egiz/bku/binding/ProcessingContext.java
index ae7f01eb..913259f6 100644
--- a/bkucommon/src/main/java/at/gv/egiz/bku/binding/ProcessingContext.java
+++ b/bkucommon/src/main/java/at/gv/egiz/bku/binding/ProcessingContext.java
@@ -1,6 +1,18 @@
/*
- * To change this template, choose Tools | Templates
- * and open the template in the editor.
+ * Copyright 2008 Federal Chancellery Austria and
+ * Graz University of Technology
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
*/
package at.gv.egiz.bku.binding;
@@ -8,32 +20,40 @@ package at.gv.egiz.bku.binding;
import java.util.Hashtable;
import java.util.Map;
import java.util.concurrent.Future;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
/**
- * BindingContext?
- * RequestBindingContext?
- *
- * @author clemens
+ *
+ * @author Clemens Orthacker <clemens.orthacker@iaik.tugraz.at>
*/
public class ProcessingContext {
public static final String BINDING_PROCESSOR = "binding.processor";
public static final String FUTURE = "future";
-
+
+ protected static final Log log = LogFactory.getLog(ProcessingContext.class);
+
protected Map<String, Object> properties = new Hashtable<String, Object>();
public ProcessingContext(BindingProcessor bp, Future future) {
properties.put(BINDING_PROCESSOR, bp);
properties.put(FUTURE, future);
}
-
-
-
+
public BindingProcessor getBindingProcessor() {
return (BindingProcessor) properties.get(BINDING_PROCESSOR);
}
-
+
public Future getFuture() {
- return (Future) properties.get(FUTURE);
+ return (Future) properties.get(FUTURE);
+ }
+
+ public Object get(String key) {
+ return properties.get(key);
+ }
+
+ public void put(String key, Object value) {
+ properties.put(key, value);
}
}