Hi Jeff,

There's a sample [1] included with Xerces which shows how you can process 
XML documents (multiple ones or a single one followed by arbitrary data) 
sent over a socket. If you're in control of both ends of the stream, you 
might want to implement something like that.

Thanks.

[1] 
http://svn.apache.org/viewvc/xerces/java/trunk/samples/socket/KeepSocketOpen.java?revision=447688&view=markup

Michael Glavassevich
XML Parser Development
IBM Toronto Lab
E-mail: [EMAIL PROTECTED]
E-mail: [EMAIL PROTECTED]

<[EMAIL PROTECTED]> wrote on 05/17/2007 06:43:24 PM:

> I'm receiving an XML document over a TCP socket, I then instantiate an 
> instance of DOMParser and attempt to parse the data.  I get the 
identical 
> exception when using Xerces-J as well.   Here's the exception:
> 
> org.xml.sax.SAXParseException: An invalid XML character (Unicode: 0x0) 
was 
> found in markup after the end of the element content.
>         at 
> org.apache.xerces.framework.XMLParser.reportError(XMLParser.java:1213)
>         at 
> org.apache.xerces.framework.XMLDocumentScanner.
> reportFatalXMLError(XMLDocumentScanner.java:588)
>         at 
> org.apache.xerces.framework.
> XMLDocumentScanner$TrailingMiscDispatcher.
> dispatch(XMLDocumentScanner.java:1461)
>         at 
> org.apache.xerces.framework.XMLDocumentScanner.
> parseSome(XMLDocumentScanner.java:381)
>         at 
> org.apache.xerces.framework.XMLParser.parse(XMLParser.java:1098)
> 
> Here's the relevant snippet(s) of source (there is code to write out the 

> socket, just not here):
> 
> Socket socket = new Socket( hostIP, hostPort );
> OutputStream outStream = socket.getOutputStream();
> InputStream inStream = socket.getInputStream();
> DataInputStream dataInStream = new DataInputStream( inStream );
> byte[] inByteArray  = new byte[ 2048 ];
> int length =  dataInStream.read( inByteArray );
> InputStream byteData  =  new ByteArrayInputStream( inByteArray );
> 
> try 
> {
>        DOMParser dp = new DOMParser();
>        dp.parse( new InputSource( byteData ));
>        Document doc = dp.getDocument();
> }
> catch ( Exception e )
> {
>         e.printStackTrace();
>         System.exit( 1 );
> }
> 
> Is there a different way to do this?  I even tried creating a new String 

> based on the length read from the socket, minus one.  The parser then 
saw 
> that the final angle bracket of my root element was missing, so it 
doesn't 
> seem to be an encoding issue.
> 
> Any help would be appreciated.
> Jeff
> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to