You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@jackrabbit.apache.org by "Pathare, Gaurang (GE Global Research)" <pa...@ge.com> on 2014/04/15 20:15:42 UTC

Unable to access repository using WebDAV from java.

Hi,

I've deployed jackrabbit-webapp-2.6.5.war in tomcat and I'm able to access http://localhost:8082/jackrabbit-webapp-2.6.5/server from browser.

But when I try to access repository from java test code
public class Test {

       @SuppressWarnings("nls")
       public static void main(String[] args) {

             Repository repository;
             Session session = null;
             try {
                    repository = JcrUtils
                                 .getRepository("http://localhost:8082/jackrabbit-webapp-2.6.5/server");

                    session = repository.login(new SimpleCredentials("admin", "admin"
                                 .toCharArray()));

                    Node node = session.getRootNode();

                    System.out.println("name" + node.getName() + " path "
                                 + node.getPath());

             } catch (Exception e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
             } finally {
                    if (session != null) {
                           session.logout();
                    }

             }
       }
}

It fails with following error.
.
javax.jcr.RepositoryException: Unable to access a repository with the following settings:
    org.apache.jackrabbit.repository.uri: http://localhost:8082/jackrabbit-webapp-2.6.5/server
The following RepositoryFactory classes were consulted:
    org.apache.jackrabbit.core.RepositoryFactoryImpl: declined
    org.apache.jackrabbit.commons.JndiRepositoryFactory: declined
    org.apache.jackrabbit.rmi.repository.RmiRepositoryFactory: failed
        because of RemoteRuntimeException: java.rmi.RemoteException: Failed to read the resource at URL http://localhost:8082/jackrabbit-webapp-2.6.5/server; nested exception is:
               java.io.IOException: Server returned HTTP response code: 401 for URL: http://localhost:8082/jackrabbit-webapp-2.6.5/server
        because of RemoteException: Failed to read the resource at URL http://localhost:8082/jackrabbit-webapp-2.6.5/server; nested exception is:
               java.io.IOException: Server returned HTTP response code: 401 for URL: http://localhost:8082/jackrabbit-webapp-2.6.5/server
        because of IOException: Server returned HTTP response code: 401 for URL: http://localhost:8082/jackrabbit-webapp-2.6.5/server
    org.apache.jackrabbit.jcr2spi.Jcr2spiRepositoryFactory: declined
Perhaps the repository you are trying to access is not available at the moment.
               at org.apache.jackrabbit.commons.JcrUtils.getRepository(JcrUtils.java:219)
               at org.apache.jackrabbit.commons.JcrUtils.getRepository(JcrUtils.java:259)
               at jackrabbit.Test.main(Test.java:33)



I've made following changes to Web.xml :

<servlet>
        <servlet-name>Repository</servlet-name>
        <description>
            This servlet provides other servlets and jsps a common way to access
            the repository. The repository can be accessed via JNDI, RMI or Webdav.
        </description>
        <servlet-class>org.apache.jackrabbit.j2ee.RepositoryAccessServlet</servlet-class>

        <init-param>
            <param-name>bootstrap-config</param-name>
            <param-value>/WEB-INF/repository/bootstrap.properties</param-value>



And bootstrap.properties file looks as follows:

# Repository configuration settings (will be adjusted by installer)
repository.config=/WEB-INF/repository/repository.xml
repository.home=../analyticCatalog
repository.name=analyticCatalog.repository

# RMI Settings
rmi.enabled=true
rmi.port=1234
rmi.host=localhost
# If the URI is not specified, it's composed as follows:
#rmi.uri=//${rmi.host}:${rmi.port}/${repository.name}

# JNDI Settings
# all properties starting with 'java.naming.' will go into the
# environment of the initial context
jndi.enabled=true
# if the name is not specified, it's initialized with the repository.name
#jndi.name=${repository.name}
java.naming.provider.url=http://www.apache.org/jackrabbit
java.naming.factory.initial=org.apache.jackrabbit.core.jndi.provider.DummyInitialContextFactory



security module in Reposiotry.xml:

<Security appName="Jackrabbit">
        <SecurityManager class="org.apache.jackrabbit.core.DefaultSecurityManager" workspaceName="security">
        </SecurityManager>
        <AccessManager class="org.apache.jackrabbit.core.security.DefaultAccessManager">
        </AccessManager>

        <LoginModule class="org.apache.jackrabbit.core.security.authentication.DefaultLoginModule">
           <param name="anonymousId" value="anonymous"/>
           <param name="adminId" value="admin"/>
        </LoginModule>
    </Security>


My questions are :


1.      Am I missing anything here ?

2.      Documentation says webDav should be enabled by default do I need to explicitly enable webdav somewhere just like we have rmi.enabled flag in bootstrap.properties ?

3.      Since it is a 401 error do I need to make any changes to login module ? or pass loging credentials when I call getRepository() ?

Kindly let me know if you need any more details.
Thanks in advance.

Regards,
Gaurang


Re: Unable to access repository using WebDAV from java.

Posted by gaurang <ga...@gmail.com>.
Thank you Jarek that help. 



--
View this message in context: http://jackrabbit.510166.n4.nabble.com/Unable-to-access-repository-using-WebDAV-from-java-tp4660713p4660752.html
Sent from the Jackrabbit - Users mailing list archive at Nabble.com.

Re: Unable to access repository using WebDAV from java.

Posted by Jarosław Marek <ja...@gmail.com>.
Hi Gaurag,
Make sure you have jackrabbit-jcr2dav on your classpath in your java
client application.
You need to have Jcr2davRepositoryFactory on your classpath in order
to be able to connect to the repository through WebDAV using java
application and it is included in the mentioned jar.

