Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

JDOM 2.x vs 1.x compatibility problem when parsing DOM documents #138

Closed
rolfl opened this issue Nov 5, 2014 · 0 comments
Closed

JDOM 2.x vs 1.x compatibility problem when parsing DOM documents #138

rolfl opened this issue Nov 5, 2014 · 0 comments
Labels

Comments

@rolfl
Copy link
Collaborator

@rolfl rolfl commented Nov 5, 2014

JDOM 2.x handles namespace aware documents well, but documents created manually, in a non-aware way, and then parsed by DOM builder, do not produce the 'right' results in JDOM 2.x even though JDOM 1.x produces the correct output.

See Stack Overflow - How to prevent XMLOutputter in JDOM2 from cutting attribute name (namespace-part)?

This is not to say that JDOM 2.x is doing the wrong thing, just that JDOM 1.x handles poorly-created DOM input better than JDOM 2.x.

    DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance();
    org.w3c.dom.Document doc = dbFactory.newDocumentBuilder().newDocument();
    doc.setXmlVersion("1.0");

    Element root = doc.createElement("Document");

    root.setAttribute("xmlns", "urn:iso:foo");
    root.setAttribute("xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance");
    root.setAttribute("xsi:schemaLocation", "urn:iso:foo bar.xsd");
    doc.appendChild(root);

The above code, when processed by JDOM 1.x DOMBuilder, produces:

<?xml version="1.0" encoding="UTF-8"?>
<Document xmlns="urn:iso:foo" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:iso:foo bar.xsd" />

but when processed by JDOM 2.x it produces:

<?xml version="1.0" encoding="UTF-8"?>
<Document xmlns="urn:iso:foo" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" schemaLocation="urn:iso:foo bar.xsd" />

(note the missing xsi: prefix).

If the DOM document is built with:

    root.setAttribute("xmlns", "urn:iso:foo");
    root.setAttributeNS("http://www.w3.org/2000/xmlns/", "xmlns:xsi", "http://www.w3.org/2001/XMLSchema-instance");
    root.setAttributeNS("http://www.w3.org/2001/XMLSchema-instance", "xsi:schemaLocation", "urn:iso:foo bar.xsd");
    doc.appendChild(root);

then it works as expected

@rolfl rolfl added the Target 2.0.x label Feb 13, 2015
rolfl added a commit that referenced this issue Feb 15, 2015
JDOM 1.x managed to handle badly-built DOM documents that had implied
namespaces in place.
@rolfl rolfl closed this in ae05d54 Feb 15, 2015
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Linked pull requests

Successfully merging a pull request may close this issue.

None yet
1 participant
You can’t perform that action at this time.