Sign In | Register Now About Bytes | Help | Site Map
Connecting Tech Pros Worldwide

Java SAX parser. How to get the raw XML code of the currently parsingevent

Question posted by: PatlaDJ (Guest) on July 2nd, 2008 10:55 PM
Java SAX parser, please need a clue how to get the raw XML code of the
currently parsing event... needed for logging, debugging purposes.

Here's and example, letting me clarify exactly what i need: (see the
comments in source)

public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
//..Here... or maybe somewhere elsewhere I need on my disposal the raw
XML code of every XML tags received from the XML stream.
//.. I need simply to write them down in a log file, for debugging
purposes, while parsing.
//.. Can anyone give me a suggestion how can i do that logging while
the SAX parser only returns me the tagname and attributes. While
parsing I want to log the XML code for every tag in its 'pure form',
like it is comming from the server directly on the socket's input
reader.

if ("p".equals(qName)) {
//Do
something...
}

}
Martin Honnen's Avatar
Martin Honnen
Guest
n/a Posts
July 3rd, 2008
12:35 PM
#2

Re: Java SAX parser. How to get the raw XML code of the currently parsingevent
PatlaDJ wrote:
Quote:
Java SAX parser, please need a clue how to get the raw XML code of the
currently parsing event... needed for logging, debugging purposes.
>
Here's and example, letting me clarify exactly what i need: (see the
comments in source)
>
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
//..Here... or maybe somewhere elsewhere I need on my disposal the raw
XML code of every XML tags received from the XML stream.


I don't think the SAX API provides access to the raw XML.

--

Martin Honnen
http://JavaScript.FAQTs.com/

PatlaDJ's Avatar
PatlaDJ
Guest
n/a Posts
July 3rd, 2008
02:05 PM
#3

Re: Java SAX parser. How to get the raw XML code of the currently parsingevent
On 3 Þëè, 15:30, Martin Honnen <mahotr...@yahoo.dewrote:
Quote:
PatlaDJ wrote:
Quote:
Java SAX parser, please need a clue how to get the raw XML code of the
currently parsing event... needed for logging, debugging purposes.

>
Quote:
Here's and example, letting me clarify exactly what i need: (see the
comments in source)

>
Quote:
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
//..Here... or maybe somewhere elsewhere I need on my disposal the raw
XML code of every XML tags received from the XML stream.

>
I don't think the SAX API provides access to the raw XML.
>
--
>
* * * * Martin Honnen
* * * *http://JavaScript.FAQTs.com/


