blob: f58cb0a001de60cd9e80b0b1d13145095ed617db [file] [log] [blame]
/*******************************************************************************
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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 org.ofbiz.accounting.thirdparty.eway;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.net.HttpURLConnection;
import java.net.URL;
import org.ofbiz.base.util.Debug;
/**
* Handles connections to the eWay servers.
*
* Based on public domain sample code provided by eWay.com.au
*/
public class GatewayConnector {
private static final String module = GatewayConnector.class.getName();
private int timeout = 0;
public GatewayConnector(int timeout) {
this.timeout = timeout;
}
public GatewayConnector() {
this(60);
}
/**
* Get the timeout value set in the corresponding setter.
* @return timeout value in seconds, 0 for infinite
*/
public int getTimeout() {
return timeout;
}
/**
* Set the timout value. Note that setting the timeout for an HttpURLConnection
* is possible only since Java 1.5. This method has no effect on earlier
* versions.
* @param time timeout value in seconds, 0 for infinite
*/
public void setTimeout(int time) {
timeout = time;
}
/**
* Send a request to the payment gateway and get the response. This is a
* blocking method: when it returns the response object is filled in with
* the parameters from the gateway.
* @param request the request object, can be any of the 3 supported payment
* methods. Its data have to be filled in by its setter methods before
* calling sendRequest().
* @return the response object, containing the gateway's response to the
* request
* @throws Exception in case of networking and xml parsing errors
*/
public GatewayResponse sendRequest(GatewayRequest request) throws Exception {
// determine the gateway url to be used, based on the request type
String serverurl = request.getUrl();
GatewayResponse response = null;
InputStream in = null;
HttpURLConnection connection = null;
try {
// connect to the gateway
URL u = new URL(serverurl);
connection = (HttpURLConnection)(u.openConnection());
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setRequestMethod("POST");
connection.setConnectTimeout(timeout*1000);
OutputStream out = connection.getOutputStream();
Writer wout = new OutputStreamWriter(out);
wout.write(request.toXml());
wout.flush();
wout.close();
in = connection.getInputStream();
response = new GatewayResponse(in, request);
return response;
}
catch (Exception e) {
// rethrow exception so that the caller learns what went wrong
Debug.logError(e, e.getMessage(), module);
throw e;
}
finally {
// close resources
if (in != null) in.close();
if (connection != null) connection.disconnect();
}
}
}