/* * FZI - Information Process Engineering * Created on 22.12.2007 by zach */ package de.fzi.ipe.pipesSparqlr; import java.io.BufferedInputStream; import java.io.BufferedWriter; import java.io.IOException; import java.io.OutputStreamWriter; import java.io.PrintWriter; import java.net.URL; import java.net.URLConnection; import java.net.URLEncoder; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; import org.json.JSONException; import org.json.JSONObject; import org.w3c.dom.Document; import org.w3c.dom.Node; import org.w3c.dom.NodeList; import org.xml.sax.SAXException; @SuppressWarnings("serial") public class SparqlrServlet extends HttpServlet{ @Override protected void doGet(HttpServletRequest arg0, HttpServletResponse arg1) throws ServletException, IOException { doPost(arg0, arg1); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { PrintWriter out = response.getWriter(); try { String data = request.getParameter("data"); if (data == null) { response.setContentType("text/xml"); out.println(" \n No input data!\n"); } else { JSONObject jsonObj = new JSONObject(data); jsonObj = jsonObj.getJSONArray("items").getJSONObject(0); String query = jsonObj.getString("query"); String endpoint = jsonObj.getString("endpoint"); Document doc = getResultDocument(endpoint, query); JSONObject result = makeJSON(doc); response.setContentType("application/sparql-results+xml"); out.println(result.toString()); } } catch (Exception e) { response.setContentType("text/xml"); e.printStackTrace(out); } } private static Document getResultDocument(String endpoint, String query) throws IOException, SAXException, ParserConfigurationException { URLConnection urlConn = new URL(endpoint).openConnection(); urlConn.setDoOutput (true); urlConn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded"); BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(urlConn.getOutputStream ())); writer.write("query="+URLEncoder.encode(query,"UTF-8")); writer.close(); DocumentBuilderFactory fact = DocumentBuilderFactory.newInstance(); DocumentBuilder builder = fact.newDocumentBuilder(); Document doc = builder.parse(new BufferedInputStream(urlConn.getInputStream())); return doc; } private static JSONObject makeJSON(Document doc) throws JSONException { JSONObject resultObject = new JSONObject(); NodeList results = doc.getDocumentElement().getElementsByTagName("results").item(0).getChildNodes(); for (int i=0;i