XML document must have a top level element. Error processing resource
843834Aug 17 2006 — edited Aug 17 2006Hi,
I am trying to send a XML file to a web browser from a servlet. I read the contents of the XML file into a string and I am sending it to the brower. Before I do this I set the 'Content-type' header of the httpResponse to "application/xml" . Embedded in the XML file is an xml-stylesheet elemetn indicating which *.xsl stylesheet to use to parse the XML content.
I get the following error:
-----------------------------------------------------
The XML page cannot be displayed
Cannot view XML input using XSL style sheet. Please correct the error and then click the Refresh button, or try again later.
XML document must have a top level element. Error processing resource 'http://127.0.0.1:8080/testReplyingXML/xml-to-html.xs...
---------------------------------------------------------------
Now, if I take the stylesheet element out of the XML string I sent, then the browser stores the content into and *.xml file. I manually run the "xml-to-xsl " stylesheet mentioned in the error output above, and there is no problem, the xml content gets successfully transformed in a viewable HTML .
It is only when I embed the "stylesheet" element into the XML content that I get this error.
So the browser is receiveing valid XML.
I am not sure if the above error is complaining about the XML content I send or the stylesshet .
Does anyone have an idea of what am I doing wrong?
For your information here are my servlet code and the XML file:
servlet:-
---------
package webapps.testReplyingXML;
import java.io.BufferedReader;
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.FileReader;
import java.util.Enumeration;
import java.util.StringTokenizer;
import java.io.PrintWriter;
public class ReplyXML extends HttpServlet {
static int transactionCount = 0;
public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException ,IOException {
String Q_PARAM = "query";
String requestString = req.getQueryString();
for ( Enumeration en = req.getParameterNames() ; en.hasMoreElements() ; )
{
String k = (String)en.nextElement() ;
String[] x = req.getParameterValues(k) ;
String s = null;
String DATA_PARAM= "";
for(int i = 0 ; i < x.length ; i++ )
{
s = x[i] ;
//System.out.println("s = " + s);
}
if (k.equals("query")){
try {
//res.setHeader("Content-Type", "application/xml");
//res.setHeader("Transfer-Encoding", "chunked");
//res.setHeader("Cache-Control", "no-cache");
//res.setHeader("Server", "Jetty/5.1.10");
//res.setHeader("Pragma", "no-cache");
//res.setHeader("X-Joseki-Server", "Joseki-3.0-dev");
res.setStatus(res.SC_OK);
StringBuffer fileData = new StringBuffer(1000);
BufferedReader reader = new BufferedReader(new FileReader("sparql_results.xml"));
char[] buf = new char[1024];
int numRead=0;
while((numRead=reader.read(buf)) != -1){
String readData = String.valueOf(buf, 0, numRead);
fileData.append(readData);
buf = new char[1024];
}
reader.close();
String xmlMsg= fileData.toString();
System.out.println("XMLMSG= " + xmlMsg);
PrintWriter outresp = res.getWriter();
outresp.println(xmlMsg);
outresp.close();
}catch (Exception e) {
e.printStackTrace();
}
}
}
}
public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
doGet(req, res);
}
}
XML FILE:
-------------
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="xml-to-html.xsl"?>
<sparql
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:xs="http://www.w3.org/2001/XMLSchema#"
xmlns="http://www.w3.org/2005/sparql-results#" >
<head>
<variable name="book"/>
<variable name="title"/>
</head>
<results ordered="false" distinct="false">
<result>
<binding name="book">
<uri>http://example.org/book/book6</uri>
</binding>
<binding name="title">
<literal>Harry Potter and the Half-Blood Prince</literal>
</binding>
</result>
<result>
<binding name="book">
<uri>http://example.org/book/book5</uri>
</binding>
<binding name="title">
<literal>Harry Potter and the Order of the Phoenix</literal>
</binding>
</result>
<result>
<binding name="book">
<uri>http://example.org/book/book4</uri>
</binding>
<binding name="title">
<literal>Harry Potter and the Goblet of Fire</literal>
</binding>
</result>
<result>
<binding name="book">
<uri>http://example.org/book/book3</uri>
</binding>
<binding name="title">
<literal>Harry Potter and the Prisoner Of Azkaban</literal>
</binding>
</result>
<result>
<binding name="book">
<uri>http://example.org/book/book2</uri>
</binding>
<binding name="title">
<literal>Harry Potter and the Chamber of Secrets</literal>
</binding>
</result>
<result>
<binding name="book">
<uri>http://example.org/book/book1</uri>
</binding>
<binding name="title">
<literal>Harry Potter and the Philosopher's Stone</literal>
</binding>
</result>
</results>
</sparql>