package us.mn.state.health.lims.dataexchange.common; import java.io.IOException; import java.net.ConnectException; import java.net.SocketTimeoutException; import java.net.UnknownHostException; import java.util.List; import javax.servlet.http.HttpServletResponse; import org.apache.commons.httpclient.ConnectTimeoutException; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpConnectionManager; import org.apache.commons.httpclient.HttpException; import org.apache.commons.httpclient.HttpMethod; import org.apache.commons.httpclient.HttpStatus; import us.mn.state.health.lims.common.log.LogEvent; import us.mn.state.health.lims.common.util.StringUtil; abstract public class HttpSender implements IExternalSender { protected String message; protected String url; private static final int timeout = 10000; protected int returnStatus = HttpStatus.SC_CREATED; String serviceTargetName = ""; List<String> errors; abstract public boolean sendMessage(); @Override public void setTargetName(String name) { serviceTargetName = name != null ? name : ""; } @Override public void setMessage(String message) { this.message = message; } @Override public void setURI(String url) { this.url = url; } @Override public List<String> getErrors() { return errors; } @Override public int getSendResponse() { return returnStatus; } protected void setTimeout(HttpClient httpclient) { HttpConnectionManager connectionManager = httpclient.getHttpConnectionManager(); connectionManager.getParams().setConnectionTimeout(timeout); } protected void setPossibleErrors() { switch (returnStatus) { case HttpStatus.SC_UNAUTHORIZED: { errors.add( StringUtil.getMessageForKey("http.error.authorization") + url); break; } case HttpStatus.SC_INTERNAL_SERVER_ERROR: { errors.add(StringUtil.getMessageForKey("http.error.internal") + url); break; } case HttpStatus.SC_CONFLICT: case HttpStatus.SC_OK: { break; // NO-OP } default: { errors.add(StringUtil.getMessageForKey("http:error.unknown.status") + url ); } } } protected void sendByHttp(HttpClient httpclient, HttpMethod httpPost) { try { try { httpclient.executeMethod(httpPost); returnStatus = httpPost.getStatusCode(); setPossibleErrors(); } catch (SocketTimeoutException e) { returnStatus = HttpServletResponse.SC_REQUEST_TIMEOUT; LogEvent.logError("HttpSender", "sendPutMessage()", e.toString()); } catch (ConnectTimeoutException e) { returnStatus = HttpServletResponse.SC_REQUEST_TIMEOUT; errors.add(e.getMessage() + " " + url); LogEvent.logError("HttpSender", "sendPutMessage()", e.toString()); } catch (HttpException e) { errors.add( StringUtil.getMessageForKey("http.error.unknown") + " " + url ); LogEvent.logError("HttpSender", "sendPutMessage()", e.toString()); } catch (ConnectException e) { returnStatus = HttpServletResponse.SC_BAD_REQUEST; errors.add(StringUtil.getMessageForKey("http.error.noconnection") + " " + url); LogEvent.logError("HttpSender", "sendPutMessage()", e.toString()); }catch (UnknownHostException e) { returnStatus = HttpServletResponse.SC_NOT_FOUND; errors.add(StringUtil.getMessageForKey("http.error.unknownhost") + " " + url); LogEvent.logError("HttpSender", "sendPutMessage()", e.toString()); } catch (IOException e) { errors.add(StringUtil.getMessageForKey("http.error.io" ) + " " + url); LogEvent.logError("HttpSender", "sendPutMessage()", e.toString()); } } finally { httpPost.releaseConnection(); } } }