/* * Copyright 2013, The Sporting Exchange Limited * * 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 com.betfair.application.util; import org.apache.http.HttpStatus; import org.apache.http.client.methods.HttpGet; import org.apache.http.client.methods.HttpPost; import org.apache.http.client.methods.HttpUriRequest; import org.apache.http.entity.InputStreamEntity; import java.io.ByteArrayInputStream; public class HttpCallable { private String name; private String restURL; private String soapEndpoint; private String rpcEndpoint; private int expectedHTTP; private String jsonRPCCall; private HttpBodyBuilder bodyJSON; private HttpBodyBuilder bodyXML; private HttpBodyBuilder bodySOAP; public HttpCallable(String name, String restURL, String soapEndpoint, int expectedHTTP, HttpBodyBuilder bodySOAP) { this.name = name; this.restURL = restURL; this.soapEndpoint = soapEndpoint; this.expectedHTTP = expectedHTTP; this.bodySOAP = bodySOAP; } public HttpCallable(String name, String url, String soapEndpoint, HttpBodyBuilder bodyJSON, HttpBodyBuilder bodyXML, HttpBodyBuilder bodySOAP){ this(name, url, soapEndpoint, HttpStatus.SC_OK, bodySOAP); this.bodyJSON = bodyJSON; this.bodyXML = bodyXML; } public HttpCallable(String name, String url, String jsonRPCCall, int expectedHTTP){ this(name, null, null, HttpStatus.SC_OK, null); this.rpcEndpoint = url; this.jsonRPCCall = jsonRPCCall; this.expectedHTTP = expectedHTTP; } public HttpUriRequest getMethod(String contentType, Object[] paramValues, int size, HttpCallLogEntry cle) { cle.setMethod(name); cle.setProtocol(contentType); if (contentType.equals("RPC")) { HttpPost pm = new HttpPost(rpcEndpoint); final ByteArrayInputStream inputStream = new ByteArrayInputStream(jsonRPCCall.getBytes()); final InputStreamEntity is = new InputStreamEntity(inputStream,inputStream.available()); pm.addHeader("Content-Type", "application/json"); pm.addHeader("Accept", "application/json"); pm.addHeader("X-ExpectedReturnCode", String.valueOf(expectedHTTP)); pm.setEntity(is); return pm; } else if (contentType.equals("SOAP")) { HttpPost pm = new HttpPost(soapEndpoint); final ByteArrayInputStream inputStream = bodySOAP.buildBodyToBytes(size); final InputStreamEntity is = new InputStreamEntity(inputStream,inputStream.available()); pm.addHeader("Content-Type", "application/soap+xml"); pm.addHeader("X-ExpectedReturnCode", String.valueOf(expectedHTTP)); pm.setEntity(is); return pm; } else { if (bodyJSON != null) { HttpPost pm = new HttpPost(String.format(restURL, paramValues)); InputStreamEntity is; if (contentType.endsWith("json")) { final ByteArrayInputStream inputStream = bodyJSON.buildBody(size); is = new InputStreamEntity(inputStream,inputStream.available()); } else { final ByteArrayInputStream inputStream = bodyXML.buildBody(size); is = new InputStreamEntity(inputStream,inputStream.available()); } pm.addHeader("Content-Type", contentType); pm.addHeader("Accept", contentType); pm.setEntity(is); return pm; } else { HttpGet gm = new HttpGet(String.format(restURL, paramValues)); gm.addHeader("Accept", contentType); return gm; } } } public int expectedResult() { return expectedHTTP; } public String getName() { return name; } }