#823 ✓worksforme
gcs

XPath Namespaces with HttpResponse.getXml()

Reported by gcs | May 11th, 2011 @ 08:41 PM | in 1.3 (closed)

Framework version:1.2
Platform you're using:os x

Reproduction steps:
HttpResponse res = WS.url(someurl).get();
Document doc = res.getXml();
String foobar = XPath.selectText("foo:bar", doc, mapOfNamespaces);

foobar will always be null -- it can't be found by xpath.

Details:
I think this is happening b/c the Document was created using a DocumentBuilderFactory
that isn't namespace aware in HttpResponse.getXml().

Comments and changes to this ticket

  • Morten Kjetland

    Morten Kjetland May 14th, 2011 @ 07:49 PM

    Can you please provide code that shows the problem. We have to know what xml is returned so we can try to reproduce the problem

  • Metrex

    Metrex May 14th, 2011 @ 08:46 PM

    Yes, this is correct. In the .getXML function the namespace awareness is not set.
    This line should be changed from:
    DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder();
    to:
    DocumentBuilderFactory xmlFact = DocumentBuilderFactory.newInstance();
    xmlFact.setNamespaceAware(true);
    DocumentBuilder builder = xmlFact.newDocumentBuilder();

    The same problem exists in the XML lib in the getDocument function:
    DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
    dbf.setNamespaceAware(true); //Add this line!

  • gcs

    gcs May 14th, 2011 @ 10:08 PM

    Here is a test case.


    public class XmlNamespaceTest extends UnitTest {

    @Test
    public void testWithoutNamespaceAware() { 
        Document doc = WS.url("http://feeds.feedburner.com/TechCrunch").get().getXml(); 
        assertNotNull(XPath.selectText("//sy:updatePeriod",doc, ns)); 
    }
    
    @Test 
    public void testWithNamespaceAware() { 
        Document doc = getXml(
             WS.url("http://feeds.feedburner.com/TechCrunch").get(),
             "UTF-8"); 
        assertNotNull(XPath.selectText("//sy:updatePeriod", doc, ns)); 
    }
    
    static Map<String, String> ns = new HashMap<String, String>(); 
    static { 
        ns.put("sy", "http://purl.org/rss/1.0/modules/syndication/"); 
    }
    
    public Document getXml(HttpResponse response, String encoding) {
        try {
            InputSource source = new InputSource(response.getStream());
            source.setEncoding(encoding);
            DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance(); 
            factory.setNamespaceAware(true); 
            DocumentBuilder builder = factory.newDocumentBuilder();
            // DocumentBuilder builder = DocumentBuilderFactory.newInstance().newDocumentBuilder(); 
            builder.setEntityResolver(new NoOpEntityResolver());
            return builder.parse(source);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
    

    }

  • Erwan Loisant

    Erwan Loisant May 16th, 2011 @ 08:57 AM

    • Assigned user set to “Erwan Loisant”
  • Nicolas Leroux

    Nicolas Leroux January 1st, 2013 @ 08:09 PM

    • State changed from “new” to “worksforme”
    • Assigned user changed from “Erwan Loisant” to “Nicolas Leroux”
    • Milestone set to 1.3
  • Micah Morgan

    Micah Morgan July 14th, 2019 @ 10:25 AM

    Start a new string and divide your all sections different. The https://www.proessaywriting.com/research-paper/ provide us a free guide in which they explain how it is easy to do work on it.

Please Sign in or create a free account to add a new ticket.

With your very own profile, you can contribute to projects, track your activity, watch tickets, receive and update tickets through your email and much more.

New-ticket Create new ticket

Create your profile

Help contribute to this project by taking a few moments to create your personal profile. Create your profile »

<h2>Play framework</h2>

Play makes it easier to build Web applications with Java. It is a clean alternative to bloated Enterprise Java stacks. It focuses on developer productivity and targets RESTful architectures. Learn more on the <a href="http://www.playframework.org">http://www.playframework.org</a> website.<br><br>

<h2>Source code is hosted on github</h2>Check out our repository at <a href="http://github.com/playframework/play">http://github.com/playframework/play</a><br><br>

<h2>Contributing, creating a patch</h2> Please read the <a href="http://play.lighthouseapp.com/projects/57987/contributor-guide">contributor guide</a><br><br>

<h2>Reporting Security Vulnerabilities</h2> Since all bug reports are public, please report any security vulnerability directly to <em>guillaume dot bort at gmail dot com</em>.<br><br>

<h2>Creating a bug report</h2> Bug reports are incredibly helpful, so take time to report bugs and request features in our ticket tracker. We’re always grateful for patches to Play’s code. Indeed, bug reports with attached patches will get fixed far quickly than those without any.<br><br>

Please include as much relevant information as possible including the exact framework version you're using and a code snippet that reproduces the problem.<br><br>

Don't have too much expectations. Unless the bug is really a serious "everything is broken" thing, you're creating a ticket to start a discussion. Having a patch (or a branch on Github we can pull from) is better, but then again we'll only pull high quality branches that make sense to be in the core of Play.

Attachments

Pages