Regards,
Jarek

On Tue, Apr 15, 2014 at 8:15 PM, Pathare, Gaurang (GE Global Research)
<pa...@ge.com> wrote:
> Hi,
>
> I've deployed jackrabbit-webapp-2.6.5.war in tomcat and I'm able to access http://localhost:8082/jackrabbit-webapp-2.6.5/server from browser.
>
> But when I try to access repository from java test code
> public class Test {
>
>        @SuppressWarnings("nls")
>        public static void main(String[] args) {
>
>              Repository repository;
>              Session session = null;
>              try {
>                     repository = JcrUtils
>                                  .getRepository("http://localhost:8082/jackrabbit-webapp-2.6.5/server");
>
>                     session = repository.login(new SimpleCredentials("admin", "admin"
>                                  .toCharArray()));
>
>                     Node node = session.getRootNode();
>
>                     System.out.println("name" + node.getName() + " path "
>                                  + node.getPath());
>
>              } catch (Exception e) {
>                     // TODO Auto-generated catch block
>                     e.printStackTrace();
>              } finally {
>                     if (session != null) {
>                            session.logout();
>                     }
>
>              }
>        }
> }
>
> It fails with following error.
> .
> javax.jcr.RepositoryException: Unable to access a repository with the following settings:
>     org.apache.jackrabbit.repository.uri: http://localhost:8082/jackrabbit-webapp-2.6.5/server
> The following RepositoryFactory classes were consulted:
>     org.apache.jackrabbit.core.RepositoryFactoryImpl: declined
>     org.apache.jackrabbit.commons.JndiRepositoryFactory: declined
>     org.apache.jackrabbit.rmi.repository.RmiRepositoryFactory: failed
>         because of RemoteRuntimeException: java.rmi.RemoteException: Failed to read the resource at URL http://localhost:8082/jackrabbit-webapp-2.6.5/server; nested exception is:
>                java.io.IOException: Server returned HTTP response code: 401 for URL: http://localhost:8082/jackrabbit-webapp-2.6.5/server
>         because of RemoteException: Failed to read the resource at URL http://localhost:8082/jackrabbit-webapp-2.6.5/server; nested exception is:
>                java.io.IOException: Server returned HTTP response code: 401 for URL: http://localhost:8082/jackrabbit-webapp-2.6.5/server
>         because of IOException: Server returned HTTP response code: 401 for URL: http://localhost:8082/jackrabbit-webapp-2.6.5/server
>     org.apache.jackrabbit.jcr2spi.Jcr2spiRepositoryFactory: declined
> Perhaps the repository you are trying to access is not available at the moment.
>                at org.apache.jackrabbit.commons.JcrUtils.getRepository(JcrUtils.java:219)
>                at org.apache.jackrabbit.commons.JcrUtils.getRepository(JcrUtils.java:259)
>                at jackrabbit.Test.main(Test.java:33)
>
>
>
> I've made following changes to Web.xml :
>
> <servlet>
>         <servlet-name>Repository</servlet-name>
>         <description>
>             This servlet provides other servlets and jsps a common way to access
>             the repository. The repository can be accessed via JNDI, RMI or Webdav.
>         </description>
>         <servlet-class>org.apache.jackrabbit.j2ee.RepositoryAccessServlet</servlet-class>
>
>         <init-param>
>             <param-name>bootstrap-config</param-name>
>             <param-value>/WEB-INF/repository/bootstrap.properties</param-value>
>
>
>
> And bootstrap.properties file looks as follows:
>
> # Repository configuration settings (will be adjusted by installer)
> repository.config=/WEB-INF/repository/repository.xml
> repository.home=../analyticCatalog
> repository.name=analyticCatalog.repository
>
> # RMI Settings
> rmi.enabled=true
> rmi.port=1234
> rmi.host=localhost
> # If the URI is not specified, it's composed as follows:
> #rmi.uri=//${rmi.host}:${rmi.port}/${repository.name}
>
> # JNDI Settings
> # all properties starting with 'java.naming.' will go into the
> # environment of the initial context
> jndi.enabled=true
> # if the name is not specified, it's initialized with the repository.name
> #jndi.name=${repository.name}
> java.naming.provider.url=http://www.apache.org/jackrabbit
> java.naming.factory.initial=org.apache.jackrabbit.core.jndi.provider.DummyInitialContextFactory
>
>
>
> security module in Reposiotry.xml:
>
> <Security appName="Jackrabbit">
>         <SecurityManager class="org.apache.jackrabbit.core.DefaultSecurityManager" workspaceName="security">
>         </SecurityManager>
>         <AccessManager class="org.apache.jackrabbit.core.security.DefaultAccessManager">
>         </AccessManager>
>
>         <LoginModule class="org.apache.jackrabbit.core.security.authentication.DefaultLoginModule">
>            <param name="anonymousId" value="anonymous"/>
>            <param name="adminId" value="admin"/>
>         </LoginModule>
>     </Security>
>
>
> My questions are :
>
>
> 1.      Am I missing anything here ?
>
> 2.      Documentation says webDav should be enabled by default do I need to explicitly enable webdav somewhere just like we have rmi.enabled flag in bootstrap.properties ?
>
> 3.      Since it is a 401 error do I need to make any changes to login module ? or pass loging credentials when I call getRepository() ?
>
> Kindly let me know if you need any more details.
> Thanks in advance.
>
> Regards,
> Gaurang
>