import org.xmldb.api.*;
import org.xmldb.api.base.*;
import org.xmldb.api.modules.*;


import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class XMLDBQuery extends HttpServlet implements SingleThreadModel
{
	public void doGet (HttpServletRequest request, HttpServletResponse response)
		throws ServletException, IOException
	{
		doPost(request,response);
	}

	public void doPost (HttpServletRequest request, HttpServletResponse response)
		throws ServletException, IOException
	{
		PrintWriter out = response.getWriter();
		int ex = 0;

		response.setContentType("text/xml");
		String colName;
		String queryStr;
		String resStr = "";
		Collection col = null;
		
		// for benchmark
		colName = "xmldb:xindice://localhost:4080/db/addressbook";
		queryStr = "//*[count(*)=2]";

		try {
    	
			String driver = "org.apache.xindice.client.xmldb.DatabaseImpl";
	         	Class c = Class.forName(driver);
 
		        Database db = (Database) c.newInstance();
				DatabaseManager.registerDatabase(db);
        	 	col = DatabaseManager.getCollection(colName); 
         
	         	XPathQueryService service = (XPathQueryService) col.getService("XPathQueryService", "1.0");
		    	ResourceSet resultSet = service.query(queryStr);
        		ResourceIterator results = resultSet.getIterator();
 
		        while (results.hasMoreResources()) {
			            Resource res = results.nextResource();
			            System.out.println((String) res.getContent());
		        }
		 

	      }
	      catch (XMLDBException e) {
        	 System.err.println("XML:DB Exception occured " + e.errorCode + " " +
	            e.getMessage());
      		}
	      finally {
        	 if (col != null) {
	            col.close();
        	 }
	      }	

    }
}
