/* * Copyright (c) 2006-2007 Massachusetts General Hospital * All rights reserved. This program and the accompanying materials * are made available under the terms of the i2b2 Software License v1.0 * which accompanies this distribution. * * Contributors: * Mike Mendis * Raj Kuttan * Lori Phillips */ package edu.harvard.i2b2.pm.ws; import java.io.StringReader; import javax.xml.stream.FactoryConfigurationError; import javax.xml.stream.XMLInputFactory; import javax.xml.stream.XMLStreamException; import javax.xml.stream.XMLStreamReader; import org.apache.axiom.om.OMAbstractFactory; import org.apache.axiom.om.OMElement; import org.apache.axiom.om.OMNamespace; import org.apache.axiom.om.impl.builder.StAXOMBuilder; import org.apache.axiom.soap.SOAPEnvelope; import org.apache.axiom.soap.SOAPFactory; import org.apache.axis2.AxisFault; import org.apache.axis2.Constants; import org.apache.axis2.addressing.EndpointReference; import org.apache.axis2.client.OperationClient; import org.apache.axis2.client.Options; import edu.harvard.i2b2.common.util.axis2.ServiceClient; import org.apache.axis2.context.MessageContext; import org.apache.axis2.context.ServiceContext; import org.apache.axis2.transport.http.HTTPConstants; import org.apache.commons.httpclient.HostConfiguration; import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.MultiThreadedHttpConnectionManager; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import edu.harvard.i2b2.common.exception.I2B2Exception; import edu.harvard.i2b2.common.exception.StackTraceUtil; import edu.harvard.i2b2.common.util.jaxb.JAXBUtilException; import edu.harvard.i2b2.ontology.datavo.i2b2message.MessageHeaderType; import edu.harvard.i2b2.ontology.datavo.pm.GetUserConfigurationType; import edu.harvard.i2b2.ontology.util.OntologyUtil; public class PMServiceDriver { private static Log log = LogFactory.getLog(PMServiceDriver.class.getName()); /** * Function to convert pm requestVdo to OMElement * * @param requestPm String request to send to pm web service * @return An OMElement containing the pm web service requestVdo */ public static OMElement getPmPayLoad(String requestPm) throws Exception { OMElement lineItem = null; try { StringReader strReader = new StringReader(requestPm); XMLInputFactory xif = XMLInputFactory.newInstance(); XMLStreamReader reader = xif.createXMLStreamReader(strReader); StAXOMBuilder builder = new StAXOMBuilder(reader); lineItem = builder.getDocumentElement(); } catch (FactoryConfigurationError e) { log.error(e.getMessage()); throw new Exception(e); } return lineItem; } /** * Function to send getRoles request to PM web service * * @param GetUserConfigurationType userConfig we wish to get data for * @return A String containing the PM web service response */ public static String getRoles(GetUserConfigurationType userConfig, MessageHeaderType header) throws I2B2Exception, AxisFault, Exception{ String response = null; try { GetUserConfigurationRequestMessage reqMsg = new GetUserConfigurationRequestMessage(); String getRolesRequestString = reqMsg.doBuildXML(userConfig, header); // OMElement getPm = getPmPayLoad(getRolesRequestString); // First step is to get PM endpoint reference from properties file. String pmEPR = ""; String pmMethod = ""; try { pmEPR = OntologyUtil.getInstance().getPmEndpointReference(); pmMethod = OntologyUtil.getInstance().getPmWebServiceMethod(); } catch (I2B2Exception e1) { log.error(e1.getMessage()); throw e1; } if(pmMethod.equals("SOAP")) { response = ServiceClient.sendSOAP(pmEPR, getRolesRequestString, "http://rpdr.partners.org/GetUserConfiguration", "GetUserConfiguration" ); } else { response = ServiceClient.sendREST(pmEPR, getRolesRequestString); } log.debug("PM response = " + response); } catch (Exception e) { log.error(e.getMessage()); throw new Exception(e); } return response; } }