[jdom-interest] Re: JDOM via Servlet

John Muhlestein jmuhlestein at i-link.net
Tue Jul 24 15:22:06 PDT 2001


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



More information about the jdom-interest mailing list