Hi Robert, thanks for your comments. > Am 24.02.2016 um 21:17 schrieb Robert Munteanu <[email protected]>: > > Hi Konrad, > > On Wed, 2016-02-24 at 15:33 +0100, Konrad Windszus wrote: >> Hi, >> in the context of [0] the handling of usePut=true was extended to >> also create intermediate nodes through the Sling POST servlet. >> Currently the maven-sling-plugin behaves like this: >> >> If you use usePut=true then you must point the targetUrl towards a >> WebDAV implementation (which handles the PUT request). If the PUT >> returns a 409 (because the parent is not yet there) the plugin relies >> on the Sling POST servlet to create the intermediate parent nodes. In >> addition there is a check if the parent resource is already >> ther leveraging the Sling GET servlet together with the JSON >> rendition (GET request with .json extension). >> In case you use usePut=false, the ReST plugin from the Felix >> Webconsole is used [1]. >> >> For me the design being implemented in [0] seems weird, because by >> setting usePut=true you have a server-side dependency on 1.) the >> webdav bundle 2.) the Sling POST servlet bundle and 3.) The Sling >> Default GET Servlet (with JSON rendition enabled). Also since the >> same targetUrl is used in the client for all requests, all servlets >> must be listening below the same root path. >> >> Therefore I would propose to either >> a) only rely on the WebDAV bundle if usePut=true and therefore create >> the intermediate folders also with a MKCOL request (as proposed by >> Felix in http://apache-sling.73963.n3.nabble.com/Issue-using-PUT-with >> -maven-sling-plugin-and-non-existent-path-tp3885587p3916882.html). >> The check if a collection is already existing should be done through >> a HEAD request on the collection (instead of leveraging the GET >> servlet with the JSON rendition) >> b) only use the Sling POST servlet if usePut=true as proposed by >> Carsten in [3]. >> >> I would be in favor of a) because if you use the Sling WebDAV bundle >> the nodetype "sling:Folder" seems to be the default [4]. > > I agree, we can improve the way this works. > > Regarding your proposals: > > - removing the reliance on the Sling GET servlet sounds good to me. > - I don't have a strong opinion regarding a vs b ( WebDav vs Post ) but > keep in mind that the Sling POST servlet is more likely to be present > and active compared to the Webdav servlet. Also, with the post servlet > we can control the JCR primary type to use, but that's not possible > with the webdav servlet AFAICT
Actually a) and b) are not mutually exclusive. I would just prefer that with an option named usePut=true we would really only rely on WebDAV. Using the Sling POST Servlet could be just another alternative (which would require a different targetUrl IMHO). I will create a new JIRA to propose a patch to only rely on the WebDAV bundle whenever the usePut=true is used. This will then also fix https://issues.apache.org/jira/browse/SLING-5557. Later on we can create an improvement to also support adding a bundle via the Sling POST Servlet (but I think one option should be enough and IMHO only a) can be implemented in a completely backwards-compatible way, so that the target url doesn’t need to be changed) > > Thanks, > > Robert > > >> >> WDYT? >> Thanks, >> Konrad >> >> [0] - https://issues.apache.org/jira/browse/SLING-3540 >> [1] - http://felix.apache.org/documentation/subprojects/apache-felix- >> web-console/web-console-restful-api.html#bundles-plugin >> [2] - http://apache-sling.73963.n3.nabble.com/Issue-using-PUT-with-ma >> ven-sling-plugin-and-non-existent-path-tp3885587p3916882.html >> [3] - http://apache-sling.73963.n3.nabble.com/Issue-using-PUT-with-ma >> ven-sling-plugin-and-non-existent-path-tp3885587p3919590.html >> [4] - https://github.com/apache/sling/blob/61220a4667bc16b7b66a777f23 >> 83ec3ccf7c245a/bundles/jcr/webdav/src/main/java/org/apache/sling/jcr/ >> webdav/impl/servlets/SlingWebDavServlet.java#L125
