diff --git a/resources/META-INF/spring/hqapi-context.xml b/resources/META-INF/spring/hqapi-context.xml index 8d5c9119..0b0f6331 100644 --- a/resources/META-INF/spring/hqapi-context.xml +++ b/resources/META-INF/spring/hqapi-context.xml @@ -21,9 +21,6 @@ - - - diff --git a/src/org/hyperic/hq/hqapi1/AgentApi.java b/src/org/hyperic/hq/hqapi1/AgentApi.java index 39a96f61..1220f976 100644 --- a/src/org/hyperic/hq/hqapi1/AgentApi.java +++ b/src/org/hyperic/hq/hqapi1/AgentApi.java @@ -27,15 +27,15 @@ package org.hyperic.hq.hqapi1; +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + import org.hyperic.hq.hqapi1.types.Agent; import org.hyperic.hq.hqapi1.types.AgentResponse; import org.hyperic.hq.hqapi1.types.AgentsResponse; import org.hyperic.hq.hqapi1.types.PingAgentResponse; -import java.io.IOException; -import java.util.HashMap; -import java.util.Map; - /** * The Hyperic HQ Agent API. *

@@ -68,7 +68,8 @@ public AgentResponse getAgent(int id) { Map params = new HashMap(); params.put("id", new String[] { String.valueOf(id) }); - return doGet("agent/get.hqu", params, AgentResponse.class); + return doGet("agent/get.hqu", params, + new XmlResponseHandler(AgentResponse.class)); } /** @@ -90,7 +91,8 @@ public AgentResponse getAgent(String address, int port) Map params = new HashMap(); params.put("address", new String[] { address }); params.put("port", new String[] { String.valueOf(port) }); - return doGet("agent/get.hqu", params, AgentResponse.class); + return doGet("agent/get.hqu", params, + new XmlResponseHandler(AgentResponse.class)); } /** @@ -106,7 +108,7 @@ public AgentsResponse getAgents() throws IOException { return doGet("agent/list.hqu", new HashMap(), - AgentsResponse.class); + new XmlResponseHandler(AgentsResponse.class)); } /** @@ -125,6 +127,7 @@ public PingAgentResponse pingAgent(Agent agent) { Map params = new HashMap(); params.put("id", new String[] { String.valueOf(agent.getId()) }); - return doGet("agent/ping.hqu", params, PingAgentResponse.class); + return doGet("agent/ping.hqu", params, + new XmlResponseHandler(PingAgentResponse.class)); } } diff --git a/src/org/hyperic/hq/hqapi1/AlertApi.java b/src/org/hyperic/hq/hqapi1/AlertApi.java index 9ecdea7c..52a24f21 100644 --- a/src/org/hyperic/hq/hqapi1/AlertApi.java +++ b/src/org/hyperic/hq/hqapi1/AlertApi.java @@ -27,6 +27,7 @@ package org.hyperic.hq.hqapi1; +import org.hyperic.hq.hqapi1.types.AgentResponse; import org.hyperic.hq.hqapi1.types.Resource; import org.hyperic.hq.hqapi1.types.StatusResponse; import org.hyperic.hq.hqapi1.types.AlertsResponse; @@ -106,7 +107,8 @@ public AlertsResponse findAlerts(long begin, long end, int count, params.put("notFixed", new String[] { Boolean.toString(notFixed)}); } - return doGet("alert/find.hqu", params, AlertsResponse.class); + return doGet("alert/find.hqu", params, + new XmlResponseHandler(AlertsResponse.class)); } /** @@ -146,7 +148,8 @@ public AlertsResponse findAlerts(Resource r, long begin, long end, params.put("notFixed", new String[] { Boolean.toString(notFixed)}); } - return doGet("alert/findByResource.hqu", params, AlertsResponse.class); + return doGet("alert/findByResource.hqu", params, + new XmlResponseHandler(AlertsResponse.class)); } /** @@ -229,7 +232,8 @@ public AlertsResponse fixAlerts(Integer[] alertIds, String reason) params.put("id", ids); params.put("reason", new String[] { reason }); - return doGet("alert/fix.hqu", params, AlertsResponse.class); + return doGet("alert/fix.hqu", params, + new XmlResponseHandler(AlertsResponse.class)); } /** @@ -284,7 +288,8 @@ public AlertsResponse ackAlerts(Integer[] alertIds, String reason, Long pause) params.put("reason", new String[] { reason }); params.put("pause", new String[] { Long.toString(pause)}); - return doGet("alert/ack.hqu", params, AlertsResponse.class); + return doGet("alert/ack.hqu", params, + new XmlResponseHandler(AlertsResponse.class)); } /** @@ -323,6 +328,7 @@ public StatusResponse delete(Integer[] alertIds) } params.put("id", ids); - return doGet("alert/delete.hqu", params, StatusResponse.class); + return doGet("alert/delete.hqu", params, + new XmlResponseHandler(StatusResponse.class)); } } diff --git a/src/org/hyperic/hq/hqapi1/AlertDefinitionApi.java b/src/org/hyperic/hq/hqapi1/AlertDefinitionApi.java index 19a6e628..6f01015e 100644 --- a/src/org/hyperic/hq/hqapi1/AlertDefinitionApi.java +++ b/src/org/hyperic/hq/hqapi1/AlertDefinitionApi.java @@ -28,6 +28,7 @@ package org.hyperic.hq.hqapi1; import org.hyperic.hq.hqapi1.types.AlertDefinitionsResponse; +import org.hyperic.hq.hqapi1.types.AlertsResponse; import org.hyperic.hq.hqapi1.types.StatusResponse; import org.hyperic.hq.hqapi1.types.AlertDefinition; import org.hyperic.hq.hqapi1.types.AlertDefinitionResponse; @@ -119,7 +120,7 @@ public AlertDefinitionsResponse getAlertDefinitions(boolean excludeTypeBased, } return doGet("alertdefinition/listDefinitions.hqu", params, - AlertDefinitionsResponse.class); + new XmlResponseHandler(AlertDefinitionsResponse.class)); } /** @@ -158,7 +159,7 @@ public AlertDefinitionsResponse getAlertDefinitions(AlertDefinition parent) params.put("parentId", new String[] { Integer.toString(parent.getId()) }); return doGet("alertdefinition/listDefinitions.hqu", params, - AlertDefinitionsResponse.class); + new XmlResponseHandler(AlertDefinitionsResponse.class)); } /** @@ -178,7 +179,7 @@ public AlertDefinitionsResponse getTypeAlertDefinitions(boolean excludeIds) params.put("excludeIds", new String[] { Boolean.toString(excludeIds)}); return doGet("alertdefinition/listTypeDefinitions.hqu", params, - AlertDefinitionsResponse.class); + new XmlResponseHandler(AlertDefinitionsResponse.class)); } /** @@ -198,7 +199,8 @@ public StatusResponse deleteAlertDefinition(int id) params.put("id", new String[] { Integer.toString(id) }); - return doGet("alertdefinition/delete.hqu", params, StatusResponse.class); + return doGet("alertdefinition/delete.hqu", params, + new XmlResponseHandler(StatusResponse.class)); } /** @@ -218,6 +220,6 @@ public AlertDefinitionsResponse syncAlertDefinitions(List defin request.getAlertDefinition().addAll(definitions); return doPost("alertdefinition/sync.hqu", request, - AlertDefinitionsResponse.class); + new XmlResponseHandler(AlertDefinitionsResponse.class)); } } diff --git a/src/org/hyperic/hq/hqapi1/ApplicationApi.java b/src/org/hyperic/hq/hqapi1/ApplicationApi.java index acf14bea..03bf6911 100644 --- a/src/org/hyperic/hq/hqapi1/ApplicationApi.java +++ b/src/org/hyperic/hq/hqapi1/ApplicationApi.java @@ -35,7 +35,8 @@ public ApplicationsResponse listApplications() throws IOException { Map params = new HashMap(); - return doGet("application/list.hqu", params, ApplicationsResponse.class); + return doGet("application/list.hqu", params, + new XmlResponseHandler(ApplicationsResponse.class)); } /** @@ -55,7 +56,7 @@ public ApplicationResponse createApplication(Application app) ApplicationRequest appRequest = new ApplicationRequest(); appRequest.setApplication(app); return doPost("application/create.hqu", appRequest, - ApplicationResponse.class); + new XmlResponseHandler(ApplicationResponse.class)); } /** @@ -75,7 +76,7 @@ public ApplicationResponse updateApplication(Application app) ApplicationRequest appRequest = new ApplicationRequest(); appRequest.setApplication(app); return doPost("application/update.hqu", appRequest, - ApplicationResponse.class); + new XmlResponseHandler(ApplicationResponse.class)); } /** @@ -93,7 +94,8 @@ public StatusResponse deleteApplication(int id) { Map params = new HashMap(); params.put("id", new String[] { Integer.toString(id)}); - return doGet("application/delete.hqu", params, StatusResponse.class); + return doGet("application/delete.hqu", params, + new XmlResponseHandler(StatusResponse.class)); } /** @@ -112,6 +114,7 @@ public ApplicationsResponse syncApplications(List applications) ApplicationsRequest applicationsRequest = new ApplicationsRequest(); applicationsRequest.getApplication().addAll(applications); - return doPost("application/sync.hqu", applicationsRequest, ApplicationsResponse.class); + return doPost("application/sync.hqu", applicationsRequest, + new XmlResponseHandler(ApplicationsResponse.class)); } } diff --git a/src/org/hyperic/hq/hqapi1/AutodiscoveryApi.java b/src/org/hyperic/hq/hqapi1/AutodiscoveryApi.java index d1c26dea..4926d2b2 100644 --- a/src/org/hyperic/hq/hqapi1/AutodiscoveryApi.java +++ b/src/org/hyperic/hq/hqapi1/AutodiscoveryApi.java @@ -27,6 +27,7 @@ package org.hyperic.hq.hqapi1; +import org.hyperic.hq.hqapi1.types.ApplicationsResponse; import org.hyperic.hq.hqapi1.types.QueueResponse; import org.hyperic.hq.hqapi1.types.StatusResponse; @@ -63,7 +64,7 @@ public QueueResponse getQueue() throws IOException { return doGet("autodiscovery/getQueue.hqu", new HashMap(), - QueueResponse.class); + new XmlResponseHandler(QueueResponse.class)); } /** @@ -84,6 +85,7 @@ public StatusResponse approve(int id) params.put("id", new String[] { String.valueOf(id) }); - return doGet("autodiscovery/approve.hqu", params, StatusResponse.class); + return doGet("autodiscovery/approve.hqu", params, + new XmlResponseHandler(StatusResponse.class)); } } diff --git a/src/org/hyperic/hq/hqapi1/BaseApi.java b/src/org/hyperic/hq/hqapi1/BaseApi.java index 869304ca..ae9459ee 100644 --- a/src/org/hyperic/hq/hqapi1/BaseApi.java +++ b/src/org/hyperic/hq/hqapi1/BaseApi.java @@ -49,10 +49,10 @@ abstract class BaseApi { * parameter may have multiple values. */ T doGet(String action, Map params, - Class resultClass) + ResponseHandler responseHandler) throws IOException { - return _conn.doGet(BASE_URI + action, params, resultClass); + return _conn.doGet(BASE_URI + action, params, responseHandler); } /** @@ -63,9 +63,9 @@ T doGet(String action, Map params, * like: '/hqu/hqapi1/user/syncUsers.hqu' * ex: 'resource/syncResources.hqu' */ - T doPost(String action, Object o, Class resultClass) + T doPost(String action, Object o, ResponseHandler responseHandler) throws IOException { - return _conn.doPost(BASE_URI + action, o, resultClass); + return _conn.doPost(BASE_URI + action, o, responseHandler); } } diff --git a/src/org/hyperic/hq/hqapi1/Connection.java b/src/org/hyperic/hq/hqapi1/Connection.java index 4d3be228..153c529b 100644 --- a/src/org/hyperic/hq/hqapi1/Connection.java +++ b/src/org/hyperic/hq/hqapi1/Connection.java @@ -6,7 +6,7 @@ public interface Connection { - T doGet(String path, Map params, File targetFile, Class resultClass) + T doGet(String path, Map params, File targetFile, ResponseHandler responseHandler) throws IOException; /** @@ -24,7 +24,7 @@ T doGet(String path, Map params, File targetFile, Class * @throws IOException * If a network error occurs during the request. */ - T doGet(String path, Map params, Class resultClass) + T doGet(String path, Map params, ResponseHandler responseHandler) throws IOException; /** @@ -45,7 +45,7 @@ T doGet(String path, Map params, Class resultClass) * @throws IOException * If a network error occurs during the request. */ - T doPost(String path, Map params, Class resultClass) + T doPost(String path, Map params, ResponseHandler responseHandler) throws IOException; /** @@ -65,7 +65,7 @@ T doPost(String path, Map params, Class resultClass) * If a network error occurs during the request. */ T doPost(String path, Map params, File file, - Class resultClass) throws IOException; + ResponseHandler responseHandler) throws IOException; /** * Issue a POST against the API. @@ -82,6 +82,6 @@ T doPost(String path, Map params, File file, * @throws IOException * If a network error occurs during the request. */ - T doPost(String path, Object o, Class resultClass) + T doPost(String path, Object o, ResponseHandler responseHandler) throws IOException; } diff --git a/src/org/hyperic/hq/hqapi1/ControlApi.java b/src/org/hyperic/hq/hqapi1/ControlApi.java index ce85bc9d..f46d9133 100644 --- a/src/org/hyperic/hq/hqapi1/ControlApi.java +++ b/src/org/hyperic/hq/hqapi1/ControlApi.java @@ -29,6 +29,7 @@ import org.hyperic.hq.hqapi1.types.ControlHistoryResponse; import org.hyperic.hq.hqapi1.types.Group; +import org.hyperic.hq.hqapi1.types.QueueResponse; import org.hyperic.hq.hqapi1.types.Resource; import org.hyperic.hq.hqapi1.types.ControlActionResponse; import org.hyperic.hq.hqapi1.types.StatusResponse; @@ -92,7 +93,8 @@ private ControlHistoryResponse getHistory(Integer resourceId) Map params = new HashMap(); params.put("resourceId", new String[] { Integer.toString(resourceId)}); - return doGet("control/history.hqu", params, ControlHistoryResponse.class); + return doGet("control/history.hqu", params, + new XmlResponseHandler(ControlHistoryResponse.class)); } /** @@ -135,7 +137,8 @@ private ControlActionResponse getActions(Integer resourceId) Map params = new HashMap(); params.put("resourceId", new String[] { Integer.toString(resourceId)}); - return doGet("control/actions.hqu", params, ControlActionResponse.class); + return doGet("control/actions.hqu", params, + new XmlResponseHandler(ControlActionResponse.class)); } /** @@ -185,6 +188,7 @@ private StatusResponse executeAction(Integer resourceId, String action, params.put("action", new String[] { action }); params.put("arguments", arguments); - return doGet("control/execute.hqu", params, StatusResponse.class); + return doGet("control/execute.hqu", params, + new XmlResponseHandler(StatusResponse.class)); } } diff --git a/src/org/hyperic/hq/hqapi1/EscalationApi.java b/src/org/hyperic/hq/hqapi1/EscalationApi.java index b895cea0..27ae00ca 100644 --- a/src/org/hyperic/hq/hqapi1/EscalationApi.java +++ b/src/org/hyperic/hq/hqapi1/EscalationApi.java @@ -31,6 +31,7 @@ import org.hyperic.hq.hqapi1.types.EscalationResponse; import org.hyperic.hq.hqapi1.types.EscalationsRequest; import org.hyperic.hq.hqapi1.types.EscalationsResponse; +import org.hyperic.hq.hqapi1.types.QueueResponse; import org.hyperic.hq.hqapi1.types.StatusResponse; import java.io.IOException; @@ -68,7 +69,8 @@ public EscalationResponse getEscalation(int id) throws IOException { Map params = new HashMap(); params.put("id", new String[] { Integer.toString(id) }); - return doGet("escalation/get.hqu", params, EscalationResponse.class); + return doGet("escalation/get.hqu", params, + new XmlResponseHandler(EscalationResponse.class)); } /** @@ -87,7 +89,7 @@ public EscalationResponse getEscalation(String name) Map params = new HashMap(); params.put("name", new String[] { name }); return doGet("escalation/get.hqu", - params, EscalationResponse.class); + params, new XmlResponseHandler(EscalationResponse.class)); } /** @@ -106,7 +108,7 @@ public EscalationResponse createEscalation(Escalation esc) EscalationsRequest req = new EscalationsRequest(); req.getEscalation().add(esc); return doPost("escalation/create.hqu", req, - EscalationResponse.class); + new XmlResponseHandler(EscalationResponse.class)); } /** @@ -124,7 +126,7 @@ public EscalationResponse updateEscalation(Escalation esc) EscalationsRequest req = new EscalationsRequest(); req.getEscalation().add(esc); return doPost("escalation/update.hqu", - req, EscalationResponse.class); + req, new XmlResponseHandler(EscalationResponse.class)); } /** @@ -139,7 +141,7 @@ public EscalationResponse updateEscalation(Escalation esc) public EscalationsResponse getEscalations() throws IOException { return doGet("escalation/list.hqu", new HashMap(), - EscalationsResponse.class); + new XmlResponseHandler(EscalationsResponse.class)); } /** @@ -156,7 +158,8 @@ public StatusResponse syncEscalations(Collection escs) throws IOException { EscalationsRequest req = new EscalationsRequest(); req.getEscalation().addAll(escs); - return doPost("escalation/sync.hqu", req, StatusResponse.class); + return doPost("escalation/sync.hqu", req, + new XmlResponseHandler(StatusResponse.class)); } /** @@ -174,6 +177,6 @@ public StatusResponse deleteEscalation(int id) Map params = new HashMap(); params.put("id", new String[] { Integer.toString(id) }); return doGet("escalation/delete.hqu", - params, StatusResponse.class); + params, new XmlResponseHandler(StatusResponse.class)); } } diff --git a/src/org/hyperic/hq/hqapi1/EventApi.java b/src/org/hyperic/hq/hqapi1/EventApi.java index 759cb30b..891b9dc8 100644 --- a/src/org/hyperic/hq/hqapi1/EventApi.java +++ b/src/org/hyperic/hq/hqapi1/EventApi.java @@ -1,5 +1,6 @@ package org.hyperic.hq.hqapi1; +import org.hyperic.hq.hqapi1.types.EscalationResponse; import org.hyperic.hq.hqapi1.types.EventsResponse; import org.hyperic.hq.hqapi1.types.Resource; @@ -126,7 +127,8 @@ public EventsResponse findEvents(Resource r, long begin, long end) params.put("end", new String[] { Long.toString(end)}); params.put("resourceId", new String[] { Integer.toString(r.getId())}); - return doGet("event/findByResource.hqu", params, EventsResponse.class); + return doGet("event/findByResource.hqu", params, + new XmlResponseHandler(EventsResponse.class)); } /** @@ -156,6 +158,7 @@ public EventsResponse findEvents(long begin, long end, params.put("status", new String[] { status != null ? status.getStatus() : null }); params.put("count", new String[] { Integer.toString(count)}); - return doGet("event/find.hqu", params, EventsResponse.class); + return doGet("event/find.hqu", params, + new XmlResponseHandler(EventsResponse.class)); } } diff --git a/src/org/hyperic/hq/hqapi1/FileResponseHandler.java b/src/org/hyperic/hq/hqapi1/FileResponseHandler.java index 8a27936f..ac738b83 100644 --- a/src/org/hyperic/hq/hqapi1/FileResponseHandler.java +++ b/src/org/hyperic/hq/hqapi1/FileResponseHandler.java @@ -22,32 +22,34 @@ * @author Jennifer Hickey * */ -public class FileResponseHandler implements ResponseHandler { +public class FileResponseHandler implements ResponseHandler { private static Log _log = LogFactory.getLog(FileResponseHandler.class); private final File targetFile; + private Class clazz; + /** * * @param targetFile * The local file to which the contents of the method response * body should be written */ - public FileResponseHandler(File targetFile) { + public FileResponseHandler(File targetFile, Class clazz) { this.targetFile = targetFile; + this.clazz = clazz; } - public T getErrorResponse(Class res, ServiceError error) + public T getErrorResponse(ServiceError error) throws IOException { try { - T ret = res.newInstance(); + T ret = clazz.newInstance(); - Method setResponse = res.getMethod("setStatus", - ResponseStatus.class); + Method setResponse = clazz.getMethod("setStatus", ResponseStatus.class); setResponse.invoke(ret, ResponseStatus.FAILURE); - Method setError = res.getMethod("setError", ServiceError.class); + Method setError = clazz.getMethod("setError", ServiceError.class); setError.invoke(ret, error); return ret; @@ -62,12 +64,11 @@ public T getErrorResponse(Class res, ServiceError error) } } - private T getSuccessResponse(Class res) throws IOException { + private T getSuccessResponse() throws IOException { try { - T ret = res.newInstance(); + T ret = clazz.newInstance(); - Method setResponse = res.getMethod("setStatus", - ResponseStatus.class); + Method setResponse = clazz.getMethod("setStatus", ResponseStatus.class); setResponse.invoke(ret, ResponseStatus.SUCCESS); return ret; } catch (Exception e) { @@ -81,28 +82,27 @@ private T getSuccessResponse(Class res) throws IOException { } } - public T handleResponse(int responseCode, HttpMethodBase method, - Class resultClass) throws IOException { + public T handleResponse(int responseCode, HttpMethodBase method) + throws IOException { ServiceError error; switch (responseCode) { case 200: FileOutputStream fileOutputStream = null; InputStream in = method.getResponseBodyAsStream(); try { - fileOutputStream = new FileOutputStream(targetFile - .getAbsolutePath()); + fileOutputStream = new FileOutputStream(targetFile.getAbsolutePath()); final byte[] buf = new byte[1024]; int len; while ((len = in.read(buf)) > 0) { fileOutputStream.write(buf, 0, len); } - return getSuccessResponse(resultClass); + return getSuccessResponse(); } catch (Exception e) { error = new ServiceError(); error.setErrorCode("UnexpectedError"); error.setReasonText("Unable to deserialize result"); _log.warn("Unable to deserialize result", e); - return getErrorResponse(resultClass, error); + return getErrorResponse(error); } finally { if (fileOutputStream != null) { try { @@ -119,7 +119,7 @@ public T handleResponse(int responseCode, HttpMethodBase method, error.setErrorCode("LoginFailure"); error.setReasonText("The given username and password could " + "not be validated"); - return getErrorResponse(resultClass, error); + return getErrorResponse(error); default: error = new ServiceError(); error.setErrorCode("Unexpected Error"); @@ -128,7 +128,7 @@ public T handleResponse(int responseCode, HttpMethodBase method, } else { error.setReasonText("An unexpected error occured"); } - return getErrorResponse(resultClass, error); + return getErrorResponse(error); } } diff --git a/src/org/hyperic/hq/hqapi1/GroupApi.java b/src/org/hyperic/hq/hqapi1/GroupApi.java index e2d2c9d8..102352d6 100644 --- a/src/org/hyperic/hq/hqapi1/GroupApi.java +++ b/src/org/hyperic/hq/hqapi1/GroupApi.java @@ -27,6 +27,7 @@ package org.hyperic.hq.hqapi1; +import org.hyperic.hq.hqapi1.types.EscalationResponse; import org.hyperic.hq.hqapi1.types.Group; import org.hyperic.hq.hqapi1.types.GroupResponse; import org.hyperic.hq.hqapi1.types.GroupsRequest; @@ -74,7 +75,8 @@ public GroupResponse getGroup(String name) { Map params = new HashMap(); params.put("name", new String[] { name }); - return doGet("group/get.hqu", params, GroupResponse.class); + return doGet("group/get.hqu", params, + new XmlResponseHandler(GroupResponse.class)); } /** @@ -93,7 +95,8 @@ public GroupResponse getGroup(int id) { Map params = new HashMap(); params.put("id", new String[] { Integer.toString(id) }); - return doGet("group/get.hqu", params, GroupResponse.class); + return doGet("group/get.hqu", params, + new XmlResponseHandler(GroupResponse.class)); } private GroupResponse syncSingleGroup(Group group) @@ -158,7 +161,8 @@ public StatusResponse deleteGroup(int id) { Map params = new HashMap(); params.put("id", new String[] { Integer.toString(id) }); - return doGet("group/delete.hqu", params, StatusResponse.class); + return doGet("group/delete.hqu", params, + new XmlResponseHandler(StatusResponse.class)); } /** @@ -173,7 +177,7 @@ public GroupsResponse getGroups() throws IOException { return doGet("group/list.hqu", new HashMap(), - GroupsResponse.class); + new XmlResponseHandler(GroupsResponse.class)); } /** @@ -191,7 +195,8 @@ public GroupsResponse getCompatibleGroups() { Map params = new HashMap(); params.put("compatible", new String[] { Boolean.toString(true) }); - return doGet("group/list.hqu", params, GroupsResponse.class); + return doGet("group/list.hqu", params, + new XmlResponseHandler(GroupsResponse.class)); } /** @@ -209,7 +214,8 @@ public GroupsResponse getMixedGroups() { Map params = new HashMap(); params.put("compatible", new String[] { Boolean.toString(false) }); - return doGet("group/list.hqu", params, GroupsResponse.class); + return doGet("group/list.hqu", params, + new XmlResponseHandler(GroupsResponse.class)); } /** @@ -257,6 +263,7 @@ public GroupsResponse syncGroups(List groups) GroupsRequest groupRequest = new GroupsRequest(); groupRequest.getGroup().addAll(groups); - return doPost("group/sync.hqu", groupRequest, GroupsResponse.class); + return doPost("group/sync.hqu", groupRequest, + new XmlResponseHandler(GroupsResponse.class)); } } diff --git a/src/org/hyperic/hq/hqapi1/HQApi.java b/src/org/hyperic/hq/hqapi1/HQApi.java index 0090dd9b..705fc5de 100644 --- a/src/org/hyperic/hq/hqapi1/HQApi.java +++ b/src/org/hyperic/hq/hqapi1/HQApi.java @@ -64,7 +64,7 @@ public class HQApi { * @param password The password for the given user. */ public HQApi(String host, int port, boolean isSecure, String user, String password) { - this(new HQConnection(host,port, isSecure,user,password, new XmlResponseHandler())); + this(new HQConnection(host,port, isSecure,user,password)); } diff --git a/src/org/hyperic/hq/hqapi1/HQConnection.java b/src/org/hyperic/hq/hqapi1/HQConnection.java index 5daa68d8..e52f3300 100644 --- a/src/org/hyperic/hq/hqapi1/HQConnection.java +++ b/src/org/hyperic/hq/hqapi1/HQConnection.java @@ -58,14 +58,11 @@ class HQConnection implements Connection { private String _user; private String _password; - private final ResponseHandler xmlResponseHandler; - HQConnection(String host, int port, boolean isSecure, String user, - String password, - ResponseHandler xmlResponseHandler) + String password) { _host = host; _port = port; @@ -77,7 +74,6 @@ class HQConnection implements Connection { // To allow for self signed certificates UntrustedSSLProtocolSocketFactory.register(); } - this.xmlResponseHandler = xmlResponseHandler; } private String urlEncode(String s) throws IOException { @@ -95,10 +91,10 @@ private String urlEncode(String s) throws IOException { * the type given in the resultClass argument. * @throws IOException If a network error occurs during the request. */ - public T doGet(String path, Map params, Class resultClass) throws IOException { + public T doGet(String path, Map params, ResponseHandler responseHandler) throws IOException { GetMethod method = new GetMethod(); method.setDoAuthentication(true); - return runMethod(method, buildUri(path, params), resultClass, xmlResponseHandler); + return runMethod(method, buildUri(path, params), responseHandler); } private String buildUri(String path, Map params) throws IOException { @@ -123,17 +119,17 @@ private String buildUri(String path, Map params) throws IOExce return uri.toString(); } - public T doGet(String path, Map params, File targetFile, Class resultClass) throws IOException + public T doGet(String path, Map params, File targetFile, ResponseHandler responseHandler) throws IOException { GetMethod method = new GetMethod(); method.setDoAuthentication(true); - return runMethod(method, buildUri(path, params), resultClass, new FileResponseHandler(targetFile)); + return runMethod(method, buildUri(path, params), responseHandler); } - public T doPost(String path, Map params, Class resultClass) throws IOException { + public T doPost(String path, Map params, ResponseHandler responseHandler) throws IOException { PostMethod method = new PostMethod(); method.setDoAuthentication(true); - return runMethod(method, buildUri(path, params), resultClass, xmlResponseHandler); + return runMethod(method, buildUri(path, params), responseHandler); } /** @@ -153,7 +149,7 @@ public T doPost(String path, Map params, Class resultCl * If a network error occurs during the request. */ public T doPost(String path, Map params, File file, - Class resultClass) throws IOException { + ResponseHandler responseHandler) throws IOException { PostMethod method = new PostMethod(); method.setDoAuthentication(true); final List parts = new ArrayList(); @@ -165,7 +161,7 @@ public T doPost(String path, Map params, File file, } method.setRequestEntity(new MultipartRequestEntity(parts .toArray(new Part[parts.size()]), method.getParams())); - return runMethod(method, path, resultClass, xmlResponseHandler); + return runMethod(method, path, responseHandler); } /** @@ -179,7 +175,7 @@ public T doPost(String path, Map params, File file, * the type given in the resultClass argument. * @throws IOException If a network error occurs during the request. */ - public T doPost(String path, Object o, Class resultClass) throws IOException { + public T doPost(String path, Object o, ResponseHandler responseHandler) throws IOException { PostMethod method = new PostMethod(); method.setDoAuthentication(true); @@ -193,22 +189,23 @@ public T doPost(String path, Object o, Class resultClass) throws IOExcept if (_log.isDebugEnabled()) { _log.debug("Unable to serialize response", e); } - return xmlResponseHandler.getErrorResponse(resultClass, error); + return responseHandler.getErrorResponse(error); } Part[] parts = { new StringPart("postdata", bos.toString()) }; method.setRequestEntity(new MultipartRequestEntity(parts, method.getParams())); - return runMethod(method, path, resultClass, xmlResponseHandler); + return runMethod(method, path, responseHandler); } - private T runMethod(HttpMethodBase method, String uri, Class resultClass, ResponseHandler responseHandler) throws IOException + private T runMethod(HttpMethodBase method, String uri, ResponseHandler responseHandler) throws IOException { String protocol = _isSecure ? "https" : "http"; ServiceError error; URL url = new URL(protocol, _host, _port, uri); method.setURI(new URI(url.toString(), true)); + _log.debug("Setting URI: " + url.toString()); try { HttpClient client = new HttpClient(); @@ -218,14 +215,14 @@ private T runMethod(HttpMethodBase method, String uri, Class resultClass, error = new ServiceError(); error.setErrorCode("LoginFailure"); error.setReasonText("User name cannot be null or empty"); - return responseHandler.getErrorResponse(resultClass, error); + return responseHandler.getErrorResponse(error); } if (_password == null || _password.length() == 0) { error = new ServiceError(); error.setErrorCode("LoginFailure"); error.setReasonText("Password cannot be null or empty"); - return responseHandler.getErrorResponse(resultClass, error); + return responseHandler.getErrorResponse(error); } // Set Basic auth creds @@ -237,7 +234,7 @@ private T runMethod(HttpMethodBase method, String uri, Class resultClass, DefaultHttpMethodRetryHandler retryhandler = new DefaultHttpMethodRetryHandler(0, true); client.getParams().setParameter(HttpMethodParams.RETRY_HANDLER, retryhandler); int responseCode = client.executeMethod(method); - return responseHandler.handleResponse(responseCode, method, resultClass); + return responseHandler.handleResponse(responseCode, method); } catch (SocketException e) { throw new HttpException("Error issuing request", e); } finally { diff --git a/src/org/hyperic/hq/hqapi1/MaintenanceApi.java b/src/org/hyperic/hq/hqapi1/MaintenanceApi.java index 22f3aaa6..c1e3de11 100644 --- a/src/org/hyperic/hq/hqapi1/MaintenanceApi.java +++ b/src/org/hyperic/hq/hqapi1/MaintenanceApi.java @@ -76,7 +76,7 @@ public MaintenanceResponse schedule(int groupId, long start, long end) params.put("start", new String[] { Long.toString(start) }); params.put("end", new String[] { Long.toString(end) }); return doGet("maintenance/schedule.hqu", params, - MaintenanceResponse.class); + new XmlResponseHandler(MaintenanceResponse.class)); } /** @@ -93,7 +93,7 @@ public StatusResponse unschedule(int groupId) Map params = new HashMap(); params.put("groupId", new String[] { Integer.toString(groupId) }); return doGet("maintenance/unschedule.hqu", params, - StatusResponse.class); + new XmlResponseHandler(StatusResponse.class)); } /** @@ -112,6 +112,6 @@ public MaintenanceResponse get(int groupId) Map params = new HashMap(); params.put("groupId", new String[] { Integer.toString(groupId) }); return doGet("maintenance/get.hqu", params, - MaintenanceResponse.class); + new XmlResponseHandler(MaintenanceResponse.class)); } } \ No newline at end of file diff --git a/src/org/hyperic/hq/hqapi1/MetricApi.java b/src/org/hyperic/hq/hqapi1/MetricApi.java index 9a3a9819..3776460c 100644 --- a/src/org/hyperic/hq/hqapi1/MetricApi.java +++ b/src/org/hyperic/hq/hqapi1/MetricApi.java @@ -27,6 +27,7 @@ package org.hyperic.hq.hqapi1; +import org.hyperic.hq.hqapi1.types.GroupResponse; import org.hyperic.hq.hqapi1.types.Metric; import org.hyperic.hq.hqapi1.types.MetricDataResponse; import org.hyperic.hq.hqapi1.types.MetricResponse; @@ -85,7 +86,7 @@ public MetricsResponse getMetrics(Resource resource) Map params = new HashMap(); params.put("resourceId", new String[] { Integer.toString(resource.getId()) }); return doGet("metric/getMetrics.hqu", params, - MetricsResponse.class); + new XmlResponseHandler(MetricsResponse.class)); } /** @@ -108,7 +109,7 @@ public MetricsResponse getEnabledMetrics(Resource resource) params.put("resourceId", new String[] { Integer.toString(resource.getId()) }); params.put("enabled", new String[] { Boolean.toString(true) }); return doGet("metric/getMetrics.hqu", params, - MetricsResponse.class); + new XmlResponseHandler(MetricsResponse.class)); } /** @@ -131,7 +132,7 @@ public MetricsResponse getMetrics(Resource resource, boolean enabled) params.put("resourceId", new String[] { Integer.toString(resource.getId()) }); params.put("enabled", new String[] { Boolean.toString(enabled) }); return doGet("metric/getMetrics.hqu", params, - MetricsResponse.class); + new XmlResponseHandler(MetricsResponse.class)); } /** @@ -152,7 +153,7 @@ public MetricResponse getMetric(int id) Map params = new HashMap(); params.put("id", new String[] { Integer.toString(id) }); return doGet("metric/getMetric.hqu", params, - MetricResponse.class); + new XmlResponseHandler(MetricResponse.class)); } /** @@ -171,7 +172,7 @@ public StatusResponse syncMetrics(List metrics) MetricsRequest syncRequest = new MetricsRequest(); syncRequest.getMetric().addAll(metrics); return doPost("metric/syncMetrics.hqu", syncRequest, - StatusResponse.class); + new XmlResponseHandler(StatusResponse.class)); } /** @@ -192,7 +193,7 @@ public MetricTemplateResponse getMetricTemplate(int id) Map params = new HashMap(); params.put("id", new String[] { Integer.toString(id) }); return doGet("metric/getMetricTemplate.hqu", params, - MetricTemplateResponse.class); + new XmlResponseHandler(MetricTemplateResponse.class)); } /** @@ -213,7 +214,7 @@ public MetricTemplatesResponse getMetricTemplates(ResourcePrototype prototype) Map params = new HashMap(); params.put("prototype", new String[] { prototype.getName() }); return doGet("metric/getTemplates.hqu", params, - MetricTemplatesResponse.class); + new XmlResponseHandler(MetricTemplatesResponse.class)); } /** @@ -232,7 +233,7 @@ public StatusResponse syncMetricTemplates(List templates) MetricTemplatesRequest syncRequest = new MetricTemplatesRequest(); syncRequest.getMetricTemplate().addAll(templates); return doPost("metric/syncTemplates.hqu", syncRequest, - StatusResponse.class); + new XmlResponseHandler(StatusResponse.class)); } /** @@ -258,7 +259,8 @@ public MetricDataResponse getMetricData(int metricId, long start, long end) params.put("start", new String[] { Long.toString(start) }); params.put("end", new String[] { Long.toString(end) }); - return doGet("metric/getData.hqu", params, MetricDataResponse.class); + return doGet("metric/getData.hqu", params, + new XmlResponseHandler(MetricDataResponse.class)); } /** @@ -291,7 +293,7 @@ public MetricsDataResponse getMetricData(int groupId, int templateId, params.put("end", new String[] { Long.toString(end) }); return doGet("metric/getGroupData.hqu", params, - MetricsDataResponse.class); + new XmlResponseHandler(MetricsDataResponse.class)); } /** @@ -330,7 +332,7 @@ public MetricsDataResponse getMetricData(int[] resourceIds, int templateId, params.put("end", new String[] { Long.toString(end) }); return doGet("metric/getResourceData.hqu", params, - MetricsDataResponse.class); + new XmlResponseHandler(MetricsDataResponse.class)); } // Helper function to unroll a resource and it's children into a single list. diff --git a/src/org/hyperic/hq/hqapi1/MetricDataApi.java b/src/org/hyperic/hq/hqapi1/MetricDataApi.java index 29531873..70380a82 100644 --- a/src/org/hyperic/hq/hqapi1/MetricDataApi.java +++ b/src/org/hyperic/hq/hqapi1/MetricDataApi.java @@ -3,6 +3,7 @@ import org.hyperic.hq.hqapi1.types.DataPoint; import org.hyperic.hq.hqapi1.types.MetricDataResponse; import org.hyperic.hq.hqapi1.types.DataPointsRequest; +import org.hyperic.hq.hqapi1.types.MetricsResponse; import org.hyperic.hq.hqapi1.types.StatusResponse; import org.hyperic.hq.hqapi1.types.LastMetricsDataResponse; import org.hyperic.hq.hqapi1.types.LastMetricDataResponse; @@ -51,7 +52,8 @@ public MetricDataResponse getData(Metric metric, long start, long end) params.put("id", new String[] { Integer.toString(metric.getId()) }); params.put("start", new String[] { Long.toString(start)}); params.put("end", new String[] { Long.toString(end)}); - return doGet("metricData/get.hqu", params, MetricDataResponse.class); + return doGet("metricData/get.hqu", params, + new XmlResponseHandler(MetricDataResponse.class)); } /** @@ -72,7 +74,8 @@ public LastMetricDataResponse getData(Metric metric) { Map params = new HashMap(); params.put("id", new String[] { Integer.toString(metric.getId()) }); - return doGet("metricData/getLast.hqu", params, LastMetricDataResponse.class); + return doGet("metricData/getLast.hqu", params, + new XmlResponseHandler(LastMetricDataResponse.class)); } /** @@ -101,7 +104,8 @@ public MetricsDataResponse getData(List metrics, long start, long end) params.put("id", ids); params.put("start", new String[] { Long.toString(start)}); params.put("end", new String[] { Long.toString(end)}); - return doGet("metricData/getMulti.hqu", params, MetricsDataResponse.class); + return doGet("metricData/getMulti.hqu", params, + new XmlResponseHandler(MetricsDataResponse.class)); } /** @@ -127,7 +131,8 @@ public LastMetricsDataResponse getData(List metrics) } params.put("id", ids); - return doGet("metricData/getMultiLast.hqu", params, LastMetricsDataResponse.class); + return doGet("metricData/getMultiLast.hqu", params, + new XmlResponseHandler(LastMetricsDataResponse.class)); } /** @@ -149,6 +154,7 @@ public StatusResponse addData(Metric metric, List data) request.setMetricId(metric.getId()); request.getDataPoint().addAll(data); - return doPost("metricData/put.hqu", request, StatusResponse.class); + return doPost("metricData/put.hqu", request, + new XmlResponseHandler(StatusResponse.class)); } } diff --git a/src/org/hyperic/hq/hqapi1/ResourceApi.java b/src/org/hyperic/hq/hqapi1/ResourceApi.java index 2aa5a138..cf09e018 100644 --- a/src/org/hyperic/hq/hqapi1/ResourceApi.java +++ b/src/org/hyperic/hq/hqapi1/ResourceApi.java @@ -31,6 +31,7 @@ import org.hyperic.hq.hqapi1.types.CreatePlatformRequest; import org.hyperic.hq.hqapi1.types.CreateResourceRequest; import org.hyperic.hq.hqapi1.types.Ip; +import org.hyperic.hq.hqapi1.types.MetricDataResponse; import org.hyperic.hq.hqapi1.types.Resource; import org.hyperic.hq.hqapi1.types.ResourceConfig; import org.hyperic.hq.hqapi1.types.ResourcePrototype; @@ -85,8 +86,8 @@ public ResourcePrototypesResponse getAllResourcePrototypes() throws IOException { return doGet("resource/getResourcePrototypes.hqu", - new HashMap(), - ResourcePrototypesResponse.class); + new HashMap(), + new XmlResponseHandler(ResourcePrototypesResponse.class)); } /** @@ -105,7 +106,7 @@ public ResourcePrototypesResponse getResourcePrototypes() Map params = new HashMap(); params.put("existing", new String[] { Boolean.toString(Boolean.TRUE) }); return doGet("resource/getResourcePrototypes.hqu", params, - ResourcePrototypesResponse.class); + new XmlResponseHandler(ResourcePrototypesResponse.class)); } /** @@ -124,7 +125,7 @@ public ResourcePrototypeResponse getResourcePrototype(String name) Map params = new HashMap(); params.put("name", new String[] { name }); return doGet("resource/getResourcePrototype.hqu", - params, ResourcePrototypeResponse.class); + params, new XmlResponseHandler(ResourcePrototypeResponse.class)); } /** @@ -169,7 +170,7 @@ public ResourceResponse createPlatform(Agent agent, request.getIp().addAll(ips); return doPost("resource/createPlatform.hqu", request, - ResourceResponse.class); + new XmlResponseHandler(ResourceResponse.class)); } private ResourceResponse createResource(ResourcePrototype type, @@ -194,7 +195,7 @@ private ResourceResponse createResource(ResourcePrototype type, request.setPrototype(type); return doPost("resource/createResource.hqu", request, - ResourceResponse.class); + new XmlResponseHandler(ResourceResponse.class)); } /** @@ -268,7 +269,7 @@ public ResourceResponse getResource(int id, boolean verbose, boolean children) params.put("verbose", new String[] { Boolean.toString(verbose) }); params.put("children", new String[] { Boolean.toString(children)}); return doGet("resource/get.hqu", params, - ResourceResponse.class); + new XmlResponseHandler(ResourceResponse.class)); } /** @@ -295,7 +296,7 @@ public ResourceResponse getPlatformResource(String name, boolean verbose, params.put("verbose", new String[] { Boolean.toString(verbose) }); params.put("children", new String[] { Boolean.toString(children)}); return doGet("resource/get.hqu", params, - ResourceResponse.class); + new XmlResponseHandler(ResourceResponse.class)); } /** @@ -324,7 +325,7 @@ public ResourcesResponse getResources(Agent agent, boolean verbose, params.put("verbose", new String[] { Boolean.toString(verbose) }); params.put("children", new String[] { Boolean.toString(children)}); return doGet("resource/find.hqu", params, - ResourcesResponse.class); + new XmlResponseHandler(ResourcesResponse.class)); } /** @@ -352,7 +353,7 @@ public ResourcesResponse getResources(ResourcePrototype pt, boolean verbose, params.put("verbose", new String[] { Boolean.toString(verbose) }); params.put("children", new String[] { Boolean.toString(children)}); return doGet("resource/find.hqu", params, - ResourcesResponse.class); + new XmlResponseHandler(ResourcesResponse.class)); } /** @@ -371,7 +372,8 @@ public StatusResponse updateResource(Resource resource) ResourcesRequest request = new ResourcesRequest(); request.getResource().add(resource); - return doPost("resource/update.hqu", request, StatusResponse.class); + return doPost("resource/update.hqu", request, + new XmlResponseHandler(StatusResponse.class)); } /** @@ -390,7 +392,8 @@ public StatusResponse syncResources(List resources) ResourcesRequest request = new ResourcesRequest(); request.getResource().addAll(resources); - return doPost("resource/sync.hqu", request, StatusResponse.class); + return doPost("resource/sync.hqu", request, + new XmlResponseHandler(StatusResponse.class)); } /** @@ -409,7 +412,8 @@ public StatusResponse deleteResource(int id) { Map params = new HashMap(); params.put("id", new String[] { Integer.toString(id) }); - return doGet("resource/delete.hqu", params, StatusResponse.class); + return doGet("resource/delete.hqu", params, + new XmlResponseHandler(StatusResponse.class)); } /** @@ -429,6 +433,7 @@ public StatusResponse moveResource(Resource target, Resource destination) Map params = new HashMap(); params.put("targetId", new String[] { Integer.toString(target.getId()) }); params.put("destinationId", new String[] { Integer.toString(destination.getId() )}); - return doGet("resource/move.hqu", params, StatusResponse.class); + return doGet("resource/move.hqu", params, + new XmlResponseHandler(StatusResponse.class)); } } diff --git a/src/org/hyperic/hq/hqapi1/ResourceEdgeApi.java b/src/org/hyperic/hq/hqapi1/ResourceEdgeApi.java index c68b7085..e2b31555 100644 --- a/src/org/hyperic/hq/hqapi1/ResourceEdgeApi.java +++ b/src/org/hyperic/hq/hqapi1/ResourceEdgeApi.java @@ -27,6 +27,7 @@ package org.hyperic.hq.hqapi1; +import org.hyperic.hq.hqapi1.types.ResourceResponse; import org.hyperic.hq.hqapi1.types.ResponseStatus; import org.hyperic.hq.hqapi1.types.StatusResponse; import org.hyperic.hq.hqapi1.types.ResourceEdge; @@ -65,7 +66,7 @@ public ResourceEdgesResponse getResourceEdges(String resourceRelation, params.put("id", new String[] { resourceId.toString() }); } return doGet("resource/getResourceEdges.hqu", params, - ResourceEdgesResponse.class); + new XmlResponseHandler(ResourceEdgesResponse.class)); } public ResourcesResponse getParentResourcesByRelation(String resourceRelation, @@ -80,7 +81,7 @@ public ResourcesResponse getParentResourcesByRelation(String resourceRelation, params.put("resourceRelation", new String[] { resourceRelation }); params.put("hasChildren", new String[] { Boolean.valueOf(hasChildren).toString() }); return doGet("resource/getParentResourcesByRelation.hqu", params, - ResourcesResponse.class); + new XmlResponseHandler(ResourcesResponse.class)); } public ResourcesResponse getResourcesByNoRelation(String resourceRelation, @@ -93,7 +94,7 @@ public ResourcesResponse getResourcesByNoRelation(String resourceRelation, params.put("name", new String[] { name }); params.put("resourceRelation", new String[] { resourceRelation }); return doGet("resource/getResourcesByNoRelation.hqu", params, - ResourcesResponse.class); + new XmlResponseHandler(ResourcesResponse.class)); } public StatusResponse syncResourceEdges(List edges) @@ -101,7 +102,8 @@ public StatusResponse syncResourceEdges(List edges) ResourceEdgesRequest request = new ResourceEdgesRequest(); request.getResourceEdge().addAll(edges); - return doPost("resource/syncResourceEdges.hqu", request, StatusResponse.class); + return doPost("resource/syncResourceEdges.hqu", request, + new XmlResponseHandler(StatusResponse.class)); } public StatusResponse createResourceEdges(List edges) @@ -109,7 +111,8 @@ public StatusResponse createResourceEdges(List edges) ResourceEdgesRequest request = new ResourceEdgesRequest(); request.getResourceEdge().addAll(edges); - return doPost("resource/createResourceEdges.hqu", request, StatusResponse.class); + return doPost("resource/createResourceEdges.hqu", request, + new XmlResponseHandler(StatusResponse.class)); } public StatusResponse deleteResourceEdges(List edges) @@ -117,7 +120,8 @@ public StatusResponse deleteResourceEdges(List edges) ResourceEdgesRequest request = new ResourceEdgesRequest(); request.getResourceEdge().addAll(edges); - return doPost("resource/deleteResourceEdges.hqu", request, StatusResponse.class); + return doPost("resource/deleteResourceEdges.hqu", request, + new XmlResponseHandler(StatusResponse.class)); } public StatusResponse deleteResourceEdges(String resourceRelation, int id) @@ -126,6 +130,7 @@ public StatusResponse deleteResourceEdges(String resourceRelation, int id) Map params = new HashMap(); params.put("resourceRelation", new String[] { resourceRelation }); params.put("id", new String[] { Integer.toString(id) }); - return doGet("resource/deleteAllResourceEdges.hqu", params, StatusResponse.class); + return doGet("resource/deleteAllResourceEdges.hqu", params, + new XmlResponseHandler(StatusResponse.class)); } } \ No newline at end of file diff --git a/src/org/hyperic/hq/hqapi1/ResponseHandler.java b/src/org/hyperic/hq/hqapi1/ResponseHandler.java index 827ece79..cdc77c7f 100644 --- a/src/org/hyperic/hq/hqapi1/ResponseHandler.java +++ b/src/org/hyperic/hq/hqapi1/ResponseHandler.java @@ -10,9 +10,10 @@ /** * Handles responses from Web Service calls * @author Jennifer Hickey + * @author Greg Turnquist * */ -public interface ResponseHandler { +public interface ResponseHandler { /** * Generate an response object with the given Error. In some cases the HQ @@ -28,7 +29,7 @@ public interface ResponseHandler { * @throws IOException * If an error occurs generating the error object. */ - T getErrorResponse(Class res, ServiceError error) + T getErrorResponse(ServiceError error) throws IOException; /** * Handles the method response and creates a response object of the given class @@ -39,6 +40,5 @@ T getErrorResponse(Class res, ServiceError error) * @return A response object of the given type * @throws IOException */ - T handleResponse(int responseCode, HttpMethodBase method, - Class resultClass) throws IOException; + T handleResponse(int responseCode, HttpMethodBase method) throws IOException; } diff --git a/src/org/hyperic/hq/hqapi1/RoleApi.java b/src/org/hyperic/hq/hqapi1/RoleApi.java index 82d5fa38..b0871990 100644 --- a/src/org/hyperic/hq/hqapi1/RoleApi.java +++ b/src/org/hyperic/hq/hqapi1/RoleApi.java @@ -68,7 +68,7 @@ public RolesResponse getRoles() throws IOException { return doGet("role/list.hqu", new HashMap(), - RolesResponse.class); + new XmlResponseHandler(RolesResponse.class)); } /** @@ -86,7 +86,8 @@ public RoleResponse getRole(String name) { Map params = new HashMap(); params.put("name", new String[] { name }); - return doGet("role/get.hqu", params, RoleResponse.class); + return doGet("role/get.hqu", params, + new XmlResponseHandler(RoleResponse.class)); } /** @@ -105,7 +106,8 @@ public RoleResponse getRole(int id) { Map params = new HashMap(); params.put("id", new String[] { String.valueOf(id) }); - return doGet("role/get.hqu", params, RoleResponse.class); + return doGet("role/get.hqu", params, + new XmlResponseHandler(RoleResponse.class)); } /** @@ -125,7 +127,8 @@ public RoleResponse createRole(Role role) { RoleRequest request = new RoleRequest(); request.setRole(role); - return doPost("role/create.hqu", request, RoleResponse.class); + return doPost("role/create.hqu", request, + new XmlResponseHandler(RoleResponse.class)); } /** @@ -143,7 +146,8 @@ public StatusResponse deleteRole(int id) { Map params = new HashMap(); params.put("id", new String[] { String.valueOf(id) }); - return doGet("role/delete.hqu", params, StatusResponse.class); + return doGet("role/delete.hqu", params, + new XmlResponseHandler(StatusResponse.class)); } /** @@ -161,7 +165,8 @@ public StatusResponse updateRole(Role role) { RoleRequest request = new RoleRequest(); request.setRole(role); - return doPost("role/update.hqu", request, StatusResponse.class); + return doPost("role/update.hqu", request, + new XmlResponseHandler(StatusResponse.class)); } /** @@ -179,6 +184,7 @@ public StatusResponse syncRoles(List roles) { RolesRequest request = new RolesRequest(); request.getRole().addAll(roles); - return doPost("role/sync.hqu", request, StatusResponse.class); + return doPost("role/sync.hqu", request, + new XmlResponseHandler(StatusResponse.class)); } } diff --git a/src/org/hyperic/hq/hqapi1/ServerConfigApi.java b/src/org/hyperic/hq/hqapi1/ServerConfigApi.java index dc3ac741..18ff9b17 100644 --- a/src/org/hyperic/hq/hqapi1/ServerConfigApi.java +++ b/src/org/hyperic/hq/hqapi1/ServerConfigApi.java @@ -28,7 +28,7 @@ public class ServerConfigApi extends BaseApi { */ public ServerConfigResponse getConfig() throws IOException { return doGet("serverconfig/getConfig.hqu", new HashMap(), - ServerConfigResponse.class); + new XmlResponseHandler(ServerConfigResponse.class)); } /** @@ -45,6 +45,7 @@ public ServerConfigResponse getConfig() throws IOException { public StatusResponse setConfig(List configs) throws IOException { ServerConfigRequest request = new ServerConfigRequest(); request.getServerConfig().addAll(configs); - return doPost("serverConfig/setConfig.hqu", request, StatusResponse.class); + return doPost("serverConfig/setConfig.hqu", request, + new XmlResponseHandler(StatusResponse.class)); } } diff --git a/src/org/hyperic/hq/hqapi1/UserApi.java b/src/org/hyperic/hq/hqapi1/UserApi.java index ea93236a..9728981d 100644 --- a/src/org/hyperic/hq/hqapi1/UserApi.java +++ b/src/org/hyperic/hq/hqapi1/UserApi.java @@ -71,7 +71,8 @@ public UserResponse getUser(String name) { Map params = new HashMap(); params.put("name", new String[] { name }); - return doGet("user/get.hqu", params, UserResponse.class); + return doGet("user/get.hqu", params, + new XmlResponseHandler(UserResponse.class)); } /** @@ -90,7 +91,8 @@ public UserResponse getUser(int id) { Map params = new HashMap(); params.put("id", new String[] { Integer.toString(id) }); - return doGet("user/get.hqu", params, UserResponse.class); + return doGet("user/get.hqu", params, + new XmlResponseHandler(UserResponse.class)); } /** @@ -105,7 +107,7 @@ public UsersResponse getUsers() throws IOException { return doGet("user/list.hqu", new HashMap(), - UsersResponse.class); + new XmlResponseHandler(UsersResponse.class)); } /** @@ -135,7 +137,8 @@ public UserResponse createUser(User user, String password) params.put("htmlEmail", new String[] { Boolean.toString(user.isActive())}); params.put("SMSAddress", new String[] { user.getSMSAddress() }); - return doGet("user/create.hqu", params, UserResponse.class); + return doGet("user/create.hqu", params, + new XmlResponseHandler(UserResponse.class)); } /** @@ -154,7 +157,8 @@ public StatusResponse deleteUser(int id) params.put("id", new String[] { Integer.toString(id) }); - return doGet("user/delete.hqu", params, StatusResponse.class); + return doGet("user/delete.hqu", params, + new XmlResponseHandler(StatusResponse.class)); } /** @@ -173,7 +177,8 @@ public StatusResponse updateUser(User user) UsersRequest req = new UsersRequest(); req.getUser().add(user); - return doPost("user/sync.hqu", req, StatusResponse.class); + return doPost("user/sync.hqu", req, + new XmlResponseHandler(StatusResponse.class)); } /** @@ -192,7 +197,8 @@ public StatusResponse syncUsers(List users) UsersRequest request = new UsersRequest(); request.getUser().addAll(users); - return doPost("user/sync.hqu", request, StatusResponse.class); + return doPost("user/sync.hqu", request, + new XmlResponseHandler(StatusResponse.class)); } /** @@ -215,6 +221,6 @@ public StatusResponse changePassword(User user, String password) params.put("password", new String[] { password }); return doGet("user/changePassword.hqu", params, - StatusResponse.class); + new XmlResponseHandler(StatusResponse.class)); } } diff --git a/src/org/hyperic/hq/hqapi1/XmlResponseHandler.java b/src/org/hyperic/hq/hqapi1/XmlResponseHandler.java index 725ee939..b0e2c938 100644 --- a/src/org/hyperic/hq/hqapi1/XmlResponseHandler.java +++ b/src/org/hyperic/hq/hqapi1/XmlResponseHandler.java @@ -21,12 +21,17 @@ * @author Jennifer Hickey * */ -public class XmlResponseHandler implements ResponseHandler { +public class XmlResponseHandler implements ResponseHandler { private static Log _log = LogFactory.getLog(XmlResponseHandler.class); - public T handleResponse(int responseCode, HttpMethodBase method, - Class resultClass) throws IOException { + private Class clazz; + + public XmlResponseHandler(Class clazz) { + this.clazz = clazz; + } + + public T handleResponse(int responseCode, HttpMethodBase method) throws IOException { ServiceError error; switch (responseCode) { @@ -34,7 +39,7 @@ public T handleResponse(int responseCode, HttpMethodBase method, // We only deal with HTTP_OK responses InputStream is = method.getResponseBodyAsStream(); try { - return XmlUtil.deserialize(resultClass, is); + return XmlUtil.deserialize(clazz, is); } catch (JAXBException e) { error = new ServiceError(); error.setErrorCode("UnexpectedError"); @@ -42,7 +47,7 @@ public T handleResponse(int responseCode, HttpMethodBase method, if (_log.isDebugEnabled()) { _log.debug("Unable to deserialize result", e); } - return getErrorResponse(resultClass, error); + return getErrorResponse(error); } case 401: // Unauthorized @@ -50,13 +55,13 @@ public T handleResponse(int responseCode, HttpMethodBase method, error.setErrorCode("LoginFailure"); error.setReasonText("The given username and password could " + "not be validated"); - return getErrorResponse(resultClass, error); + return getErrorResponse(error); default: // Some other server blow up. error = new ServiceError(); error.setErrorCode("UnexpectedError"); error.setReasonText("An unexpected error occured"); - return getErrorResponse(resultClass, error); + return getErrorResponse(error); } @@ -74,16 +79,16 @@ public T handleResponse(int responseCode, HttpMethodBase method, * @return A response object of the given type with the given service error. * @throws IOException If an error occurs generating the error object. */ - public T getErrorResponse(Class res, ServiceError error) + public T getErrorResponse(ServiceError error) throws IOException { try { - T ret = res.newInstance(); + T ret = clazz.newInstance(); - Method setResponse = res.getMethod("setStatus", ResponseStatus.class); + Method setResponse = clazz.getMethod("setStatus", ResponseStatus.class); setResponse.invoke(ret, ResponseStatus.FAILURE); - Method setError = res.getMethod("setError", ServiceError.class); + Method setError = clazz.getMethod("setError", ServiceError.class); setError.invoke(ret, error); return ret;