| /******************************************************************************* |
| * 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(); |
| } |
| } |
| } |