[jdom-interest] Re: JDOM via Servlet

Vladimir Grishchenko VGrishchenko at serena.com
Tue Jul 24 16:56:36 PDT 2001


The following works for me on Tomcat 3.2.2


if (req.getContentLength() > 0)
{
 
	SAXBuilder builder = new SAXBuilder();
	try
	{
		Document doc = builder.build(
			new BufferedInputStream(req.getInputStream()));
		//do stuff with doc here
	}
	catch (IOException e)
	{
		//handle e
	}
	catch (JDOMException e)
	{
		//handle e
	}
}

--V.

-----Original Message-----
From: John Muhlestein [mailto:jmuhlestein at i-link.net]
Sent: Tuesday, July 24, 2001 3:22 PM
To: 'jdom-interest at jdom.org'
Subject: RE: [jdom-interest] Re: JDOM via Servlet


I have made all the changes to my code that was suggested (Including
removing the validation) and the servlet continues to hang on the
SAXBuilder.build(in).  Any other ideas?

John 

> -----Original Message-----
> From: Joseph Bowbeer [mailto:jozart at csi.com]
> Sent: Tuesday, July 24, 2001 1:45 AM
> To: jdom-interest at jdom.org
> Cc: John Muhlestein
> Subject: [jdom-interest] Re: JDOM via Servlet
> 
> 
> Oops.  I answered too quickly.  A couple of corrections:
> 
> Forget about #4.  I was thinking byte[] buf (not char[] buf)...
> 
> 4. String.valueOf(buf) uses the default character decoder on 
> your servlet's
> platform, which may not match the encoder that was used when 
> the request was
> sent.
> 
> I also missed that you *are* reading the response before 
> disconnecting.  I
> guess that leaves #3 about br.read(buf) only doing a partial 
> read as the
> most significant trouble spot.
> 
> 3. br.read(buf) will read *some* characters, but not 
> necessarily all of
> them.  DataInputStream.readFully, on the other hand, will 
> read everything.
> 
> Once again, I'll contribute a simple servlet example if I 
> find the time.
> 
> 
> ----- Original Message -----
> From: "Joseph Bowbeer" <jozart at csi.com>
> To: <jdom-interest at jdom.org>
> Cc: "John Muhlestein" <jmuhlestein at i-link.net>
> Sent: Tuesday, July 24, 2001 12:06 AM
> Subject: JDOM via Servlet
> 
> 
> John Muhlestein writes:
> 
> > I seem to continue to be running up against a brick wall trying
> > to pass XML to a servlet and then building a JDOM Document ...
> 
> Looking at your code, the biggest problem I see is that 
> you're disconnecting
> your connection before reading the response from the servlet:
> 
>   public InputStream send (ByteArrayOutputStream content)
>   throws Exception {
>     /* ... */
>     InputStream fromServlet = new ByteArrayInputStream(buf);
>     cxn.disconnect();
>     return fromServlet;
> 
> There's also some suspicious code in your servlet:
> 
>     char[] buf = new char[request.getContentLength()];
>     BufferedReader br = new BufferedReader(request.getReader());
>     br.read(buf);
>     StringReader sr = new StringReader(String.valueOf(buf));
> 
> As follows:
> 
> 1. Sockets operate on bytes not chars.
> 
> 2. The content length is the number of bytes, not the number 
> of chars.  If
> your content is UTF8 encoded, for example, then the content 
> length will be
> greater than the number of chars unless all the character content lies
> within the ASCII range.
> 
> 3. br.read(buf) will read *some* characters, but not 
> necessarily all of
> them.  DataInputStream.readFully, on the other hand, will 
> read everything.
> 
> 4. String.valueOf(buf) uses the default character decoder on 
> your servlet's
> platform, which may not match the encoder that was used when 
> the request was
> sent.
> 
> Do this instead:
> 
>     byte[] buf = new byte[request.getContentLength()];
>     new DataInputStream(request.getInputStream()).readFully(buf);
>     InputStream in = new ByteArrayInputStream(buf);
>     Document doc = new SAXBuilder().build(in);
> 
> If I find some time later, I'll send a complete JDOM 
> client/servlet sample.
> 
> --
> Joe Bowbeer
> 
> 
> 
> _______________________________________________
> To control your jdom-interest membership:
> http://lists.denveronline.net/mailman/options/jdom-interest/yo
uraddr at yourhost.com
_______________________________________________
To control your jdom-interest membership:
http://lists.denveronline.net/mailman/options/jdom-interest/youraddr@yourhos
t.com


***********************************************************************
This email and any files transmitted with it are confidential and
intended solely for the use of the individual or entity to whom they
are addressed. Any unauthorized review, use, disclosure or distribution
is prohibited. If you are not the intended recipient, please contact
the sender by reply e-mail and destroy all copies of the original
message.
***********************************************************************



More information about the jdom-interest mailing list