package at.gv.util.client.mis.simple; import java.io.IOException; import java.util.ArrayList; import java.util.List; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import javax.xml.transform.TransformerException; import org.apache.commons.codec.binary.Base64; import org.apache.http.HttpResponse; import org.apache.http.client.HttpClient; import org.apache.http.client.methods.HttpPost; import org.apache.http.entity.StringEntity; import org.apache.http.impl.client.HttpClients; import org.apache.xpath.XPathAPI; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.w3c.dom.DOMException; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; import at.gv.util.DOMUtils; public class MISSimpleClient { private final static String SOAP_NS = "http://schemas.xmlsoap.org/soap/envelope/"; private final static String MIS_NS = "http://reference.e-government.gv.at/namespace/mandates/mis/1.0/xsd"; private static Element NS_NODE = null; private static Logger log = LoggerFactory.getLogger(MISSimpleClient.class); static { try { NS_NODE = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument().createElement("test"); NS_NODE.setAttribute("xmlns:soap", SOAP_NS); NS_NODE.setAttribute("xmlns:mis", MIS_NS); } catch (Exception e) { log.warn("Error initializing namespace node.", e); } } public static List sendGetMandatesRequest(String webServiceURL, String sessionId) throws MISSimpleClientException { if (webServiceURL == null) { throw new NullPointerException("Argument webServiceURL must not be null."); } if (sessionId == null) { throw new NullPointerException("Argument sessionId must not be null."); } try { Document doc = DocumentBuilderFactory.newInstance().newDocumentBuilder().newDocument(); Element mirElement = doc.createElementNS(MIS_NS, "MandateIssueRequest"); Element sessionIdElement = doc.createElementNS(MIS_NS, "SessionID"); sessionIdElement.appendChild(doc.createTextNode(sessionId)); mirElement.appendChild(sessionIdElement); // send soap request Element mandateIssueResponseElement = sendSOAPRequest(webServiceURL, mirElement); // check for error checkForError(mandateIssueResponseElement); // check for session id NodeList mandateElements = XPathAPI.selectNodeList(mandateIssueResponseElement, "//mis:MandateIssueResponse/mis:Mandates/mis:Mandate", NS_NODE); if (mandateElements == null || mandateElements.getLength() == 0) { throw new MISSimpleClientException("No mandates found in response."); } ArrayList foundMandates = new ArrayList(); for (int i=0; i 0) { Element certElement = doc.createElementNS(MIS_NS, "X509SignatureCertificate"); certElement.appendChild(doc.createTextNode(Base64.encodeBase64String(cert))); mirElement.appendChild(certElement); } Element redirectElement = doc.createElementNS(MIS_NS, "RedirectURL"); redirectElement.appendChild(doc.createTextNode(redirectURL)); mirElement.appendChild(redirectElement); Element refValElement = doc.createElementNS(MIS_NS, "ReferenceValue"); refValElement.appendChild(doc.createTextNode(refValue)); mirElement.appendChild(refValElement); if (mandateIdentifier != null && mandateIdentifier.length > 0) { Element filtersElement = doc.createElementNS(MIS_NS, "Filters"); Element mandateIdentifiersElement = doc.createElementNS(MIS_NS, "MandateIdentifiers"); for (int i=0; i