drools-eclipse/org.guvnor.tools/src/org/guvnor/tools/utils/webdav/StreamProcessingUtils.java
public static Map<String, ResourceProperties> parseListing(String base, InputStream is) throws Exception {
        Map<String, ResourceProperties> res = new HashMap<String, ResourceProperties>();
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        factory.setNamespaceAware(true);
        DocumentBuilder parser = factory.newDocumentBuilder();
        Document doc = parser.parse(is);
        NodeList nl = doc.getElementsByTagNameNS(DAV_NS, "response"); //$NON-NLS-1$
        for (int i = 0; i < nl.getLength(); i++) {
            Element oneElem = (Element)nl.item(i);
            NodeList resName = oneElem.getElementsByTagNameNS(DAV_NS, "href"); //$NON-NLS-1$
            assert(resName.getLength() == 1);
            String bareName = extractOverlap(base, URLDecoder.decode(resName.item(0).getTextContent(), "UTF-8"));
            if (bareName.trim().length() > 0) {
                ResourceProperties props = new ResourceProperties();
                NodeList propList = oneElem.getElementsByTagNameNS(DAV_NS, "resourcetype"); //$NON-NLS-1$
                assert(propList.getLength() == 1);
                NodeList resTypeList = ((Element)propList.item(0)).getElementsByTagNameNS(DAV_NS, "collection"); //$NON-NLS-1$
                assert(resTypeList.getLength() < 2);
                if (resTypeList.getLength() == 1) {
                    props.setDirectory(true);
                }
                propList = oneElem.getElementsByTagNameNS(DAV_NS, "creationdate"); //$NON-NLS-1$
                if (propList.getLength() > 0) {
                    props.setCreationDate(propList.item(0).getTextContent());
                }
                propList = oneElem.getElementsByTagNameNS(DAV_NS, "getlastmodified"); //$NON-NLS-1$
                if (propList.getLength() > 0) {
                    props.setLastModifiedDate(propList.item(0).getTextContent());
                }
                String normBase = base.trim().endsWith("/")?base.trim():base.trim() + "/"; //$NON-NLS-1$ //$NON-NLS-2$
                props.setBase(normBase);
                res.put(bareName, props);
            }
        }
        return res;
    }
public static Map<String, ResourceProperties> parseListing(String base, InputStream is) throws Exception {
        Map<String, ResourceProperties> res = new HashMap<String, ResourceProperties>();
        DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
        factory.setNamespaceAware(true);
        DocumentBuilder parser = factory.newDocumentBuilder();
        Document doc = parser.parse(is);
        NodeList nl = doc.getElementsByTagNameNS(DAV_NS, "response"); //$NON-NLS-1$
        for (int i = 0; i < nl.getLength(); i++) {
            Element oneElem = (Element)nl.item(i);
            NodeList resName = oneElem.getElementsByTagNameNS(DAV_NS, "href"); //$NON-NLS-1$
            assert(resName.getLength() == 1);
            String bareName = extractOverlap(base, URLDecoder.decode(resName.item(0).getTextContent(), "UTF-8"));
            if (bareName.trim().length() > 0) {
                ResourceProperties props = new ResourceProperties();
                NodeList propList = oneElem.getElementsByTagNameNS(DAV_NS, "resourcetype"); //$NON-NLS-1$
                assert(propList.getLength() == 1);
                NodeList resTypeList = ((Element)propList.item(0)).getElementsByTagNameNS(DAV_NS, "collection"); //$NON-NLS-1$
                assert(resTypeList.getLength() < 2);
                if (resTypeList.getLength() == 1) {
                    props.setDirectory(true);
                }
                propList = oneElem.getElementsByTagNameNS(DAV_NS, "creationdate"); //$NON-NLS-1$
                if (propList.getLength() > 0) {
                    props.setCreationDate(propList.item(0).getTextContent());
                }
                propList = oneElem.getElementsByTagNameNS(DAV_NS, "getlastmodified"); //$NON-NLS-1$
                if (propList.getLength() > 0) {
                    props.setLastModifiedDate(propList.item(0).getTextContent());
                }
                String normBase = base.trim().endsWith("/")?base.trim():base.trim() + "/"; //$NON-NLS-1$ //$NON-NLS-2$
                props.setBase(normBase);
                res.put(bareName, props);
            }
        }
        return res;
    }
$NON-NLS-1$