It works great if I leave it as WebdavFileStore.....
Oliver Zeigermann wrote:
This behavior is almost for sure completely unrelated to the change you displayed above. Try reverting it and see if the behavior changes. If not look for other changes you have made - even if you feel they could not have caused this behavior. If it indeed does change the behavior please send in the complete Domain.xml
Oliver
On Tue, 09 Nov 2004 12:42:36 -0800, Brian Lee <[EMAIL PROTECTED]> wrote:
I tried extending it and I still get the same result:
"INFO: Server startup in 21270 ms http-8080-Processor25, 09-Nov-2004 12:41:42, root, OPTIONS, 200 "OK", 551 ms, / http-8080-Processor24, 09-Nov-2004 12:41:43, root, PROPFIND, 404 "Not Found", 227 ms, /"
Oliver Zeigermann wrote:
This looks like you have configured your custom store correctly. I do not quite understand what your problem is, what do you mean with "it can't even find the root directory"?
To see if this would work why not start with
class MyStore extends WebdavFileStore { }
and successively overloading the methods to your need. After each change you can see if it still works and if not you can always undo your experiment.
Oliver
On Tue, 09 Nov 2004 10:49:40 -0800, Brian Lee <[EMAIL PROTECTED]> wrote:
I could be wrong but it sounds like you're missing some jars from your lib directory in WEB-INF....
I have a problem too with WCK
As a quick test I simply took WebdavFileStore's source and copied it into a com.test.mystores.TestStore class.
I then changed domain.xml from:
<nodestore classname="org.apache.slide.simple.store.WebdavStoreAdapter"> <!-- replace the above line with this one if your Slide version and your store supports macro operations on the store level --> <!--nodestore classname="org.apache.slide.simple.store.WebdavStoreMacroAdapter"--> <parameter name="callback-store">org.apache.slide.simple.reference.WebdavFileStore</parameter> <!-- this is where all the resources in the /files collection go to --> <!-- adapt to your needs --> <parameter name="rootpath">store</parameter> </nodestore>
to:
<nodestore classname="org.apache.slide.simple.store.WebdavStoreAdapter"> <!-- replace the above line with this one if your Slide version and your store supports macro operations on the store level --> <!--nodestore classname="org.apache.slide.simple.store.WebdavStoreMacroAdapter"--> <parameter name="callback-store">com.test.mystores.TestStore</parameter> <!-- this is where all the resources in the /files collection go to --> <!-- adapt to your needs --> <parameter name="rootpath">store</parameter> </nodestore>
Source: (exactly like WebdavFileStore except for changed class names)
"package com.test.mystores.;
import java.io.BufferedInputStream; ....
public class TestStore implements BasicWebdavStore, WebdavStoreLockExtension, WebdavStoreBulkPropertyExtension, WebdavStoreMacroCopyExtension, WebdavStoreMacroMoveExtension, WebdavStoreMacroDeleteExtension {
private static final String ROOTPATH_PARAMETER = "rootpath";
private static final String LOCK_FILE_EXTENSION = ".lck";
private static final String PROPERTY_FILE_PREFIX = ".";
private static void save(InputStream is, File file) throws IOException { OutputStream os = new BufferedOutputStream(new FileOutputStream(file)); try { FileHelper.copy(is, os); } finally { try { is.close(); } finally { os.close(); } } }
private static File root = null;
private static Service service = null;
private static LoggerFacade logger = null;
public synchronized void begin(Service service, Principal principal, Object connection, LoggerFacade logger, Hashtable parameters) throws ServiceAccessException, ServiceParameterErrorException, ServiceParameterMissingException { // set parameters only once... if (TestStore.root == null) { TestStore.service = service; TestStore.logger = logger; String rootPath = (String) parameters.get(ROOTPATH_PARAMETER); if (rootPath == null) throw new ServiceParameterMissingException(service, ROOTPATH_PARAMETER);
TestStore.root = new File(rootPath); if (!TestStore.root.exists()) { if (!TestStore.root.mkdirs()) { throw new ServiceParameterErrorException(service, ROOTPATH_PARAMETER + ": " + TestStore.root + " does not exist and could not be created"); } else { logger.logInfo("Created root folder at: " + rootPath); } } } } ....."
Anyways when WebdavFileStore is used - everything works fine. However when my custom class is used - it can't even find the root directory.... Is there something I'm doing wrong?
Roman D wrote:
Hi,
I am trying to run example WCK servlet for 3 days with no luck. As far as I can understand from http://wiki.apache.org/jakarta-slide/WebDavConstructionKit WCK has *org.apache.slide.simple.reference.WebdavFileStore* which is not a servlet. It supposed to be used through Slide. Domain.xml configures Slide to use whatever storage you like, or something like that. Now, as I understand, I need to run Slide servlet *org.apache.slide.webdav.WebdavServlet* and use Domain.xml with *<parameter name="callback-store">org.apache.slide.store.simple.WebdavFileStore</parameter>
*So I put *Domain.xml* in *WEB-INF/classes*. Then add *slide-webdavservlet-2.2pre1.ja*r into *WEB-INF/lib* Then add following to web.xml; *<servlet-mapping> <servlet-name>org.apache.slide.webdav.WebdavServlet</servlet-name>* Tomcat 5.0 says: java.lang.IllegalArgumentException: Servlet mapping specifies an unknown servlet name org.apache.slide.webdav.WebdavServlet
What do I do wrong? Do I understand slide/wck relationship correctly?
Thanks!
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
<?xml version="1.0"?>
<slide>
<namespace name="cansas">
<definition>
<store name="simple">
<parameter name="cache-mode">cluster</parameter>
<!-- uncomment this if you are using Slide 2.2
and want more caching with timeout
(100 sec in this case) -->
<!--parameter name="cache-timeout">100</parameter>
<parameter name="cache-mode">full</parameter-->
<nodestore classname="org.apache.slide.simple.store.WebdavStoreAdapter">
<!-- replace the above line with this one if your Slide version and your store supports macro operations on the store level -->
<!--nodestore classname="org.apache.slide.simple.store.WebdavStoreMacroAdapter"-->
<parameter name="callback-store">com.macys.cansas.store.CansasStore</parameter>
<!--<parameter name="callback-store">org.apache.slide.simple.reference.WebdavFileStore</parameter>-->
<!-- this is where all the resources in the /files collection go to -->
<!-- adapt to your needs -->
<parameter name="rootpath">/store</parameter>
</nodestore>
<contentstore>
<reference store="nodestore"/>
</contentstore>
<revisiondescriptorsstore>
<reference store="nodestore"/>
</revisiondescriptorsstore>
<revisiondescriptorstore>
<reference store="nodestore"/>
</revisiondescriptorstore>
<lockstore>
<reference store="nodestore"/>
</lockstore>
<!-- uncomment this if your Slide version and your store supports macro operations on the store level -->
<!--macrostore>
<reference store="nodestore"/>
</macrostore-->
<!--lockstore classname="org.apache.slide.store.mem.TransientLockStore"/-->
<securitystore classname="org.apache.slide.store.mem.TransientSecurityStore"/>
</store>
<store name="memory">
<nodestore classname="org.apache.slide.store.mem.TransientNodeStore"/>
<contentstore classname="org.apache.slide.store.mem.TransientContentStore"/>
<revisiondescriptorsstore classname="org.apache.slide.store.mem.TransientDescriptorsStore"/>
<revisiondescriptorstore classname="org.apache.slide.store.mem.TransientDescriptorStore"/>
<securitystore classname="org.apache.slide.store.mem.TransientSecurityStore"/>
<lockstore classname="org.apache.slide.store.mem.TransientLockStore"/>
</store>
<scope match="/" store="memory"/>
<scope match="/files" store="simple"/>
</definition>
<configuration>
<!-- Actions mapping -->
<read-object>/actions/read</read-object>
<create-object>/actions/write</create-object>
<remove-object>/actions/write</remove-object>
<grant-permission>/actions/write-acl</grant-permission>
<revoke-permission>/actions/write-acl</revoke-permission>
<read-permissions>/actions/read-acl</read-permissions>
<read-own-permissions>/actions/read-current-user-privilege-set</read-own-permissions>
<lock-object>/actions/write</lock-object>
<kill-lock>/actions/unlock</kill-lock>
<read-locks>/actions/read</read-locks>
<read-revision-metadata>/actions/read</read-revision-metadata>
<create-revision-metadata>/actions/write-properties</create-revision-metadata>
<modify-revision-metadata>/actions/write-properties</modify-revision-metadata>
<remove-revision-metadata>/actions/write-properties</remove-revision-metadata>
<read-revision-content>/actions/read</read-revision-content>
<create-revision-content>/actions/write-content</create-revision-content>
<modify-revision-content>/actions/write-content</modify-revision-content>
<remove-revision-content>/actions/write-content</remove-revision-content>
<bind-member>/actions/bind</bind-member>
<unbind-member>/actions/unbind</unbind-member>
<!-- Paths configuration -->
<userspath>/users</userspath>
<rolespath>/roles</rolespath>
<actionspath>/actions</actionspath>
<filespath>/files</filespath>
<auto-create-users>true</auto-create-users>
<auto-create-users-role>slideroles.basic.RootRoleImpl</auto-create-users-role>
<parameter name="dav">true</parameter>
<parameter name="standalone">true</parameter>
<parameter name="acl_inheritance_type">path</parameter>
<!-- Nested roles: 0 means no nesting (default), 1 means one sublevel, etc. -->
<parameter name="nested_roles_maxdepth">0</parameter>
<!-- Can be "off", "write" and "full" -->
<parameter name="sequential-mode">full</parameter>
<!-- enable this if you use Slide 2.2 and want more fine grained locks
resulting in improved concurrency -->
<!--parameter name="sequential-mode">fine-grain</parameter-->
<!-- "false" lets all read-only methods be executed outside of transactions -->
<parameter name="all-methods-in-transactions">true</parameter>
<!-- Setting this to true will force Slide to internally convert the username a user
enters at login to lowercase. This is useful for users who can't be bothered
with turning off their capslock key before logging in. -->
<parameter name="force-lowercase-login">false</parameter>
<parameter name="auto-create-users">true</parameter>
<parameter name="auto-create-users-role">slideroles.basic.RootRoleImpl</parameter>
</configuration>
<data>
<objectnode classname="org.apache.slide.structure.SubjectNode" uri="/">
<!-- Subject can be:
any user "all"
authenticated user "authenticated"
unauthenticated user "unauthenticated"
self "self"
owner of resource "owner"
a user "/users/john"
a role "/roles/admin"
-->
<permission action="all" subject="/roles/root" inheritable="true"/>
<permission action="/actions/read-acl" subject="all" inheritable="true" negative="true"/>
<permission action="/actions/write-acl" subject="all" inheritable="true" negative="true"/>
<permission action="/actions/unlock" subject="all" inheritable="true" negative="true"/>
<permission action="/actions/read" subject="all" inheritable="true"/>
<!-- /users -->
<objectnode classname="org.apache.slide.structure.SubjectNode" uri="/users">
<permission action="all" subject="self" inheritable="true"/>
<permission action="all" subject="/roles/projector" inheritable="true"/>
<permission action="all" subject="unauthenticated" inheritable="true" negative="true"/>
<!-- /users/root represents the administrator -->
<objectnode classname="org.apache.slide.structure.SubjectNode" uri="/users/root">
<revision>
<property namespace="http://jakarta.apache.org/slide/" name="password">root</property>
</revision>
</objectnode>
<!-- /users/john and /users/john2 represent authenticated users -->
<objectnode classname="org.apache.slide.structure.SubjectNode" uri="/users/john">
<revision>
<property namespace="http://jakarta.apache.org/slide/" name="password">john</property>
</revision>
</objectnode>
<objectnode classname="org.apache.slide.structure.SubjectNode" uri="/users/john2">
<revision>
<property namespace="http://jakarta.apache.org/slide/" name="password">john2</property>
</revision>
</objectnode>
<!-- /users/guest represents an authenticated or unauthenticated guest user -->
<objectnode classname="org.apache.slide.structure.SubjectNode" uri="/users/guest">
<revision>
<property namespace="http://jakarta.apache.org/slide/" name="password">guest</property>
</revision>
</objectnode>
<objectnode classname="org.apache.slide.structure.SubjectNode" uri="/users/projector">
<revision>
<property namespace="http://jakarta.apache.org/slide/" name="password">projector</property>
</revision>
</objectnode>
</objectnode>
<!-- /roles -->
<objectnode classname="org.apache.slide.structure.SubjectNode" uri="/roles">
<permission action="all" subject="self" inheritable="true"/>
<permission action="all" subject="/roles/projector" inheritable="true"/>
<permission action="all" subject="unauthenticated" inheritable="true" negative="true"/>
<objectnode classname="org.apache.slide.structure.SubjectNode" uri="/roles/root">
<revision>
<property name="group-member-set"><![CDATA[<D:href xmlns:D='DAV:'>/users/root</D:href>]]></property>
</revision>
</objectnode>
<objectnode classname="org.apache.slide.structure.SubjectNode" uri="/roles/user">
<revision>
<property name="group-member-set"><![CDATA[<D:href xmlns:D='DAV:'>/users/john</D:href><D:href xmlns:D='DAV:'>/users/john2</D:href><D:href xmlns:D='DAV:'>/users/root</D:href><D:href xmlns:D='DAV:'>/users/projector</D:href>]]></property>
</revision>
</objectnode>
<objectnode classname="org.apache.slide.structure.SubjectNode" uri="/roles/guest">
<revision>
<property name="group-member-set"><![CDATA[<D:href xmlns:D='DAV:'>/users/guest</D:href>]]></property>
</revision>
</objectnode>
<objectnode classname="org.apache.slide.structure.SubjectNode" uri="/roles/projector">
<revision>
<property name="group-member-set"><![CDATA[<D:href xmlns:D='DAV:'>/users/root</D:href><D:href xmlns:D='DAV:'>/users/projector</D:href>]]></property>
</revision>
</objectnode>
</objectnode>
<!-- action -->
<objectnode classname="org.apache.slide.structure.ActionNode" uri="/actions">
<objectnode classname="org.apache.slide.structure.ActionNode" uri="/actions/read">
<revision>
<property name="privilege-member-set"><![CDATA[<D:href xmlns:D='DAV:'>/actions/read-acl</D:href> <D:href xmlns:D='DAV:'>/actions/read-current-user-privilege-set</D:href>]]></property>
</revision>
</objectnode>
<objectnode classname="org.apache.slide.structure.ActionNode" uri="/actions/read-acl">
<revision>
<property name="privilege-member-set"/>
</revision>
</objectnode>
<objectnode classname="org.apache.slide.structure.ActionNode" uri="/actions/read-current-user-privilege-set">
<revision>
<property name="privilege-member-set"/>
</revision>
</objectnode>
<objectnode classname="org.apache.slide.structure.ActionNode" uri="/actions/write">
<revision>
<property name="privilege-member-set"><![CDATA[<D:href xmlns:D='DAV:'>/actions/write-acl</D:href> <D:href xmlns:D='DAV:'>/actions/write-properties</D:href> <D:href xmlns:D='DAV:'>/actions/write-content</D:href>]]></property>
</revision>
</objectnode>
<objectnode classname="org.apache.slide.structure.ActionNode" uri="/actions/write-acl">
<revision>
<property name="privilege-member-set"/>
</revision>
</objectnode>
<objectnode classname="org.apache.slide.structure.ActionNode" uri="/actions/write-properties">
<revision>
<property name="privilege-member-set"/>
</revision>
</objectnode>
<objectnode classname="org.apache.slide.structure.ActionNode" uri="/actions/write-content">
<revision>
<property name="privilege-member-set"><![CDATA[<D:href xmlns:D='DAV:'>/actions/bind</D:href> <D:href xmlns:D='DAV:'>/actions/unbind</D:href>]]></property>
</revision>
</objectnode>
<objectnode classname="org.apache.slide.structure.ActionNode" uri="/actions/bind">
<revision>
<property name="privilege-member-set"/>
</revision>
</objectnode>
<objectnode classname="org.apache.slide.structure.ActionNode" uri="/actions/unbind">
<revision>
<property name="privilege-member-set"/>
</revision>
</objectnode>
<objectnode classname="org.apache.slide.structure.ActionNode" uri="/actions/unlock">
<revision>
<property name="privilege-member-set"/>
</revision>
</objectnode>
</objectnode>
<objectnode classname="org.apache.slide.structure.SubjectNode" uri="/files">
<!-- to make clear to stores that rely on it this is a collection -->
<revision>
<property name="resourcetype"><![CDATA[<collection/>]]></property>
</revision>
<permission action="all" subject="unauthenticated" inheritable="true"/>
<permission action="all" subject="/roles/user" inheritable="true"/>
</objectnode>
<objectnode classname="org.apache.slide.structure.SubjectNode" uri="/projector">
<permission action="all" subject="unauthenticated" inheritable="true"/>
<permission action="/actions/write" subject="/roles/projector" inheritable="true"/>
<permission action="/actions/read-acl" subject="owner" inheritable="true"/>
<objectnode classname="org.apache.slide.structure.SubjectNode" uri="/projector/work">
</objectnode>
</objectnode>
<!-- DeltaV: default history and workspace paths -->
<objectnode classname="org.apache.slide.structure.SubjectNode" uri="/history">
<permission action="all" subject="unauthenticated" inheritable="true"/>
<permission action="/actions/write" subject="/roles/user" inheritable="true"/>
<permission action="/actions/read-acl" subject="owner" inheritable="true"/>
</objectnode>
<objectnode classname="org.apache.slide.structure.SubjectNode" uri="/workspace">
<permission action="all" subject="unauthenticated" inheritable="true"/>
<permission action="/actions/write" subject="/roles/user" inheritable="true"/>
<permission action="/actions/read-acl" subject="owner" inheritable="true"/>
</objectnode>
<objectnode classname="org.apache.slide.structure.SubjectNode" uri="/workingresource">
<permission action="all" subject="unauthenticated" inheritable="true"/>
<permission action="/actions/write" subject="/roles/user" inheritable="true"/>
<permission action="/actions/read-acl" subject="owner" inheritable="true"/>
</objectnode>
</objectnode>
</data>
</namespace>
<!--
DeltaV global parameters
========================
* historypath (mandatory=no, default="/history"):
Specifies a Slide path which determines the location where this DeltaV
server stores history data.
* workspacepath (mandatory=no, default="/workspace"):
Specifies a Slide path which determines the location where this DeltaV
server allows workspaces to reside.
* workingresourcepath (mandatory=no, default="/workingresource"):
Specifies a Slide path which determines the location where this DeltaV
server stores working resources.
* auto-version (mandatory=no, default="checkout-checkin"):
Controls the DeltaV auto-version behaviour.
* auto-version-control (mandatory=no, default="false"):
Indicates if a resource just created by a PUT should be set under
version-control.
* versioncontrol-exclude (mandatory=no, default=""):
Specifies a Slide path which determines resources which are excluded from version-control.
The default value "" makes no path being excluded.
* checkout-fork (mandatory=no, default="forbidden"):
Controls the DeltaV check-out behaviour when a version is already
checked-out or has a successor.
* checkin-fork (mandatory=no, default="forbidden"):
Controls the DeltaV check-out behaviour when a version has already a
successor.
* standardLivePropertiesClass (mandatory=no,
default="org.apache.slide.webdav.util.resourcekind.AbstractResourceKind"):
Determines the "agent" knowing about what the standard live properties are.
It should be a loadable class containing the following static methods:
- boolean isLiveProperty(String propName)
- boolean isProtectedProperty(String propName)
- boolean isComputedProperty(String propName)
- Set getAllLiveProperties()
- Set getAllProtectedProperties()
- Set getAllComputedProperties()
* uriRedirectorClass (mandatory=no,
default="org.apache.slide.webdav.util.DeltavUriRedirector"):
Determines the URI redirector class. The DeltaV URI redirector is in
charge of the following redirections:
- version URI to history URI, e.g. /history/2/1.4 to /history/2
- latest revision number for history resource to 0.0
- latest revision number for version resource to last URI token,
e.g. /history/2/1.4 to 1.4
It should be a loadable class containing the following static methods:
- String redirectUri(String uri)
- NodeRevisionNumber redirectLatestRevisionNumber(String uri)
-->
<parameter name="historypath">/history</parameter>
<parameter name="workspacepath">/workspace</parameter>
<parameter name="workingresourcepath">/workingresource</parameter>
<parameter name="auto-version">checkout-checkin</parameter>
<parameter name="auto-version-control">false</parameter>
<parameter name="versioncontrol-exclude"/>
<parameter name="checkout-fork">forbidden</parameter>
<parameter name="checkin-fork">forbidden</parameter>
<!-- Extractor configuration -->
<extractors>
<extractor classname="org.apache.slide.extractor.SimpleXmlExtractor" uri="/files/articles/test.xml">
<configuration>
<instruction property="title" xpath="/article/title/text()" />
<instruction property="summary" xpath="/article/summary/text()" />
</configuration>
</extractor>
<extractor classname="org.apache.slide.extractor.OfficeExtractor" uri="/files/docs/">
<configuration>
<instruction property="author" id="SummaryInformation-0-4" />
<instruction property="application" id="SummaryInformation-0-18" />
</configuration>
</extractor>
</extractors>
<!-- Event configuration -->
<events>
<event classname="org.apache.slide.webdav.event.WebdavEvent" enable="true" />
<event classname="org.apache.slide.event.ContentEvent" enable="true" />
<event classname="org.apache.slide.event.ContentEvent" method="retrieve" enable="false" />
<event classname="org.apache.slide.event.EventCollection" enable="true" />
<event classname="org.apache.slide.event.TransactionEvent" enable="true" />
<event classname="org.apache.slide.event.MacroEvent" enable="true"/>
<!--listener classname="org.apache.slide.util.event.EventLogger" /-->
<listener classname="org.apache.slide.event.VetoableEventCollector" />
<listener classname="org.apache.slide.event.TransientEventCollector" />
<listener classname="org.apache.slide.webdav.event.NotificationTrigger">
<configuration>
<notification include-events="false" />
<persist-subscriptions filename="subscriptions.xml" />
</configuration>
</listener>
<listener classname="org.apache.slide.extractor.PropertyExtractorTrigger" />
<listener classname="org.apache.slide.search.IndexTrigger">
<configuration>
<indexer classname="org.apache.slide.search.LoggingIndexer" synchronous="false" uri="/files/articles" />
</configuration>
</listener>
<!-- Uncomment for cluster support. Be sure to local-host and repository-host -->
<!--
<listener classname="org.apache.slide.cluster.ClusterCacheRefresher">
<configuration>
<node local-host="local.host.domain"
local-port="4444"
repository-host="remote.host.domain"
repository-port="8080"
repository-protocol="http"
username="root"
password="root"
base-uri="/files/"
/>
</configuration>
</listener>
-->
<listener classname="org.apache.slide.macro.MacroPropertyUpdater">
<!-- Listener that updates some properties if resources are
copied or moved. This requires MacroEvents enabled (at
least methods copy and move) -->
<configuration>
<update-displayname>true</update-displayname>
<update-owner-on-move>false</update-owner-on-move>
<update-owner-on-copy>true</update-owner-on-copy>
</configuration>
</listener>
</events>
</slide>
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
