[ https://issues.apache.org/jira/browse/JCR-4458?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16895685#comment-16895685 ]
Woonsan Ko commented on JCR-4458: --------------------------------- Hi [~reschke], I've submitted a new PR: https://github.com/apache/jackrabbit/pull/85 This PR solves the problem case described above with jackrabbit-boot, and it also makes all the integrationTesting scenarios* passed. The PR includes the servlet_path_prefix.patch in JCR-4460. Basically, in the same way how {{org.apache.jackrabbit.webdav.WebdavRequestImpl#getHrefLocator(String, boolean)}} normalizes the _input_ href value by removing the contextPath prefix if found when creating a {{DavResourceLocator}}, the PR ensures every Report or Resource handling classes to normalize the _input_ href value from the input element when a {{DavResourceLocator}} needs to be created. As Report handlers do not have an access to {{WebdavRequest}}, I ended up introducing {{WebdavRequestContext}} and {{WebdavRequestContextHolder}}, which are set and removed in {{AbstractWebdavServlet#service()}}, in order to get the contextPath. Please review the PR. Thanks, Woonsan ----- \* {{mvn clean install -PintegrationTesting}}, {{mvn clean install -PintegrationTesting -DWebDAVServletPrefix=}}, and {{mvn clean install -PintegrationTesting -DWebDAVServletContext="/foo"}} > When JcrRemotingServlet deployed on non-root context, AclResource Webdav > request fails > -------------------------------------------------------------------------------------- > > Key: JCR-4458 > URL: https://issues.apache.org/jira/browse/JCR-4458 > Project: Jackrabbit Content Repository > Issue Type: Bug > Affects Versions: 2.18.2 > Reporter: Woonsan Ko > Assignee: Julian Reschke > Priority: Major > > If {{org.apache.jackrabbit.server.remoting.davex.JcrRemotingServlet}} is > configured in a non-root web application, the contextPath of which is "/cms" > for example with the servletPath, "/server", then > {{javax.jcr.Session#importXML(...)}} fails from a JCR client based on > JCR/WebDAV. In other words, {{#importXML(...)}} fails from a JCR {{Session}} > using a repository which can be created like the following for JCR over > WebDAV: > {code} > String repositoryAddress = "http://localhost:8080/cms/server"; > Jcr2davRepositoryFactory factory = new Jcr2davRepositoryFactory(); > Map<String, String> params = new HashMap<String, String>(); > params.put(JcrUtils.REPOSITORY_URI, repositoryAddress); > Repository repository = factory.getRepository(params); > // ... > {code} > It seems like that {{Session#importXML(...)}} call invokes an AclResource > Webdav request first on the specific resource path, but > {{org.apache.jackrabbit.webdav.jcr.version.report.JcrPrivilegeReport#init(DavResource, > ReportInfo)}} does not remove the contextPath, "/cms" for example, when > determining the resoucrePath. > Unlike the {{JcrPrivilegeReport}}, > {{org.apache.jackrabbit.webdav.WebdavRequestImpl#getHrefLocator(String, > boolean)}} seems to remove the contextPath properly. -- This message was sent by Atlassian JIRA (v7.6.14#76016)