Yes... now i'm pretty sure that it doesn't provide such access. Too
bad l;(

Right now i'm working towards clonning my input stream. Currently i'm
trying to clone the bufferedReader i pass as an inputsourse to the
parser ....i can't get it done :(

Let me explain: I read from a Socket ... the chain sequence is as
follows:

Socket -InputStreamReader -BufferedReader -InputSource -then
it goes to .parse(InputSource)....of the SAX.

What node on this chain can be cloned so I can read the data two
times.....once for the parser, once for my debugging log.

Am I on the right track, or maybe not ?

Joseph J. Kesselman's Avatar
Joseph J. Kesselman
Guest
n/a Posts
July 3rd, 2008
02:35 PM
#4

Re: Java SAX parser. How to get the raw XML code of the currently parsingevent
Socket -InputStreamReader -BufferedReader -InputSource -then
Quote:
it goes to .parse(InputSource)....of the SAX.
>
What node on this chain can be cloned so I can read the data two
times.....once for the parser, once for my debugging log.


I'd suggest dealing with it at the Java level. Find or write a "wrapper"
reader implementation which saves a copy of the data passing through it
off to a data structure or scratch file for rereading, or perhaps which
writes the data direct to your log as it passes through. Plug that in
somewhere between the InputStreamReader and the InputSource -- whether
upstream, downstream, or in place of the BufferedReader depends on the
details of how this tee adapter is written.

PatlaDJ's Avatar
PatlaDJ
Guest
n/a Posts
July 3rd, 2008
07:45 PM
#5

Re: Java SAX parser. How to get the raw XML code of the currently parsingevent
On 3 àÌÉ, 17:34, "Joseph J. Kesselman" <keshlam-nos...@comcast.net>
wrote:
Quote:
Quote:
Socket -InputStreamReader -BufferedReader -InputSource -then
it goes to .parse(InputSource)....of the SAX.

>
Quote:
What node on this chain can be cloned so I can read the data two
times.....once for the parser, once for my debugging log.

>
I'd suggest dealing with it at the Java level. Find or write a "wrapper"
reader implementation which saves a copy of the data passing through it
off to a data structure or scratch file for rereading, or perhaps which
writes the data direct to your log as it passes through. Plug that in
somewhere between the InputStreamReader and the InputSource -- whether
upstream, downstream, or in place of the BufferedReader depends on the
details of how this tee adapter is written.


YES!

I've solved my problem using class RecordingInputStream that wraps the
InputStream
here is the class source code:

import java.io.ByteArrayOutputStream;
import java.io.FilterInputStream;
import java.io.InputStream;
import java.io.IOException;

/**
*
* @author Unknown
*
*/

class RecordingInputStream extends FilterInputStream {
protected ByteArrayOutputStream sink;

RecordingInputStream(InputStream in) {
this(in, new ByteArrayOutputStream());
}

RecordingInputStream(InputStream in, ByteArrayOutputStream sink)
{
super(in);
this.sink = sink;
}

public synchronized int read() throws IOException {
int i = in.read();
sink.write(i);
return i;
}

public synchronized int read(byte[] buf, int off, int len) throws
IOException {
int l = in.read(buf, off, len);
sink.write(buf, off, l);
return l;
}

public synchronized int read(byte[] buf) throws IOException {
return read(buf, 0, buf.length);
}

public synchronized long skip(long len) throws IOException {
long l = 0;
int i = 0;
byte[] buf = new byte[1024];
while (l < len) {
i = read(buf, 0, (int)Math.min((long)buf.length, len -
l));
if (i == -1) break;
l += i;
}
return l;
}

byte[] getBytes() {
return sink.toByteArray();
}

void resetSink() {
sink.reset();
}
}


jimmy Zhang's Avatar
jimmy Zhang
Guest
n/a Posts
August 4th, 2008
01:55 AM
#6

Re: Java SAX parser. How to get the raw XML code of the currently parsingevent
SAX is a bit outdated... try either Pull or VTD-XML (http://vtd-xml.sf.net)

"PatlaDJ" <patladj@gmail.comwrote in message
news:2aaf86a4-5a78-4334-a607-8cdc1a4d9082@a70g2000hsh.googlegroups.com...
Quote:
Java SAX parser, please need a clue how to get the raw XML code of the
currently parsing event... needed for logging, debugging purposes.
>
Here's and example, letting me clarify exactly what i need: (see the
comments in source)
>
public void startElement(String uri, String localName, String qName,
Attributes attributes) throws SAXException {
//..Here... or maybe somewhere elsewhere I need on my disposal the raw
XML code of every XML tags received from the XML stream.
//.. I need simply to write them down in a log file, for debugging
purposes, while parsing.
//.. Can anyone give me a suggestion how can i do that logging while
the SAX parser only returns me the tagname and attributes. While
parsing I want to log the XML code for every tag in its 'pure form',
like it is comming from the server directly on the socket's input
reader.
>
if ("p".equals(qName)) {
//Do
something...
}
>
}




 
Not the answer you were looking for? Post your question . . .
189,759 Experts ready to help you find a solution.
Sign up for a free account, or Login (if you're already a member).

Latest Articles: Read & Comment
  • Didn't find the answer you were looking for?
    Post Your Question
  • Top Community Contributors