Optimizing DocumentBuilder.parse ??

Hello,
I am loading XML files and am finding that once they get into the range of 500 kb or so they get really slow to load. I stuck in a bunch of timing statement and have found DocumentBuilder.parse(file) is the guitly party.
Does anyone know of any optimization possibilities for this or is this the nature of the beast? Is writing my own parser the only other option?
Thanks,
Shannon Goodman

Yes, the larger and more complex the XML the longer it takes to parse. But writing your own parser is not the only option (and if it were I would still recommend against it, because it's more complicated than you think). XML is designed so that you can use any parser you like, and the one you are using is not the only one available. Look for others and try them out.

Similar Messages

  • URGENT:  javax.xml.parsers.DocumentBuilder.parse() method issue

    Hi folks,
    I have an urgent parsing problem. I developed an app with JDK1.4 and now it needs to run on JDK1.3.1. The problem is this:
    If I use the DocumentBuilder.parse() method shipped with JDK1.4 it will parse a document containing namespaces WITHOUT a namespace declaration in the root element. However, since XML support doesn't ship with JDK1.3.1 I need to use JAXP. If I try this with the DocumentBuilder.parse() version shipped with JAXP (latest version) the parse method throws a NullPointerException. If I put the namespace declaration in the document it will parse fine. I tried setting the DocumentBuilderFactory.setNamespaceAware() explicitly to false (should be the default) but no luck. Any ideas other than adding the declaration (long story why I don't want it there...)
    thanks

    example, with declaration of namespace:
    <?xml version="1.0" encoding="UTF-8"?>
    <pre:root xmlns:inn="http://blablabla/inn/version/1.0/">
    <pre:metadata>
    <pre:dublin-core>
    <pre:title>mytitle</pre:title>
    <pre:description>mydesc</pre:description>
    <pre:creator>bjmann</pre:creator>
    </inn:dublin-core>
    </pre:root>
    example, without declaration:
    <?xml version="1.0" encoding="UTF-8"?>
    <pre:root>
    <pre:metadata>
    <pre:dublin-core>
    <pre:title>mytitle</pre:title>
    <pre:description>mydesc</pre:description>
    <pre:creator>bjmann</pre:creator>
    </inn:dublin-core>
    </pre:root>
    this may help...

  • DocumentBuilder.parse classpath problem

    Hi, I've the "xerces.jar" in my classpath, and
    I'm using it like this:
    import javax.xml.parsers.ParserConfigurationException;
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    import javax.servlet.http.HttpServletRequest;
    import org.xml.sax.helpers.DefaultHandler;
    import org.xml.sax.SAXException;
    //... etc..
    Document mapDoc = null;
    Element mapRoot = null;
    try {
    DocumentBuilderFactory docbuilderfactory =
    DocumentBuilderFactory.newInstance();
    DocumentBuilder docbuilder = docbuilderfactory.newDocumentBuilder();
    mapDoc = docbuilder.parse("/usr/home/tomsicp/site.xml");
    //..... etc
    The file compiles just fine, but when I run it on a
    "SunOS 5.8 sun4u sparc, Ultra-60" I'm getting
    "java.lang.NoClassDefFoundError: org/xml/sax/InputSource
    at javax.xml.parsers.DocumentBuilder.parse(Unknown Source)
    at <linenumber in my file>
    When I run it on a "Linux 2.4.7-10smp #1"
    everything is just fine.
    I've got the exact same profile on both boxes, and the xerces.jar
    file is exactly the same.
    Any thoughts on why this is happening?
    thanks,
    Paul

    what JDK do you use on each machine?

  • Java.lang.NullPointerException javax.xml.parsers.DocumentBuilder.parse

    Hi all,
    i have a problem by solving an error in my code. The Code is mainly from Ian Darwin.
    The code i am running works with j2sdk1.4.2_04. But now i have to bring it to work with jdk1.6.0_13.
    The code parses xml documents. With small xml documents the code works. With large xml documents i get the following error while running the produced class file.
    Exception in thread "main" java.lang.NullPointerException
    at com.sun.org.apache.xerces.internal.dom.DeferredDocumentImpl.setChunkIndex(DeferredDocumentImpl.java:1944)
    at com.sun.org.apache.xerces.internal.dom.DeferredDocumentImpl.appendChild(DeferredDocumentImpl.java:644)
    at com.sun.org.apache.xerces.internal.parsers.AbstractDOMParser.characters(AbstractDOMParser.java:1191)
    at com.sun.org.apache.xerces.internal.impl.dtd.XMLDTDValidator.characters(XMLDTDValidator.java:862)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:463)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:807)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:107)
    at com.sun.org.apache.xerces.internal.parsers.DOMParser.parse(DOMParser.java:225)
    at com.sun.org.apache.xerces.internal.jaxp.DocumentBuilderImpl.parse(DocumentBuilderImpl.java:283)
    at javax.xml.parsers.DocumentBuilder.parse(DocumentBuilder.java:208)
    at XParse.parse(XParse.java:38)
    at XParse$JFileChooserrv.<init>(XParse.java:119)
    at XParse.main(XParse.java:213)
    I know what a java.lang.NullPointerException mens. But i don't know where i have to look for. Specially i don't know what or where "com.sun.org.apache...." is.
    Is there a package that a have to add to the environment? Can some one tell my where i can find this package?
    I wrote the code for some years ago, 2006 or so. With the knew jdk1.6.0_13 some thinks chance in the environment. Couldn't find what exactly.
    The code has only 215 lines, but some how i can't add it to this Message, because Maximum allowed is only 7500.
    Is there an other Forum, which may is better for my question?

    Here is the code:
    import java.io.*;
    import javax.xml.parsers.*;
    import org.w3c.dom.*;
    import org.xml.sax.*;
    import javax.swing.*;
    import java.awt.event.*;
    import java.io.*;
    import java.util.*;
    import javax.swing.*;
    import java.awt.Container;
    import javax.swing.JTextArea;
    * This code is mainly from @author Ian Darwin, [email protected]
    public class XParse {
         /** Convert the file */
         public static void parse(File file, boolean validate) {
              try {
                   System.err.println("");
                   String fileName = file.getAbsolutePath();
                   System.err.println("Parsing " + fileName + "...");
                   // Make the document a URL so relative DTD works.
                   //String uri = new File(fileName).getAbsolutePath();
                   //System.err.println(uri);
                   DocumentBuilderFactory f = DocumentBuilderFactory.newInstance();
                   if (validate)
                   f.setValidating(true);
                   DocumentBuilder p = f.newDocumentBuilder();
                   p.setErrorHandler(new MyErrorHandler(System.err));
                   //XmlDocument doc = XmlDocument.createXMLDocument(file);
                   boolean vaild =  p.isValidating();
                   if (vaild) {
                        System.out.println("yes parsing");
                        Document doc = p.parse(file); // <<<< ERROR
                   System.out.println("Parsed OK");
              } catch (SAXParseException ex) {
                   System.err.println("+================================+");
                   System.err.println("|       *SAX Parse Error*        |");
                   System.err.println("+================================+");
                   System.err.println(ex.toString());
                   System.err.println("At line " + ex.getLineNumber());
                   System.err.println("+================================+");
              } /**catch (RuntimeException ex) {
                   System.err.println("+================================+");
                   System.err.println("|       *SAX Parse Error*        |");
                   System.err.println("+================================+");
                   System.err.println(ex.toString());
                   //System.err.println("At line " + ex.getLineNumber());
                   //System.err.println("At line " + ex.getMessage());
                   System.err.println("+================================+");
              }**/ catch (SAXException ex) {
                   System.err.println("+================================+");
                   System.err.println("|          *SAX Error*           |");
                   System.err.println("+================================+");
                   System.err.println(ex.toString());
                   System.err.println("+================================+");
              /*}} catch (SAXNotRecognizedException  ex) {
                   System.err.println(" no SAX");*/
              } catch (ParserConfigurationException ex) {
                   System.err.println(" ???");
               } catch (IOException ex) {
                   System.err.println("+================================+");
                   System.err.println("|           *XML Error*          |");
                   System.err.println("+================================+");
                   System.err.println(ex.toString());
    private static class JFileChooserrv {
         JFileChooserrv(JFrame f, boolean vverabreiten) {
              String openfile;
              String verror;
              boolean validate = true;
              final JFrame frame = f;
              String vFilename = "Z:\\Boorberg\\parsen_vista\\daten";
              //String vFilename = "C:\\";
              File vFile = new File(vFilename);
              final JFileChooser chooser = new JFileChooser(vFile);
              JFileFilter filter = new JFileFilter();
              filter.addType("xml");
              filter.addType("sgml");
              filter.addType("html");
              filter.addType("java");
              filter.setDescription("strukturfiles");
              chooser.addChoosableFileFilter(filter);
              boolean vjeas = true;
              chooser.setMultiSelectionEnabled(vjeas);
              int returnVal = chooser.showOpenDialog(frame);
              if (returnVal == JFileChooser.APPROVE_OPTION) {
                   //Array  filearry[] = chooser.getSelectedFiles();
                   //if (vFile = chooser.getSelectedFiles()) {
                   //File  file[] = chooser.getSelectedFiles();
                   File  vfile[] = chooser.getSelectedFiles();
                   //String openfile = new String();
                   int vlenght = vfile.length;
                   if (vlenght>1) {
                        int x=0;
                        while (x< vlenght) {
                                  parse(vfile[x], validate);
                                  x = x +1;
                   if (vlenght<=1) {
                        File v2file = chooser.getSelectedFile();
                             parse(v2file, validate);
              } else {
                   System.out.println("You did not choose a filesystem           object.");
         System.exit(0);
    private static class JFileFilter extends javax.swing.filechooser.FileFilter {
         protected String description, vnew;
         protected ArrayList<String> exts = new ArrayList<String>();
         protected boolean vtrue;
         public void addType(String s) {
              exts.add(s);
         /** Return true if the given file is accepted by this filter. */
         public boolean accept(File f) {
              // Little trick: if you don't do this, only directory names
              // ending in one of the extentions appear in the window.
              if (f.isDirectory()) {
                   return true;
              } else if (f.isFile()) {
                   Iterator it = exts.iterator();
                   while (it.hasNext()) {
                        if (f.getName().endsWith((String)it.next()))
                             return true;
              // A file that didn't match, or a weirdo (e.g. UNIX device file?).
              return false;
         /** Set the printable description of this filter. */
         public void setDescription(String s) {
              description = s;
         /** Return the printable description of this filter. */
         public String getDescription() {
              return description;
    private static class MyErrorHandler implements ErrorHandler {
            // Error handler output goes here
            private PrintStream out;
            MyErrorHandler(PrintStream out) {
                this.out = out;
             * Returns a string describing parse exception details
            private String getParseExceptionInfo(SAXParseException spe) {
                String systemId = spe.getSystemId();
                if (systemId == null) {
                    systemId = "null";
                String info = "URI=" + systemId +
                    " Line=" + spe.getLineNumber() +
                    ": " + spe.getMessage();
                return info;
            // The following methods are standard SAX ErrorHandler methods.
            // See SAX documentation for more info.
            public void warning(SAXParseException spe) throws SAXException {
                   //System.exit(0);
                //out.println("Warning: " + getParseExceptionInfo(spe));
            public void error(SAXParseException spe) throws SAXException {
                   //System.exit(0);
                String message = "Error: " + getParseExceptionInfo(spe);
                throw new SAXException(message);
            public void fatalError(SAXParseException spe) throws SAXException {
                   //System.exit(0);
                String message = "Fatal Error: " + getParseExceptionInfo(spe);
                throw new SAXException(message);
         public static void main(String[] av) {
              JFrame vframe = new JFrame("chose files to pars");
              boolean vverabreiten = true;
              boolean validate = true;
              JFileChooserrv vdateienwaehlen = new JFileChooserrv(vframe, vverabreiten);
    }The Stack Trace i posted in the last Message. But i couldn't read it, i am not a programmer.

  • Has anybody used DocumentBuilder.parse(URL)

    Hi friends
    Has anybody used DocumentBuilder.parse(URL) for make document object.
    I have the following piece of code
    <code>
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    DocumentBuilder builder = factory.newDocumentBuilder();
    System.out.println("| Start | Fetch xml"); // ------------ 1
    Document document = builder.parse("http://some url that gives back XML");
    System.out.println("| Stop | Fetch xml"); // ------------- 2
    </code>
    Now the problem is .. once in a while the code will hang at point 1 and will never reach point 2. Exception handling has been done.. but there are no exceptions being logged. The code simply hangs.
    Please let me know if you have also faced the same or similiar problem.
    Thanking in anticipation
    Partha.

    Is it similar with a file URL instead a http URL.
    Use
    Document document = builder.parse("file://c:/xmlFile");
    instead of
    Document document = builder.parse("http://some url that gives back XML");

  • Make DocumentBuilder.parse ignore DTD references

    Thanks to everyone in advance -
    So this issue looks to be pretty popular, I have found a few solutions, but nothing seems to stop the downloading of dtd files, for instance ones sitting up on w3.org.
    Here are some of the solutions i have found:
    http://stackoverflow.com/questions/155101/make-documentbuilder-parse-ignore-dtd-references
    http://forums.sun.com/thread.jspa?threadID=284209&forumID=34
    When I use this solution:
    myDocumentBuilder.setEntityResolver(new EntityResolver() {
              public InputSource resolveEntity(java.lang.String publicId, java.lang.String systemId)
                     throws SAXException, java.io.IOException
                if (publicId.equals("--myDTDpublicID--"))
                  // this deactivates the open office DTD
                  return new InputSource(new ByteArrayInputStream("<?xml version='1.0' encoding='UTF-8'?>".getBytes()));
                else return null;
    });it still continues to download the dtd.
    Any suggestions?
    Thanks,
    Sam

                        MyDocumentBuilder.setEntityResolver(
                             new EntityResolver() {
                                  public InputSource resolveEntity(java.lang.String publicId, java.lang.String systemId) throws SAXException, java.io.IOException {
                                       if(true){
                                            throw new IOException(publicId +"|"+ systemId);
                                       return null ;
                        );Good eye - It looks like that IOException is never being called - any suggestions?
    Thanks,
    Sam

  • DocumentBuilder parser, DOM doucment object from a XML file error

    Hi guys
    I created a program which parses a xml and creates a DOM document object from
    it. The parser is validating.
    class xmlParser
        //create arrylist to store employee in
        private ArrayList<Employee> employeeStore = new ArrayList<Employee>();
        private DocumentBuilder parser;
        private static Document document;     
        //create an instant of Employee to be added to the arraylist
        private Employee theEmployee = new Employee();
        //create an instant of Address to be added to Employee to again be
        //added to Employee
        private Address employeeAddress = new Address();
        public xmlParser()
        public xmlParser(String myfile) throws IOException 
              //validate the XML document agaisnt the given dtd
              DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
              factory.setValidating(true);
              factory.setIgnoringElementContentWhitespace(true);
              try {
                  parser = factory.newDocumentBuilder();
              }catch(javax.xml.parsers.ParserConfigurationException d) {
                   System.out.println("error with new document builder");
              //create document object (DOM tree) from xml file
              try {
                  document = parser.parse(new File(myfile));
              }catch(org.xml.sax.SAXException e) {
                  System.out.println("Error with parser file still creating xml personnel2");
        } In my main method when i call:
    xmlParser parsertree = new xmlParser("personnel.xml"); the exception keeps getting thrown and i get my my message back "Error with parser file still creating xml personnel2"
    Can't seem to figure it out, any ideas would be great.
    Thanks alot

    Hi,
    A - Check that the xml file is located in the same directory where you
    run your app.
    B - Check that the xml file is correct (in XML way).
    Suggestion : you may print the exception message, it might help.
    Hope that help,
    Jack

  • Is DocumentBuilder.parse(..) reading the whole XML into memory?

    Hello,
    I have a quick question about the following code snippet:
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    factory.setNamespaceAware(true);
    DocumentBuilder builder = factory.newDocumentBuilder();
    Document doc = builder.parse("books.xml");Please have a look at the last line "builder.parse("books.xml");". I would like to use XPath to retrieve some informations of a xml file without having to deserialize the whole file (since the XML file rather big and I need to go through several of them in a loop).
    What exactly does the "builder.parse(...)" method? Is it reading the XML file and writing all the content to memory? Or does it only analyze and read the structure of the XML code? Or in other words, is the text of an element "//books/title" in memory after parsing, or not until I really access the "title" node of that XML?
    Thanks a lot for your help
    Best Regards,
    Ben

    Hi ,
    I did'nt knew how to start a new thread , so i am asking the question here:
    ===========================================================
    I am trying to read a xml file but i am not able to do so properly. I am new to xml .
    am trying to read a xml file of the following format in the staf and stax job xml file:
    <?xml version="1.0" encoding="utf-8"?>
    <operating_system>
    <unix_80sp1>
    <tests type="quick_sanity_test">
    <prerequisitescript>preparequicksanityscript</prerequisitescript>
    <acbuildpath>acbuildpath</acbuildpath>
    <testsuitscript>test quick sanity script</testsuitscript>
    <testdir>quick sanity dir</testdir>
    </tests>
    <machine_name>u80sp1_L004</machine_name>
    <machine_name>u80sp1_L005</machine_name>
    <machine_name>xyz.pxy.dxe.cde</machine_name>
    <vmware id="155.35.3.55">144.35.3.90</vmware>
    <vmware id="155.35.3.56">144.35.3.91</vmware>
    </unix_80sp1>
    </operating_system>
    Here machine_name tag can be n number. I need to read all the machine_name tags in an array , so that i can use them later.
    Also i need to read all the vmware tags in an array (both value and attributes) so that i can use them later. The number of vmware tags can again be n numbers.
    I am trying to use the following code :
    <!-- ******************************************************************* -->
    <!-- Following function is used to parse an XML file and return the DOM -->
    <!-- document object -->
    <!-- ******************************************************************* -->
    <function name="parseXML" scope="local">
    <function-list-args>
    <function-required-arg name="xmlFileName">
    Name of file containing XML to be parsed
    </function-required-arg>
    </function-list-args>
    <sequence>
    <!-- Parse the XML -->
    <script>
    factory = DocumentBuilderFactory.newInstance();
    factory.setValidating(1)
    factory.setIgnoringElementContentWhitespace(0)
    builder = factory.newDocumentBuilder()
    document = builder.parse(xmlFileName)
    </script>
    <script>
    vmware = None
    machine_name = None
    # Get the text value for the element with tag name "vmware"
    nodeList = document.getElementsByTagName("vmware")
    for i in range(nodeList.getLength()):
    node = nodeList.item(i)
    if node.getNodeType() == Node.ELEMENT_NODE:
    children = node.getChildNodes()
    for j in range(children.getLength()):
    thisChild = children.item(j)
    if (thisChild.getNodeType() == Node.TEXT_NODE):
    machine_name = thisChild.getNodeValue()
    # Get the text value for the element with tag name "machine_name"
    nodeList = document.getElementsByTagName("vmware")
    for i in range(nodeList.getLength()):
    node = nodeList.item(i)
    if node.getNodeType() == Node.ELEMENT_NODE:
    children = node.getChildNodes()
    for j in range(children.getLength()):
    thisChild = children.item(j)
    if (thisChild.getNodeType() == Node.TEXT_NODE):
    machine_name = thisChild.getNodeValue()
    </script>
    <return>[machine_name,vmware]</return>
    </sequence>
    </function>
    I am able to read only one value for machine_name (u80sp1_L005) and also one value for vmware
    i.e 144.35.3.91.
    What i want is read all the machine_value tags into a list , so that i can use it later
    Also i want to read all the vmware tags attributes into a list and all corresponding values into another list.
    what i mean is considering the following:_
    <machine_name>u80sp1_L004</machine_name>
    <machine_name>u80sp1_L005</machine_name>
    <machine_name>xyz.pxy.dxe.cde</machine_name>
    <vmware id="155.35.3.55">144.35.3.90</vmware>
    <vmware id="155.35.3.56">144.35.3.91</vmware>
    read all machine_name tag values into one list (u80sp1_L004,u80sp1_L005,xyz.pxy.dxe.cde)
    also all vmware attributes into one list *(155.35.3.55,155.35.3.56).....*and all the vmware values into one list *(144.35.3.90,144.35.3.91)*
    Also a good link to understand parsing using doumentbilder factory would be good help.
    Regards
    Sangram
    mail: [email protected]

  • How to pass an XML file in a war file to the DocumentBuilder.parse

    I am developing a webapp on the struts framework
    I need to parse an XML file 'menu.xml' which I have placed under the 'WEB-INF/classes' folder
    My Action class calls a helper class called XMLMenuBuilder which needs to parse the 'menu.xml'
    Here are code snippets from my classes:
    LogonAction.java
    XMLMenuBuilder builder = new XMLMenuBuilder();
    Vector menuVector = (Vector)builder.renderMenu();XMLMenuBuilder.java
    public Vector renderMenu() throws AppException
      DocumentBuilder builder = factory.newDocumentBuilder();
      Document document = builder.parse( new File(xmlfile) );
    }My Problem is how can I make the builder.parse access the 'menu.xml' file under the 'WEB-INF/classes' folder
    instead of searching for it on the file system
    Any help will be much appreciated

    I got the answer myself
    Got the answer myself. I needed the ActionServlet Context in the ActionClass. This is what I have done...
    It works.
    LogonAction.class
    Code:
    InputStream is = getServlet().getServletContext().getResourceAsStream("/WEB-INF/conf/menu.xml");
    XMLMenuBuilder.java
    Code:
    Document document = builder.parse(is);
    Thanks

  • Regarding DocumentBuilder.parse method returns reference as null value.

    Hi
    We are in the process of migrating code which works on WebSphere/JBOSS to WLS..
    We are using DocumentBuilder object for parsing the Locale related xml data. I understand that the DocumentBuilder is provided by DocumentBuilderFactory which is an interface whose implementation is server specific.
    But when the Document Builder parse method is called with a valid file path, we are getting System.Out of doc.getFirstChild().getLocalName() as null (which ideally should have been the name of the first node). No Errors are observed .
    For WLS, the parser is giving the document object reference as null whereas in other servers like Websphere and JBOSS we are able to parse the same xml with proper object reference.
    Could you please help in this regard?
    Thanks and regards
    Anil

    Hi Vmotamar,
    If you think that the parsers available as part of WebLogic are causing the issues, Then you can use your Own Parsers while migrating to WebLogic Server. I mean Get the Parser Jar files which u used as part of JBoss or WebSphere and put it inside the "APP-INF\lib" directory of your EAR Application or Put them inside "WEB-INF\lib" of your WEBApplication...and then Apply ClassLoader Filtering feature provided by WebLogic ...which allows an application to use It's Own Jars\Classes ...
    Please refer to: http://forums.oracle.com/forums/thread.jspa?threadID=1109267&tstart=150 and in http://weblogic-wonders.com/weblogic/parsers_issues
    Thanks
    Jay SenSharma
    http://weblogic-wonders.com/weblogic/parsers_issues/ (WebLogic Wonders Are Here)

  • (DocumentBuilder).parse return null under jdk 1.5.0

    I would like to understand why the following code return a correct Document instance if it running under jdk 1.4.2 and instead return null if it running under jdk 1.5.0.
    Thanks!
    F.
    import java.io.IOException;
    import java.io.StringReader;
    import javax.xml.parsers.DocumentBuilder;
    import javax.xml.parsers.DocumentBuilderFactory;
    import javax.xml.parsers.ParserConfigurationException;
    import org.w3c.dom.Document;
    import org.xml.sax.InputSource;
    import org.xml.sax.SAXException;
    String test = "<root>" + "" + "</root>";
    StringReader sreader = new StringReader (test);
    InputSource is = new InputSource(sreader);
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    DocumentBuilder builder;
    builder = factory.newDocumentBuilder();
    Document doc =  builder.parse(is);
    System.out.println("Document is: " + doc);

    Because you're using the toString() method to display the Document. It works differently in Java 5 than it did in Java 1.4. This is perfectly okay because the DOM specification doesn't say anything about what the toString() method should return. If you relied on that for anything other than debugging then you were relying on an undocumented feature. Shouldn't do that.

  • DocumentBuilder.parse() hangs (net access?)

    I have trouble getting the following lines of code to work. It works on my dev machine, but not in the live env.
    /* Converts String -> XML DOM Document */
    StringReader reader = new StringReader(s); // s is a string containg (valid) xml
    InputSource src = new InputSource(reader);
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    DocumentBuilder db = dbf.newDocumentBuilder();
    Document d = db.parse(src);It hangs with the last last line, eventually resulting in this exception (truncated):
    java.net.ConnectException: Connection timed out
            at java.net.PlainSocketImpl.socketConnect(Native Method)
            at java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
            at java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
            at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
            at java.net.Socket.connect(Socket.java:519)
            at java.net.Socket.connect(Socket.java:469)
            at sun.net.NetworkClient.doConnect(NetworkClient.java:157)
            at sun.net.www.http.HttpClient.openServer(HttpClient.java:388)
            at sun.net.www.http.HttpClient.openServer(HttpClient.java:515)
            at sun.net.www.http.HttpClient.<init>(HttpClient.java:233)
            at sun.net.www.http.HttpClient.New(HttpClient.java:306)
            at sun.net.www.http.HttpClient.New(HttpClient.java:318)
            at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:792)
            at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:733)
            at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:658)
            at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:981)
            at org.apache.xerces.impl.XMLEntityManager.setupCurrentEntity(Unknown Source)
            at org.apache.xerces.impl.XMLEntityManager.startEntity(Unknown Source)
            at org.apache.xerces.impl.XMLEntityManager.startDTDEntity(Unknown Source)
            at org.apache.xerces.impl.XMLDTDScannerImpl.setInputSource(Unknown Source)
            at org.apache.xerces.impl.XMLDocumentScannerImpl$DTDDispatcher.dispatch(Unknown Source)
            at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
            at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
            at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
            at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
            at org.apache.xerces.parsers.DOMParser.parse(Unknown Source)
            at org.apache.xerces.jaxp.DocumentBuilderImpl.parse(Unknown Source)Looks to me like it tries to validate against a DTD that is in the document by trying to download it. Well, how do i turn this feature off, or supply a DTD locally in the file system?

    Try calling DocumentBuilder.setEntityResolver() with a custom EntityResolver which redirects the dtd url to a local file.

  • DocumentBuilder.parse when URI requires a login

    Hello.
    I am trying to read xml from a URL and am succeeding when the URL does not require a login. However, when a login is required, instead of getting the XML, I am getting what an anonymous user who would access the URL through a browser would see - a login screen.
    Is there any way for me to pass the credentials of a user before trying to parse the document located at the URL? I don't see anything obvious in the DocumentBuilder nor in the DocumentBuilderFactory classes (unless I am supposed to use the setAttribute method of the DocumentBuilderFactory class).
    Any advice?
    TIA.
    *[Edited]*
    OK, I think I am getting somewhere with the java.net.Authenticator class. However, now that I have implemented that code, I am getting an error that I understand can be solved with:
    grant {
    permission java.net.NetPermission
         "setDefaultAuthenticator";
    permission java.net.NetPermission
         "requestPasswordAuthentication";
    Specifically, the error is:
    Access denied (java.net.NetPermission setDefaultAuthenticator)
    My doubt is to where to place this block of code :(
    Once again, I ask for assistance.
    Edited by: user1310368 on Oct 15, 2010 12:41 PM
    *[Edited, again...]*
    OK, I undertand that the grant section is supposed to go into the policy file and typically (from what I have seen) is used by applets. However, since this is not an applet, I am baffled as to how to grant this code the necessary rights.
    Edited by: user1310368 on Oct 15, 2010 1:11 PM

    Yes - I investigated the apache http client but again, that would entail installation/modification of a machine to which I have no rights - real bummer :(
    And as for the authentication method, it is using session authentication so I pretty sure I won't be able to add the info into the header. In fact, I tried this before using Microsoft's WinHttp.WinHttpRequest.5.1 in a different piece of (non-Java) code.
    Anyway, thanks again for the help. I'm not sure if I should just close this thread because at this point, I don't believe that any suggestions would be helpful - I am more or less stuck at the mercy of the admins.

  • DocumentBuilder.parse() fails after CLOB is updated

    I have written a java application that reads XML content stores in a CLOB column in a 9.2.0.5 database. The application works just fine until the contents of the CLOB is modified, then I get the fatal error shown below.
    I am using classes from the javax.xml.parsers.* package to process the XML content. Using an OracleStatement and OracleResultSet I read the CLOB column into a CLOB variable (named clob) using the getCLOB() method. I then create an InputSource using the following statement:
    InputSource source = new InputSource(clob.getAsciiStream());
    and then create a Document using the following the statements:
    builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
    outDoc = builder.parse(source);     
    The parse method works fine until the CLOB is updated (using TOAD) and then it fails. I have modified the program to print the contents of the CLOB using the methods described in the Oracle JDBC guide; using a while loop, CLOB.read() and StringBuffer. I have noticed that the output before and after the CLOB is updated is definitely different; there is extraneous information following the XML document - I just don't understand why this happens.
    [Fatal Error] :23:10: Content is not allowed in trailing section.
    org.xml.sax.SAXParseException: Content is not allowed in trailing section.
    at org.apache.xerces.parsers.DOMParser.parse(Unknown Source)
    at org.apache.xerces.jaxp.DocumentBuilderImpl.parse(Unknown Source)
    at com.embMessageProcessor.processMsgList(embMessageProcessor.java:91)
    at com.embMessageProcessor.main(embMessageProcessor.java:28)
    Press any key to continue...

    rangelot,
    Could be a bug in the JDBC driver you are using. Sorry, I couldn't find any details, in your post, of which one you are using.
    JDBC drivers also need to be compatible with JDK versions. Have you verified that yours is compatible?
    JDBC drivers are supposed to be backward compatible, so maybe using the latest Oracle JDBC driver may resolve this problem.
    Have you checked the MetaLink Web site? This may be a known issue. If not, then you can always report it as a bug (also on MetaLink).
    Good Luck,
    Avi.

  • DocumentBuilder.Parse() if converting & amp; into &

    Hi,
    I have a dom document which I have converted into a String and one of the Nodes had & amp; in it.
    When I then parse the string back into a Dom Document the parser converts the & amp; back into a &.... and this causes my problems later on.
    Does anyone know How I can get round this.
    The whole I am converting a document into a string and back again is because the Dom document isn't serializable.
    Any ideas?
    Jag

    well, that's the job of the parser to resolve entities, therefore converting &amp; into a & is correct.

Maybe you are looking for