Yes, I saw the file through a browser, and I'm sure that it's valid. Also I
tried a completely empty XML file with only open and close tag. Either way
it parses all right when found as a local file, but the file as retrieved
over HTTP does not work. So I am quite sure that the problem lies there. I
think the HTTP headers are not stripped. If this is the case, can anybody
tell me a straightforward way of stripping the headers in Java? I'm sure I
don't have to write something common and low-level like that ;-) Maybe in
your case the header stripping was done by PHP? I sort of would expect that
from Java as well when I request an XML file over HTTP...

So far what I did was write a custom URIResolver like this, this gives
exactly the same result (same error as in original email):

transformer.setURIResolver (new URIResolver() {
        public Source resolve(String href, String base) {
                StreamSource source = null;
                URL context = null, url = null;
                try {
                        context = new URL(base);
                        url = new URL(context, href);
                        InputStream in = url.openStream();
                        source = new StreamSource(in, url.toString());
                }
                catch (MalformedURLException urle) {
                        //
                }
                catch (IOException ioe) {
                        //
                }
                return source;
        }
});

Since my code obviously doesn't do header stripping and gives the same
result, I strongly feel like headers are still there when doing a
StreamSource("http://localhost/risc/readonly.jsp";).

Any additional thoughts/help would be appreciated.

Jeroen

> -----Oorspronkelijk bericht-----
> Van: Russell Simpkins [mailto:[EMAIL PROTECTED]
> Verzonden: donderdag 1 juli 2004 13:55
> Aan: 'Kransen, J.'; [EMAIL PROTECTED]
> Onderwerp: RE: Parsing XML file retrieved through HTTP
> 
> Jeroen,
> 
> Did you look at the xml file through a brower?  Maybe there is something
> there you aren't seeing.  I have done the exact same thing, opening an
> http page as a streamsource, using php as the source.  Every error I saw
> came in malformed xml.  Which is what it sounds like you have.
> 
> Russ
> 
> -----Original Message-----
> From: Kransen, J. [mailto:[EMAIL PROTECTED]
> Sent: Thursday, July 01, 2004 5:16 AM
> To: '[EMAIL PROTECTED]'
> Subject: Parsing XML file retrieved through HTTP
> 
> Hello,
> 
> I have a .jsp that outputs a XML file. I have another .jsp in which I
> want
> to parse the XML file using an XSL file. So in the latter .jsp I want to
> do
> something like this:
> 
> <textarea><%
> 
> String xslFile = getServletContext().getRealPath("/xml/risc2cvs.xsl");
> 
> TransformerFactory tFactory = TransformerFactory.newInstance();
> Transformer
> transformer = tFactory.newTransformer(new StreamSource(xslFile));
> 
> // write the content of the parsed XML file
> transformer.transform(new
> StreamSource("http://localhost/risc/readonly.jsp";), new
> StreamResult(out));
> 
> %></textarea>
> 
> However, when I do this, I get the following error message:
> 
> The element type "base" must be terminated by the matching end-tag "".
> 
> With this stack trace:
> javax.xml.transform.TransformerException: The element type "base" must
> be
> terminated by the matching end-tag "".
>       at
> org.apache.xalan.transformer.TransformerImpl.fatalError(TransformerImpl.
> java
> :744)
>       at
> org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.j
> ava:
> 720)
>       at
> org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.j
> ava:
> 1192)
>       at
> org.apache.xalan.transformer.TransformerImpl.transform(TransformerImpl.j
> ava:
> 1170)
>       at
> org.apache.jsp.cvs_005fuittreksel_jsp._jspService(cvs_005fuittreksel_jsp
> jav
> a:109)
> ..
> 
> 
> When instead I try to parse a local XML file, there are no problems:
> String xmlFile = getServletContext().getRealPath("/xml/temp.xml");
> transformer.transform(new StreamSource(xmlFile), new StreamResult(out));
> 
> But then, when I try to parse the very same file as accessed through
> HTTP, I
> get the very same error:
> transformer.transform(new
> StreamSource("http://localhost/risc/xml/temp.xml";), new
> StreamResult(out));
> 
> I was thinking that maybe the HTTP headers aren't stripped before the
> parsing. Does anybody know what to do here?
> 
> Thanks in advance!
> 
> Jeroen


Reply via email to