Hello Fabian,

no pbs, you're welcome.

Best regards,
Thierry Boileau

Ok, we've found the solution to the problem. It was indeed a namespace
> issue, the following code excerpt works OK:
>
> public Representation propfind(Representation data)     throws
> ResourceException {
>         List<DavProperty> reqDavProps = new ArrayList<DavProperty>();
>         if (data != null) {
>            try {
>                DomRepresentation reqXML = new DomRepresentation(data);
>                reqXML.setNamespaceAware(true);
>                reqXML.getNamespaces().put("d", Dav.DAVNS);
>                NodeList props = reqXML.getNodes("/d:propfind/d:prop/*");
>                Iterator<org.w3c.dom.Node> nit = props.iterator();
>                while (nit.hasNext()) {
>                    org.w3c.dom.Node n = nit.next();
>                     if (n.getNodeType() == org.w3c.dom.Node.ELEMENT_NODE) {
>                        Element e = (Element) n;
>                        reqDavProps.add(new
> DavProperty(e.getNamespaceURI(), e.getTagName()));
>                    }
>                }
>                getLogger().info(String.format("Requested DAV
> properties: %s", reqDavProps));
>            } catch (Exception ex) {
>                ex.printStackTrace();
>
>
> getLogger().warning(Localisation.getMessage("core.err.res.wksp.cont.propfind.bad.xml",
> ex));
>            }
>        }
>         // Rest of the propfind handler here
> }
>
> Sorry if I have bothered you with this (non-)issue, and thanks for your
> support.
>
> 2011/9/28 Fabián Mandelbaum <fmandelb...@gmail.com>:
> > Hello Thierry, thanks for your answer. I forgot to tell you that I've
> > already tried that, but in any way, I've tried differently now, by
> > using DomRepresentation#setNamespaceAware (my test was with the W3C
> > classes directly), and here's the result:
> >
> > 28/09/2011 07:50:55
> > com.calenco.ext.webdav.resource.DavClassificationsServerResource
> > propfind
> > INFO: ++++DBG: DomRepresentation is NS aware (before setting to false)?
> false
> > 28/09/2011 07:50:55
> > com.calenco.ext.webdav.resource.DavClassificationsServerResource
> > propfind
> > INFO: ++++DBG: DomRepresentation is NS aware  (after setting to false)?
> false
> > 28/09/2011 07:50:56
> > com.calenco.ext.webdav.resource.DavClassificationsServerResource
> > propfind
> > INFO: Requested DAV properties: []
> > 28/09/2011 07:50:56 org.restlet.engine.log.LogFilter afterHandle
> > INFO: 2011-09-28        07:50:56        0:0:0:0:0:0:0:1
> ad...@calenco.com       0:0:0:0:0:0:0:1 9000    PROPFIND
>  /workspaces/W1/classifications/ -       207     -       288     597
> http://localhost:9000   cadaver/0.23.3
> > neon/0.29.6     -
> >
> > As you can see, the DomRepresentation was already constructed without
> > being NS-aware, but resetting it anyway didn't change anything, the
> > requested DAV properties list is still empty (meaning basically that
> > there was no XML node selected by the XPath query).
> >
> > For completness, I've also tried to use
> > DomRepresentation#setNamespaceAware to set it to true, and the result
> > doesn't change at all:
> >
> > 28/09/2011 07:56:49
> > com.calenco.ext.webdav.resource.DavClassificationsServerResource
> > propfind
> > INFO: ++++DBG: DomRepresentation is NS aware (before setting to true)?
> false
> > 28/09/2011 07:56:49
> > com.calenco.ext.webdav.resource.DavClassificationsServerResource
> > propfind
> > INFO: ++++DBG: DomRepresentation is NS aware  (after setting to true)?
> true
> > 28/09/2011 07:56:49
> > com.calenco.ext.webdav.resource.DavClassificationsServerResource
> > propfind
> > INFO: Requested DAV properties: []
> > 28/09/2011 07:56:50 org.restlet.engine.log.LogFilter afterHandle
> > INFO: 2011-09-28        07:56:50        0:0:0:0:0:0:0:1
> ad...@calenco.com       0:0:0:0:0:0:0:1 9000    PROPFIND
>  /workspaces/W1/classifications/ -       207     -       288     1113
> http://localhost:9000   cadaver/0.23.3
> > neon/0.29.6     -
> >
> > Any other ideas?
> >
> > Thanks in advance...
> >
> > On Wed, Sep 28, 2011 at 5:04 AM, Thierry Boileau
> > <thierry.boil...@noelios.com> wrote:
> >> Hello Fabian,
> >>
> >> I think there is a link with the "DAV" namespace. Could you try by
> making
> >> the DomRepresentation namespace unaware?
> >>
> >> Best regards,
> >> Thierry Boileau
> >>
> >>
> >>
> >>
> >>> Hello,
> >>>
> >>> I've updated restlet libs for my app to 2.0.9, and now PROPFIND
> >>> (WebDAV) requests are not working anymore. Basically, a WebDAV request
> >>> has (can have, but most do ;)) an XML entity body. My handler is doing
> >>> this (code didn't change):
> >>>
> >>>    @Override
> >>>    public Representation propfind(Representation reqData) throws
> >>> ResourceException {
> >>>        setCustomHttpHeader("DAV", "1,2"); // NOI18N // DAV level 2
> support
> >>>        List<DavProperty> reqDavProps = new ArrayList<DavProperty>();
> >>>        if (reqData != null) {
> >>>            try {
> >>>                final DomRepresentation reqXML = new
> >>> DomRepresentation(reqData);
> >>>                //getLogger().info("XML body:\n" + reqData.getText());
> >>>                NodeList props = reqXML.getNodes("/propfind/prop/*"); //
> >>> NOI18N
> >>>                for (int i = 0; i < props.getLength(); i++) {
> >>>                    Node n = props.get(i);
> >>>                    if (n.getNodeType() == Node.ELEMENT_NODE) {
> >>>                        Element e = (Element) n;
> >>>                        reqDavProps.add(new
> >>> DavProperty(e.getAttribute("xmlns"), e.getTagName())); // NOI18N
> >>>                    }
> >>>                }
> >>>                getLogger().info(String.format("Requested DAV
> >>> properties: %s", reqDavProps));
> >>>            } catch (Exception ex) {
> >>>                ex.printStackTrace();
> >>>
> >>>
> >>>
> getLogger().warning(Localisation.getMessage("core.err.res.wksp.cont.propfind.bad.xml",
> >>> ex)); // NOI18N
> >>>            }
> >>>        }
> >>>        // Rest of the handler code here, not reproduced
> >>>    }
> >>>
> >>> With 2.0.9 I get *0* requested dav properties (it's ok for the 1st
> >>> PROPFIND request which doesn't have an entity body, but it's not OK
> >>> for the subsequent PROPFIND request which does have an entity body).
> >>>
> >>> If I remove the comment from the log tracing line I *do* see the XML
> >>> text of the request body on the logs, reqData.getMediaType() is
> >>> correctly set to text/xml (Microsoft "web folders" client) or
> >>> application/xml (cadaver command line DAV client). Removing the
> >>> comment from the log trace though, raises a MalformedURLException when
> >>> trying to do reqXML.getNodes("/propfind/prop/*"), here's the full
> >>> stack trace (including the XML entity body of the request, so you can
> >>> see what a PROPFIND DAV request looks like):
> >>>
> >>> Sep 22, 2011 8:49:59 AM
> >>> com.calenco.core.resource.workspace.ClassificationsServerResource
> >>> propfind
> >>> INFO: XML body:
> >>> <?xml version="1.0" ?>
> >>> <propfind xmlns="DAV:">
> >>> <prop>
> >>> <name/>
> >>> <parentname/>
> >>> <href/>
> >>> <ishidden/>
> >>> <iscollection/>
> >>> <isreadonly/>
> >>> <getcontenttype/>
> >>> <contentclass/>
> >>> <getcontentlanguage/>
> >>> <creationdate/>
> >>> <lastaccessed/>
> >>> <getlastmodified/>
> >>> <getcontentlength/>
> >>> <resourcetype/>
> >>> <isstructureddocument/>
> >>> <defaultdocument/>
> >>> <displayname/>
> >>> <isroot/>
> >>> </prop>
> >>> </propfind>
> >>>
> >>> java.lang.RuntimeException: java.net.MalformedURLException
> >>>        at
> >>>
> org.restlet.ext.xml.XmlRepresentation.internalEval(XmlRepresentation.java:556)
> >>>        at
> >>>
> org.restlet.ext.xml.XmlRepresentation.getNodes(XmlRepresentation.java:437)
> >>>        at
> >>>
> com.calenco.core.resource.workspace.ClassificationsServerResource.propfind(ClassificationsServerResource.java:225)
> >>>        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> >>>        at
> >>>
> sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
> >>>        at
> >>>
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
> >>>        at java.lang.reflect.Method.invoke(Method.java:597)
> >>>        at
> >>> org.restlet.resource.ServerResource.doHandle(ServerResource.java:446)
> >>>        at
> >>> org.restlet.resource.ServerResource.doHandle(ServerResource.java:546)
> >>>        at
> >>>
> org.restlet.resource.ServerResource.doNegotiatedHandle(ServerResource.java:587)
> >>>        at
> >>>
> org.restlet.resource.ServerResource.doConditionalHandle(ServerResource.java:299)
> >>>        at
> >>> org.restlet.resource.ServerResource.handle(ServerResource.java:846)
> >>>        at org.restlet.resource.Finder.handle(Finder.java:510)
> >>>        at org.restlet.routing.Filter.doHandle(Filter.java:156)
> >>>        at org.restlet.routing.Filter.handle(Filter.java:203)
> >>>        at org.restlet.routing.Router.doHandle(Router.java:497)
> >>>        at org.restlet.routing.Router.handle(Router.java:737)
> >>>        at org.restlet.routing.Filter.doHandle(Filter.java:156)
> >>>        at org.restlet.routing.Filter.handle(Filter.java:203)
> >>>        at org.restlet.routing.Filter.doHandle(Filter.java:156)
> >>>        at org.restlet.routing.Filter.handle(Filter.java:203)
> >>>        at org.restlet.routing.Router.doHandle(Router.java:497)
> >>>        at org.restlet.routing.Router.handle(Router.java:737)
> >>>        at org.restlet.routing.Filter.doHandle(Filter.java:156)
> >>>        at org.restlet.routing.Filter.handle(Filter.java:203)
> >>>        at org.restlet.routing.Filter.doHandle(Filter.java:156)
> >>>        at org.restlet.routing.Filter.handle(Filter.java:203)
> >>>        at org.restlet.routing.Filter.doHandle(Filter.java:156)
> >>>        at
> >>>
> org.restlet.engine.application.StatusFilter.doHandle(StatusFilter.java:151)
> >>>        at org.restlet.routing.Filter.handle(Filter.java:203)
> >>>        at org.restlet.routing.Filter.doHandle(Filter.java:156)
> >>>        at org.restlet.routing.Filter.handle(Filter.java:203)
> >>>        at org.restlet.engine.ChainHelper.handle(ChainHelper.java:111)
> >>>        at
> >>>
> org.restlet.engine.application.ApplicationHelper.handle(ApplicationHelper.java:72)
> >>>        at org.restlet.Application.handle(Application.java:388)
> >>>        at org.restlet.routing.Filter.doHandle(Filter.java:156)
> >>>        at org.restlet.routing.Filter.handle(Filter.java:203)
> >>>        at org.restlet.routing.Router.doHandle(Router.java:497)
> >>>        at org.restlet.routing.Router.handle(Router.java:737)
> >>>        at org.restlet.routing.Filter.doHandle(Filter.java:156)
> >>>        at org.restlet.routing.Filter.handle(Filter.java:203)
> >>>        at org.restlet.routing.Router.doHandle(Router.java:497)
> >>>        at org.restlet.routing.Router.handle(Router.java:737)
> >>>        at org.restlet.routing.Filter.doHandle(Filter.java:156)
> >>>        at
> >>>
> org.restlet.engine.application.StatusFilter.doHandle(StatusFilter.java:151)
> >>>        at org.restlet.routing.Filter.handle(Filter.java:203)
> >>>        at org.restlet.routing.Filter.doHandle(Filter.java:156)
> >>>        at org.restlet.routing.Filter.handle(Filter.java:203)
> >>>        at org.restlet.engine.ChainHelper.handle(ChainHelper.java:111)
> >>>        at org.restlet.Component.handle(Component.java:388)
> >>>        at org.restlet.Server.handle(Server.java:488)
> >>>        at org.restlet.engine.ServerHelper.handle(ServerHelper.java:71)
> >>>        at
> >>>
> org.restlet.engine.http.HttpServerHelper.handle(HttpServerHelper.java:150)
> >>>        at
> >>>
> org.restlet.ext.jetty.JettyServerHelper$WrappedServer.handle(JettyServerHelper.java:167)
> >>>        at
> >>>
> org.eclipse.jetty.server.HttpConnection.handleRequest(HttpConnection.java:594)
> >>>        at
> >>>
> org.eclipse.jetty.server.HttpConnection$RequestHandler.content(HttpConnection.java:1059)
> >>>        at
> org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:764)
> >>>        at
> >>> org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:217)
> >>>        at
> >>> org.eclipse.jetty.server.HttpConnection.handle(HttpConnection.java:424)
> >>>        at
> >>>
> org.eclipse.jetty.io.nio.SelectChannelEndPoint.run(SelectChannelEndPoint.java:506)
> >>>        at
> >>>
> org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:436)
> >>>        at java.lang.Thread.run(Thread.java:662)
> >>> Caused by: java.net.MalformedURLException
> >>>        at java.net.URL.<init>(URL.java:601)
> >>>        at java.net.URL.<init>(URL.java:464)
> >>>        at java.net.URL.<init>(URL.java:413)
> >>>        at
> >>> org.apache.xerces.impl.XMLEntityManager.setupCurrentEntity(Unknown
> Source)
> >>>        at
> >>> org.apache.xerces.impl.XMLVersionDetector.determineDocVersion(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)
> >>>        at
> >>>
> org.restlet.ext.xml.DomRepresentation.getDocument(DomRepresentation.java:169)
> >>>        at
> >>>
> org.restlet.ext.xml.XmlRepresentation.evaluate(XmlRepresentation.java:270)
> >>>        at
> >>>
> org.restlet.ext.xml.XmlRepresentation.internalEval(XmlRepresentation.java:552)
> >>>        ... 61 more
> >>> Sep 22, 2011 8:53:20 AM
> >>> com.calenco.core.resource.workspace.ClassificationsServerResource
> >>> propfind
> >>> WARNING: Bad XML in the PROPFIND request body:
> >>> java.lang.RuntimeException: java.net.MalformedURLException
> >>> Sep 22, 2011 8:53:20 AM org.restlet.engine.log.LogFilter afterHandle
> >>> INFO: 2011-09-22        08:53:20        192.168.1.102
> ad...@calenco.com
> >>>       192.168.1.10    9000    PROPFIND
>  /workspaces/W1/classifications
> >>>  -       207     -       380     32      http://192.168.1.10:9000
> >>>  Microsoft
> >>> Data Access Internet Publishing Provider DAV 1.1        -
> >>>
> >>> I've tried with the following code to parse the request XML, and got
> >>> the same results:
> >>>
> >>>            DocumentBuilderFactory dbf =
> >>> DocumentBuilderFactory.newInstance();
> >>>            dbf.setNamespaceAware(true);
> >>>            try {
> >>>                Document doc =
> >>> dbf.newDocumentBuilder().parse(reqData.getStream());
> >>>                XPath xp = XPathFactory.newInstance().newXPath();
> >>>                org.w3c.dom.NodeList props = (org.w3c.dom.NodeList)
> >>> xp.evaluate("/propfind/prop/*", doc, XPathConstants.NODESET);
> >>>                for (int i = 0; i < props.getLength(); i++) {
> >>>                    org.w3c.dom.Node n = props.item(i);
> >>>                    if (n.getNodeType() ==
> org.w3c.dom.Node.ELEMENT_NODE) {
> >>>                        Element e = (Element) n;
> >>>                        reqDavProps.add(new
> >>> DavProperty(e.getAttribute("xmlns"), e.getTagName()));
> >>>                    }
> >>>                }
> >>>                getLogger().info(String.format("Requested DAV
> >>> properties [%d]: %s", reqDavProps.size(), reqDavProps));
> >>>            } catch (Exception ex) {
> >>>                ex.printStackTrace();
> >>>
> >>>
> >>>
> getLogger().warning(Localisation.getMessage("core.err.res.wksp.cont.propfind.bad.xml",
> >>> ex)); // NOI18N
> >>>            }
> >>>
> >>> Any ideas? Hints? Thanks in advance (will keep trying a few more
> >>> things meanwhile...)
> >>>
> >>> --
> >>> Fabián Mandelbaum
> >>> IS Engineer
> >>>
> >>> ------------------------------------------------------
> >>>
> >>>
> http://restlet.tigris.org/ds/viewMessage.do?dsForumId=4447&dsMessageId=2843267
> >>
> >>
> >
> >
> >
> > --
> > Fabián Mandelbaum
> > IS Engineer
> >
>
>
>
> --
> Fabián Mandelbaum
> IS Engineer
>
> ------------------------------------------------------
>
> http://restlet.tigris.org/ds/viewMessage.do?dsForumId=4447&dsMessageId=2849942
>

------------------------------------------------------
http://restlet.tigris.org/ds/viewMessage.do?dsForumId=4447&dsMessageId=2850159

Reply via email to